Hi,
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].
What I see happen is RADEONCursorInit() fails[2], so
xf86_cursors_init() never gets called, which would call
xf86InitCursor(), which initializes the xf86CursorScreenKeyRec.
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().
So, the question is how to fix this situation, and where?
Is there a way to detect the "Using software cursor" mode, during
resume, and not call xf86_reload_cursors()? Is this even a good idea?
I'm not sure what change between 2013-FEB-12 snapshot (last one that I
know worked "fine") and now is causing this behavioral difference.
Any hints as how to proceed would be appreciated.
--patrick
[1] gmail will/might screw the lines, so apologies in advance.
#1 0x000000f56bc3aa6a in abort () at /usr/src/lib/libc/stdlib/abort.c:70
#2 0x000000f56bbb85f4 in __assert2 (file=Variable "file" is not available.
)
at /usr/src/lib/libc/gen/assert.c:52
#3 0x000000f363ef94f6 in dixGetPrivateAddr (privates=0xf56acf1bf0,
key=0xf3644bed20) at privates.h:123
#4 0x000000f363ef9555 in dixGetPrivate (privates=0xf56acf1bf0,
key=0xf3644bed20) at privates.h:138
#5 0x000000f363ef94b2 in dixLookupPrivate (privates=0xf56acf1bf0,
key=0xf3644bed20) at privates.h:168
#6 0x000000f363efa2b0 in xf86_reload_cursors (screen=0xf56acf1800)
at /usr/build/xenocara/xserver/hw/xfree86/modes/xf86Cursors.c:628
#7 0x000000f56fe7f2e9 in radeon_crtc_mode_commit (crtc=0xf5646ac800)
at /usr/build/xenocara/driver/xf86-video-ati/src/radeon_crtc.c:506
#8 0x000000f363ef23eb in xf86CrtcSetModeTransform (crtc=0xf5646ac800,
mode=0xf5646ac8e8, rotation=1, transform=0x0, x=0, y=0)
at /usr/build/xenocara/xserver/hw/xfree86/modes/xf86Crtc.c:354
#9 0x000000f363ef780c in xf86SetDesiredModes (scrn=0xf56e329000)
at /usr/build/xenocara/xserver/hw/xfree86/modes/xf86Crtc.c:2653
#10 0x000000f56fe26533 in RADEONEnterVT (arg=0xf56e329000)
at /usr/build/xenocara/driver/xf86-video-ati/src/radeon_driver.c:6279
#11 0x000000f363f03dfc in xf86RandR12EnterVT (pScrn=0xf56e329000)
at /usr/build/xenocara/xserver/hw/xfree86/modes/xf86RandR12.c:1760
#12 0x000000f363eaf7c4 in xf86VTSwitch ()
at /usr/build/xenocara/xserver/hw/xfree86/common/xf86Events.c:537
#13 0x000000f363eaefdc in xf86Wakeup (blockData=0x0, err=3,
pReadmask=0xf3644bfba0)
at /usr/build/xenocara/xserver/hw/xfree86/common/xf86Events.c:286
#14 0x000000f363e5edc9 in WakeupHandler (result=3, pReadmask=0xf3644bfba0)
at /usr/build/xenocara/xserver/dix/dixutils.c:423
#15 0x000000f36402257c in WaitForSomething (pClientsReady=0xf56f9aa800)
at /usr/build/xenocara/xserver/os/WaitFor.c:224
#16 0x000000f363e501a0 in Dispatch ()
at /usr/build/xenocara/xserver/dix/dispatch.c:361
#17 0x000000f363e4101a in main (argc=6, argv=0x7f7ffffbf858,
envp=0x7f7ffffbf890) at /usr/build/xenocara/xserver/dix/main.c:295
(gdb) p xf86CursorScreenKeyRec
$54 = {offset = 0, size = 0, initialized = 0, allocated = 0,
type = PRIVATE_XSELINUX, next = 0x0}
[2] This is a bit of a cute story (at least through novice eyes like
mine anyway).
info->useEXA doesn't get set because info->r600_shadow_fb is set,
which is checked during RADEONPreInitAccel().
RADEONCursorInit() // goes through the following motion:
{
if (!info->useEXA) {
radeon_crtc->cursor_offset =
radeon_legacy_allocate_memory(...); // returns 0
if (radeon_crtc->cursor_offset == 0)
return FALSE;
}
}
// this one here, it's the cute one.
uint32_t
radeon_legacy_allocate_memory(ScrnInfoPtr pScrn,...)
{
uint32_t offset = 0;
#ifdef XF86DRM_MODE // NOT DEFINED
#endif
#ifdef USE_EXA // DEFINED but!
if (info->useEXA) {
// so nothing happens here.
}
#endif
#ifdef USE_XAA // NOT DEFINED
#endif
return offset;
}
On Thu, Jul 4, 2013 at 3:02 PM, patrick keshishian <[email protected]> wrote:
> A bit more of Xorg.0.log file which might be useful.
>
> If I 'tail -f' the Xorg.0.log file and suspend and resume, this is
> what it shows. Not sure if there is any indication of X crash or what
> ... this is a bit beyond my scope.
>
> $ tail -f /var/log/Xorg.0.log
> [ 51774.664] (II) ws: /dev/wsmouse: minimum x position: 0
> [ 51774.664] (II) ws: /dev/wsmouse: maximum x position: 1365
> [ 51774.664] (II) ws: /dev/wsmouse: minimum y position: 0
> [ 51774.664] (II) ws: /dev/wsmouse: maximum y position: 767
> [ 51774.664] (==) ws: /dev/wsmouse: Buttons: 7
> [ 51774.664] (**) ws: /dev/wsmouse: YAxisMapping: buttons 4 and 5
> [ 51774.665] (**) /dev/wsmouse: (accel) keeping acceleration scheme 1
> [ 51774.665] (**) /dev/wsmouse: (accel) acceleration profile 0
> [ 51774.665] (**) /dev/wsmouse: (accel) acceleration factor: 2.000
> [ 51774.665] (**) /dev/wsmouse: (accel) acceleration threshold: 4
>
> (suspending and resume happens here)
>
> [ 64222.173] Output UNIPHY0 transmitter setup success
> [ 64222.187] Blank CRTC 0 success
> [ 64222.187] Disable CRTC memreq 0 success
> [ 64222.204] Disable CRTC 0 success
> [ 64222.204] Blank CRTC 1 success
> [ 64222.204] Disable CRTC memreq 1 success
> [ 64222.204] Disable CRTC 1 success
> [ 64231.224] Output UNIPHY0 transmitter setup success
> [ 64231.224] Output UNIPHY0 transmitter setup success
> [ 64231.224] Output CRT1 disable success
> [ 64231.225] Blank CRTC 0 success
> [ 64231.225] Disable CRTC memreq 0 success
> [ 64231.241] Disable CRTC 0 success
> [ 64231.241] Blank CRTC 1 success
> [ 64231.242] Disable CRTC memreq 1 success
> [ 64231.242] Disable CRTC 1 success
> [ 64231.242] Output UNIPHY0 transmitter setup success
> [ 64231.242] Blank CRTC 0 success
> [ 64231.242] Disable CRTC memreq 0 success
> [ 64231.242] Disable CRTC 0 success
> [ 64231.242] Set CRTC 0 Source success
> [ 64231.242] Mode 1366x768 - 1582 792 9
> [ 64231.242] (II) RADEON(0): RADEONRestoreMemMapRegisters() :
> [ 64231.242] (II) RADEON(0): MC_FB_LOCATION : 0x0f170f00 0x0f170f00
> [ 64231.242] (II) RADEON(0): MC_AGP_LOCATION : 0x003f0000
> [ 64231.257] Set DCPLL success
> [ 64231.257] Picked PLL 0
> [ 64231.257] before 7520 0x0
> [ 64231.257] after 7520 0 0
> [ 64231.257] best_freq: 75238
> [ 64231.257] best_feedback_div: 79
> [ 64231.257] best_frac_feedback_div: 0
> [ 64231.257] best_ref_div: 7
> [ 64231.257] best_post_div: 15
> [ 64231.257] (II) RADEON(0): crtc(0) Clock: mode 75200, PLL 752380
> [ 64231.257] (II) RADEON(0): crtc(0) PLL : refdiv 7, fbdiv 0x4F(79),
> fracfbdiv 0, pdiv 15
> [ 64231.377] Set CRTC 0 PLL success
> [ 64231.377] Set DTD CRTC Timing success
> [ 64231.377] Set CRTC 0 Overscan success
> [ 64231.377] Not using RMX
> [ 64231.377] scaler 0 setup success
> [ 64231.377] Set CRTC 0 Source success
> [ 64231.857] Output UNIPHY0 transmitter setup success
> [ 64231.857] Output DIG0 encoder setup success
> [ 64231.857] Output UNIPHY0 transmitter setup success
> [ 64232.317] Output UNIPHY0 transmitter setup success
> tail: /var/log/Xorg.0.log has been replaced, reopening.
> [ 64232.434] (--) checkDevMem: using aperture driver /dev/xf86
> [ 64232.453] (--) Using wscons driver on /dev/ttyC4 in pcvt
> compatibility mode (version 3.32)
> [ 64233.474]
> X.Org X Server 1.14.1
> Release Date: 2013-04-17
> [ 64233.474] X Protocol Version 11, Revision 0
> [ 64233.474] Build Operating System: OpenBSD 5.3 amd64
> [ 64233.474] Current Operating System: OpenBSD noir.mydomain 5.3
> GENERIC.MP#9 amd64
> [ 64233.474] Build Date: 27 June 2013 03:38:14PM
> [ 64233.474]
> [ 64233.475] Current version of pixman: 0.30.0
> [ 64233.475] Before reporting problems, check http://wiki.x.org
> to make sure that you have the latest version.
> [ 64233.475] Markers: (--) probed, (**) from config file, (==) default
> setting,
> (++) from command line, (!!) notice, (II) informational,
> (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
> [ 64233.475] (==) Log file: "/var/log/Xorg.0.log", Time: Thu Jul 4
> 14:50:46 2013
> [ 64233.476] (==) Using config file: "/etc/X11/xorg.conf"
> [ 64233.476] (==) Using system config directory
> "/usr/X11R6/share/X11/xorg.conf.d"