[PATCH] xfree86: die gracefully in the vga arbiter if AddScreen fails
Tiago Vignatti
tiago.vignatti at nokia.com
Thu Apr 1 08:57:50 PDT 2010
vga arbiter will be locked in one device while AbortDDX will call LeaveVT
routines from the other device. Fail!
Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
---
Keith, you might want to apply in 1.8 this one.
The stack is the following, where NVSync stays spinning forever:
0xb72828f9 in NVSync (pScrn=0x9277910) at nv_xaa.c:287
287 while(READ_GET(pNv) != pNv->dmaPut);
(gdb) bt
#0 0xb72828f9 in NVSync (pScrn=0x9277910) at nv_xaa.c:287
#1 0xb72742a0 in NVLeaveVT (scrnIndex=0, flags=0) at nv_driver.c:1044
#2 0xb602c11c in XAALeaveVT (index=0, flags=0) at xaaInit.c:534
#3 0x081df8dd in xf86XVLeaveVT (index=0, flags=0) at xf86xv.c:1274
#4 0x080c1f66 in AbortDDX () at xf86Init.c:1272
#5 0x080b4429 in AbortServer () at log.c:418
#6 0x080b484f in FatalError (
f=0x8228c5c "AddScreen/ScreenInit failed for driver %d\n") at log.c:546
#7 0x080c1b9d in InitOutput (pScreenInfo=0x82597e0, argc=6, argv=0xbf85fe74)
at xf86Init.c:1072
#8 0x08065363 in main (argc=6, argv=0xbf85fe74, envp=0xbf85fe90) at
main.c:249
hw/xfree86/common/xf86Init.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 72241a7..71ac9a9 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1269,7 +1269,9 @@ AbortDDX(void)
* we might not have been wrapped yet. Therefore enable
* screen explicitely.
*/
+ xf86VGAarbiterLock(xf86Screens[i]);
(xf86Screens[i]->LeaveVT)(i, 0);
+ xf86VGAarbiterUnlock(xf86Screens[i]);
}
}
--
1.6.0.4
More information about the xorg-devel
mailing list