Summary: | sna_driver causes X-server to get SIGSEGV | ||
---|---|---|---|
Product: | xorg | Reporter: | Jason Vas Dias <jason.vas.dias> |
Component: | Driver/intel | Assignee: | Chris Wilson <chris> |
Status: | RESOLVED FIXED | QA Contact: | Intel GFX Bugs mailing list <intel-gfx-bugs> |
Severity: | normal | ||
Priority: | medium | ||
Version: | git | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Jason Vas Dias
2016-04-28 12:22:58 UTC
Your patches are incorrect. Perhaps if you used the once in the source? (In reply to Chris Wilson from comment #1) > Your patches are incorrect. Perhaps if you used the once in the source? Please explain what you mean by this - I cannot determine what this might be. Patch A allows the Xorg server to start without core dumping: --- kgem.c~ 2016-04-25 23:32:41.073898879 +0000 +++ kgem.c 2016-04-28 12:20:41.006474178 +0000 @@ -2789 +2789 @@ - kgem->retire(kgem); + if(NULL != kgem->retire) kgem->retire(kgem); Patch B prevents the Xorg server core dumping on window manager initialization: @@ -2971 +2971,2 @@ + if ((kgem->fence[rq->ring] == NULL) && + (NULL != rq) && (NULL != rq->bo) && (NULL != rq->bo->handle) Unfortunately, while it does prevent the XServer from core dumping, Patch B does not allow it to proceed - it just hangs - it is rather weird, because at first the Xserver starts and displays an xterm; then, when I try to start the window manager, the graphical display disappears , a blank screen is displayed, and the machine ceases to respond to any keystroke (like the the VT-Switch sequence: <CTRL>+<ALT>+<F[N]> to switch to terminal N, or <CTRL>+<ALT>+<DEL> to reboot - none of them have any effect) . At first, this hang was caused by the x86-video-intel driver coredumping when trying to invoke __kgem_busy(kgem, rq->bo->handle) when rq->bo is NULL, at kgem.c line 2973, but now with Patch B fixing this, there is no coredump, but the server still hangs the machine and there is no display of anything (text or graphics) and no way of stopping the machine except by removing the power cable and battery - the power button does not work either). Any ideas how to work around so that I can start a window manager ? Thank & Regards, Jason There are a few other places where the xf86-video-intel code core dumps on access to rq->bo - here are the ones I've found: $ diff -U0 kgem.c~ kgem.c --- kgem.c~ 2016-04-25 23:32:41.073898879 +0000 +++ kgem.c 2016-04-28 18:04:21.161610936 +0000 @@ -2734,2 +2734,3 @@ - if (__kgem_busy(kgem, rq->bo->handle)) - break; + if( (NULL != rq) && (NULL != rq->bo) ) + if (__kgem_busy(kgem, rq->bo->handle)) + break; @@ -2789 +2790 @@ - kgem->retire(kgem); + if(NULL != kgem->retire) kgem->retire(kgem); @@ -2804 +2805 @@ - + if( (NULL != rq) && (NULL != rq->bo) ) @@ -2827 +2828,2 @@ - if (__kgem_busy(kgem, rq->bo->handle)) { + if( (NULL != rq) && (NULL != rq->bo) ) + if (__kgem_busy(kgem, rq->bo->handle)) { @@ -2832,3 +2834,3 @@ - } - - DBG(("%s: ring=%d idle (handle=%d)\n", + } + if( (NULL != rq) && (NULL != rq->bo) ) + DBG(("%s: ring=%d idle (handle=%d)\n", @@ -2970,4 +2972,4 @@ - - if (kgem->fence[rq->ring] == NULL && - __kgem_busy(kgem, rq->bo->handle)) - kgem->fence[rq->ring] = rq; + if (kgem->fence[rq->ring] == NULL) + if( (NULL != rq) && (NULL != rq->bo) ) + if( __kgem_busy(kgem, rq->bo->handle) ) + kgem->fence[rq->ring] = rq; The X-Server no longer coredumps, the display just goes black and the machine hangs on window manager start - it also happens with twm . I guess I'll have to wait until I get access to another machine in order to debug Xserver with GDB & get to the bottom of the problem. Aha! I got the window manager working, with the patches applied to xf86-video-intel, by specifying these Options in xorg.conf : Section "Device" Identifier "Intel" Screen 0 Driver "intel" BusID "PCI:0:2:0" Option "Monitor-eDP-1" "eDP-1" Option "Monitor-DisplayPort-0" "eDP-1" # new options added: Option "NoAccel" "true" Option "DDC" "false" Option "FallbackDebug" "true" Option "DebugFlushBatches" "true" Option "DebugFlushCaches" "true" Option "DebugWait" "true" EndSection I'm not sure exactly which option causes it to work - maybe 'NoAccel' ? will have to add each one individually, rebooting machine each time for ones that don't work - will do this some other time, unless the developers can enlighten me as to the lack of which option might cause the machine to hang. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.