Patrick, Thanks for the report, it clearly looks like an xserver regression, but next time don't hesitate to mail bugs@ instead.
On 11/07/13(Thu) 03:56, patrick keshishian wrote: > [...] > So after some investigating, this "crash" after suspend/resume cycle > is actually an "abort" due to an assertion on xf86CursorScreenKeyRec > not being initialized. Provided are a backtrace and print of said > object[1]. Yep, I can reproduce the crash here by simply doing a console-switch with the "SWcursor" option defined in my xorg.conf. So this is not something related to suspend/resume. > What I see happen is RADEONCursorInit() fails[2], so > xf86_cursors_init() never gets called, which would call > xf86InitCursor(), which initializes the xf86CursorScreenKeyRec. That's a first bug. Since the last Xserver update, the radeon driver is using EXA instead of XAA as acceleration methods, and there's probably a bug here when trying to allocate some memory for your hardware cursor. > When RADEONCursorInit() fails, it logs the following and moves on: > > [ 2009.859] (EE) RADEON(0): Hardware cursor initialization failed > [ 2009.859] (II) RADEON(0): Using software cursor > > Now, on resume (after a suspend), radeon_crtc_mode_commit() is invoked > (see bt), and it calls xf86_reload_cursors(), which eventually causes > the assert() and abort(). That looks like a second bug to me, should xf86_reload_cursors() be called when using software cursor? I leave that to matthieu@ but in the meantime the diff below should work around your problem. Index: radeon_crtc.c =================================================================== RCS file: /home/ncvs/xenocara/driver/xf86-video-ati/src/radeon_crtc.c,v retrieving revision 1.7 diff -u -p -r1.7 radeon_crtc.c --- radeon_crtc.c 8 Aug 2012 16:25:22 -0000 1.7 +++ radeon_crtc.c 16 Jul 2013 11:57:23 -0000 @@ -502,8 +502,13 @@ radeon_crtc_mode_set(xf86CrtcPtr crtc, D static void radeon_crtc_mode_commit(xf86CrtcPtr crtc) { - if (crtc->scrn->pScreen != NULL) - xf86_reload_cursors(crtc->scrn->pScreen); + ScrnInfoPtr pScrn = crtc->scrn; + RADEONInfoPtr info = RADEONPTR(pScrn); + + if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) { + if (pScrn->pScreen != NULL) + xf86_reload_cursors(pScrn->pScreen); + } } void