forked from pool/xorg-x11-server
Accepting request 21377 from X11:XOrg
Copy from X11:XOrg/xorg-x11-server based on submit request 21377 from user sndirsch OBS-URL: https://build.opensuse.org/request/show/21377 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xorg-x11-server?expand=0&rev=143
This commit is contained in:
parent
7e80a0dbbc
commit
1884b4cb34
147
dga-removal-fix.diff
Normal file
147
dga-removal-fix.diff
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
Removing DGA ended up breaking any drivers calling into the old
|
||||||
|
xf86DiDGAInit function as it tried to see if DGA was already enabled
|
||||||
|
and ended up crashing if the VT wasn't completely initialized. Oops.
|
||||||
|
|
||||||
|
Also, if the driver initializes DGA itself, have the DiDGA
|
||||||
|
initialization overwrite that information as the DiDGA code will call
|
||||||
|
ReInit on mode detect.
|
||||||
|
|
||||||
|
Signed-off-by: Keith Packard <keithp@keithp.com>
|
||||||
|
---
|
||||||
|
hw/xfree86/common/xf86DGA.c | 29 ++++++++++++++++-------------
|
||||||
|
hw/xfree86/modes/xf86Crtc.c | 4 ++--
|
||||||
|
hw/xfree86/modes/xf86Crtc.h | 8 ++++++++
|
||||||
|
hw/xfree86/modes/xf86DiDGA.c | 15 ++++++++++++---
|
||||||
|
4 files changed, 38 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
|
||||||
|
index 42b7c58..804fd37 100644
|
||||||
|
--- a/hw/xfree86/common/xf86DGA.c
|
||||||
|
+++ b/hw/xfree86/common/xf86DGA.c
|
||||||
|
@@ -120,8 +120,22 @@ DGAInit(
|
||||||
|
|
||||||
|
DGAScreenKey = &DGAScreenKeyIndex;
|
||||||
|
|
||||||
|
- if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
|
||||||
|
- return FALSE;
|
||||||
|
+ pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
|
||||||
|
+
|
||||||
|
+ if (!pScreenPriv)
|
||||||
|
+ {
|
||||||
|
+ if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
|
||||||
|
+ return FALSE;
|
||||||
|
+ dixSetPrivate(&pScreen->devPrivates, DGAScreenKey, pScreenPriv);
|
||||||
|
+ pScreenPriv->CloseScreen = pScreen->CloseScreen;
|
||||||
|
+ pScreen->CloseScreen = DGACloseScreen;
|
||||||
|
+ pScreenPriv->DestroyColormap = pScreen->DestroyColormap;
|
||||||
|
+ pScreen->DestroyColormap = DGADestroyColormap;
|
||||||
|
+ pScreenPriv->InstallColormap = pScreen->InstallColormap;
|
||||||
|
+ pScreen->InstallColormap = DGAInstallColormap;
|
||||||
|
+ pScreenPriv->UninstallColormap = pScreen->UninstallColormap;
|
||||||
|
+ pScreen->UninstallColormap = DGAUninstallColormap;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
pScreenPriv->pScrn = pScrn;
|
||||||
|
pScreenPriv->numModes = num;
|
||||||
|
@@ -146,17 +160,6 @@ DGAInit(
|
||||||
|
modes[i].flags &= ~DGA_PIXMAP_AVAILABLE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- dixSetPrivate(&pScreen->devPrivates, DGAScreenKey, pScreenPriv);
|
||||||
|
- pScreenPriv->CloseScreen = pScreen->CloseScreen;
|
||||||
|
- pScreen->CloseScreen = DGACloseScreen;
|
||||||
|
- pScreenPriv->DestroyColormap = pScreen->DestroyColormap;
|
||||||
|
- pScreen->DestroyColormap = DGADestroyColormap;
|
||||||
|
- pScreenPriv->InstallColormap = pScreen->InstallColormap;
|
||||||
|
- pScreen->InstallColormap = DGAInstallColormap;
|
||||||
|
- pScreenPriv->UninstallColormap = pScreen->UninstallColormap;
|
||||||
|
- pScreen->UninstallColormap = DGAUninstallColormap;
|
||||||
|
-
|
||||||
|
-
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
index c1e31e0..f274725 100644
|
||||||
|
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
@@ -806,7 +806,7 @@ xf86CrtcScreenInit (ScreenPtr screen)
|
||||||
|
screen->CloseScreen = xf86CrtcCloseScreen;
|
||||||
|
|
||||||
|
#ifdef XFreeXDGA
|
||||||
|
- xf86DiDGAInit(screen, 0);
|
||||||
|
+ _xf86_di_dga_init_for_reals(screen);
|
||||||
|
#endif
|
||||||
|
#ifdef RANDR_13_INTERFACE
|
||||||
|
return RANDR_INTERFACE_VERSION;
|
||||||
|
@@ -1928,7 +1928,7 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
|
||||||
|
scrn->currentMode = scrn->modes;
|
||||||
|
#ifdef XFreeXDGA
|
||||||
|
if (scrn->pScreen)
|
||||||
|
- xf86DiDGAReInit(scrn->pScreen);
|
||||||
|
+ _xf86_di_dga_reinit_for_reals(scrn->pScreen);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
|
||||||
|
index 69afaa5..edf84d8 100644
|
||||||
|
--- a/hw/xfree86/modes/xf86Crtc.h
|
||||||
|
+++ b/hw/xfree86/modes/xf86Crtc.h
|
||||||
|
@@ -833,6 +833,10 @@ xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
|
||||||
|
extern _X_EXPORT Bool
|
||||||
|
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
|
||||||
|
|
||||||
|
+/* this is the real function, used only internally */
|
||||||
|
+_X_INTERNAL Bool
|
||||||
|
+_xf86_di_dga_init_for_reals (ScreenPtr pScreen);
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Re-initialize dga for this screen (as when the set of modes changes)
|
||||||
|
*/
|
||||||
|
@@ -841,6 +845,10 @@ extern _X_EXPORT Bool
|
||||||
|
xf86DiDGAReInit (ScreenPtr pScreen);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* This is the real function, used only internally */
|
||||||
|
+_X_INTERNAL Bool
|
||||||
|
+_xf86_di_dga_reinit_for_reals (ScreenPtr pScreen);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Set the subpixel order reported for the screen using
|
||||||
|
* the information from the outputs
|
||||||
|
diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
|
||||||
|
index 0f7b834..3df3754 100644
|
||||||
|
--- a/hw/xfree86/modes/xf86DiDGA.c
|
||||||
|
+++ b/hw/xfree86/modes/xf86DiDGA.c
|
||||||
|
@@ -175,6 +175,12 @@ static DGAFunctionRec xf86_dga_funcs = {
|
||||||
|
Bool
|
||||||
|
xf86DiDGAReInit (ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+_X_INTERNAL Bool
|
||||||
|
+_xf86_di_dga_reinit_for_reals (ScreenPtr pScreen)
|
||||||
|
+{
|
||||||
|
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
|
||||||
|
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||||
|
|
||||||
|
@@ -190,12 +196,15 @@ xf86DiDGAReInit (ScreenPtr pScreen)
|
||||||
|
Bool
|
||||||
|
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address)
|
||||||
|
{
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+_X_INTERNAL Bool
|
||||||
|
+_xf86_di_dga_init_for_reals (ScreenPtr pScreen)
|
||||||
|
+{
|
||||||
|
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
|
||||||
|
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||||
|
|
||||||
|
- if (DGAAvailable(pScreen->myNum))
|
||||||
|
- return TRUE;
|
||||||
|
-
|
||||||
|
xf86_config->dga_flags = 0;
|
||||||
|
xf86_config->dga_address = 0;
|
||||||
|
xf86_config->dga_width = 0;
|
@ -1,3 +1,12 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 29 19:43:23 CEST 2009 - sndirsch@suse.de
|
||||||
|
|
||||||
|
- dga-removal-fix.diff
|
||||||
|
* "Removing DGA ended up breaking any drivers calling into the old
|
||||||
|
xf86DiDGAInit function as it tried to see if DGA was already
|
||||||
|
enabled and ended up crashing if the VT wasn't completely
|
||||||
|
initialized. Oops."
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Sep 28 20:50:34 CEST 2009 - sndirsch@suse.de
|
Mon Sep 28 20:50:34 CEST 2009 - sndirsch@suse.de
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ BuildRequires: libjpeg-devel
|
|||||||
Url: http://xorg.freedesktop.org/
|
Url: http://xorg.freedesktop.org/
|
||||||
%define EXPERIMENTAL 0
|
%define EXPERIMENTAL 0
|
||||||
Version: 7.4
|
Version: 7.4
|
||||||
Release: 55
|
Release: 56
|
||||||
License: GPL v2 or later ; MIT License (or similar)
|
License: GPL v2 or later ; MIT License (or similar)
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
Group: System/X11/Servers/XF86_4
|
Group: System/X11/Servers/XF86_4
|
||||||
@ -138,6 +138,7 @@ Patch171: moblin-use_preferred_mode_for_all_outputs.diff
|
|||||||
Patch190: 0001-Unclaim-PCI-slot-if-driver-probing-fails.patch
|
Patch190: 0001-Unclaim-PCI-slot-if-driver-probing-fails.patch
|
||||||
Patch191: 0001-Fix-sporadic-segfault-on-resume-with-intel-KMS-due-t.patch
|
Patch191: 0001-Fix-sporadic-segfault-on-resume-with-intel-KMS-due-t.patch
|
||||||
Patch200: bug534768-prefer_local_symbols.patch
|
Patch200: bug534768-prefer_local_symbols.patch
|
||||||
|
Patch201: dga-removal-fix.diff
|
||||||
Patch532341: bug532341.diff
|
Patch532341: bug532341.diff
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -281,6 +282,7 @@ popd
|
|||||||
%patch190 -p1
|
%patch190 -p1
|
||||||
%patch191 -p1
|
%patch191 -p1
|
||||||
%patch200 -p1
|
%patch200 -p1
|
||||||
|
%patch201 -p1
|
||||||
%patch532341 -p1
|
%patch532341 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
Loading…
Reference in New Issue
Block a user