Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:Update
xorg-x11-server.16231
U_xfree86_set_pscrn_pscreen_before_driver_scree...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File U_xfree86_set_pscrn_pscreen_before_driver_screeninit_is_called.patch of Package xorg-x11-server.16231
Git-commit: 69b782aa75bc06f11b8f9b532d5213f252c4c6c4 Author: Keith Packard <keithp@keithp.com> Subject: [PATCH] xfree86: Set pScrn->pScreen before driver ScreenInit is called Patch-Mainline: Upstream References: fate#321052 Signed-off-by: Michal Srb <msrb@suse.com> Any code called from the driver ScreenInit may want to refer to pScrn->pScreen. As the function passed to AddScreen is the first place the DDX sees a new screen, the generic code needs to make sure that value is set before passing control to the video driver's initialization code. This was found by running a driver which didn't bother to set this value when the initial colormap was installed; xf86RandR12LoadPalette tried to use pScrn->pScreen and crashed. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97124 Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com> Index: xorg-server-1.18.3/hw/xfree86/common/xf86Init.c =================================================================== --- xorg-server-1.18.3.orig/hw/xfree86/common/xf86Init.c +++ xorg-server-1.18.3/hw/xfree86/common/xf86Init.c @@ -370,6 +370,15 @@ InstallSignalHandlers(void) * use a global. */ static CARD32 HasVTValue = 1; +static Bool +xf86ScreenInit(ScreenPtr pScreen, int argc, char **argv) +{ + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); + + pScrn->pScreen = pScreen; + return pScrn->ScreenInit (pScreen, argc, argv); +} + /* * InitOutput -- * Initialize screenInfo for all actually accessible framebuffers. @@ -854,7 +863,7 @@ InitOutput(ScreenInfo * pScreenInfo, int pScrn->SetOverscan = NULL; pScrn->DriverFunc = NULL; pScrn->pScreen = NULL; - scr_index = AddGPUScreen(pScrn->ScreenInit, argc, argv); + scr_index = AddGPUScreen(xf86ScreenInit, argc, argv); xf86VGAarbiterUnlock(pScrn); if (scr_index == i) { dixSetPrivate(&screenInfo.gpuscreens[scr_index]->devPrivates, @@ -882,7 +891,7 @@ InitOutput(ScreenInfo * pScreenInfo, int xf86Screens[i]->SetOverscan = NULL; xf86Screens[i]->DriverFunc = NULL; xf86Screens[i]->pScreen = NULL; - scr_index = AddScreen(xf86Screens[i]->ScreenInit, argc, argv); + scr_index = AddScreen(xf86ScreenInit, argc, argv); xf86VGAarbiterUnlock(xf86Screens[i]); if (scr_index == i) { /*
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor