https://bugs.freedesktop.org/show_bug.cgi?id=100289

--- Comment #14 from omegap...@startmail.com ---
After messing around with this on and off for months, I have found that the
radeon_scanout_flip error is irrelevant - when the third monitor is turned off
and on, sometimes DisplayPort-0 is reported as Disconnected and then Connected
- through monitoring the root window (xev -root), I can finally get into a
useful X events stream:

======================================================================

RRScreenChangeNotify event, serial 114, synthetic NO, window 0x4bc,
    root 0x4bc, timestamp 332828415, config_timestamp 386328254
    size_index 65535, subpixel_order SubPixelHorizontalRGB
    rotation RR_Rotate_0
    width 5760, height 1200, mwidth 1526, mheight 318

RRNotify event, serial 114, synthetic NO, window 0x4bc,
    subtype XRROutputChangeNotifyEvent
    output DisplayPort-0, crtc 79, mode 1920x1200 (1920x1200)
    rotation RR_Rotate_0
    connection RR_Disconnected, subpixel_order SubPixelHorizontalRGB

RRScreenChangeNotify event, serial 115, synthetic NO, window 0x4bc,
    root 0x4bc, timestamp 332828415, config_timestamp 386328254
    size_index 65535, subpixel_order SubPixelHorizontalRGB
    rotation RR_Rotate_0
    width 5760, height 1200, mwidth 1526, mheight 318

RRNotify event, serial 115, synthetic NO, window 0x4bc,
    subtype XRRCrtcChangeNotifyEvent
    crtc 79, mode None, rotation RR_Rotate_0
    x 0, y 0, width 0, height 0

RRNotify event, serial 115, synthetic NO, window 0x4bc,
    subtype XRROutputChangeNotifyEvent
    output DisplayPort-0, crtc None, mode None
    rotation RR_Rotate_0
    connection RR_Disconnected, subpixel_order SubPixelHorizontalRGB

ConfigureNotify event, serial 115, synthetic NO, window 0x4bc,
    event 0x4bc, window 0x4bc, (0,0), width 5760, height 1200,
    border_width 0, above 0x0, override NO

RRScreenChangeNotify event, serial 117, synthetic NO, window 0x4bc,
    root 0x4bc, timestamp 386328636, config_timestamp 386328813
    size_index 65535, subpixel_order SubPixelHorizontalRGB
    rotation RR_Rotate_0
    width 5760, height 1200, mwidth 1526, mheight 318

RRNotify event, serial 117, synthetic NO, window 0x4bc,
    subtype XRROutputChangeNotifyEvent
    output DisplayPort-0, crtc None, mode None
    rotation RR_Rotate_0
    connection RR_Connected, subpixel_order SubPixelHorizontalRGB

RRScreenChangeNotify event, serial 117, synthetic NO, window 0x4bc,
    root 0x4bc, timestamp 386328636, config_timestamp 386328813
    size_index 65535, subpixel_order SubPixelHorizontalRGB
    rotation RR_Rotate_0
    width 3840, height 1200, mwidth 1016, mheight 318

ConfigureNotify event, serial 117, synthetic NO, window 0x4bc,
    event 0x4bc, window 0x4bc, (0,0), width 3840, height 1200,
    border_width 0, above 0x0, override NO

...


RRScreenChangeNotify event, serial 125, synthetic NO, window 0x4bc,
    root 0x4bc, timestamp 386328636, config_timestamp 386328813
    size_index 65535, subpixel_order SubPixelHorizontalRGB
    rotation RR_Rotate_0
    width 3840, height 1200, mwidth 1016, mheight 318

RRNotify event, serial 125, synthetic NO, window 0x4bc,
    subtype XRRCrtcChangeNotifyEvent
    crtc 79, mode 1920x1200, rotation RR_Rotate_0
    x 0, y 0, width 1920, height 1200

RRNotify event, serial 125, synthetic NO, window 0x4bc,
    subtype XRROutputChangeNotifyEvent
    output DisplayPort-0, crtc 79, mode 1920x1200 (1920x1200)
    rotation RR_Rotate_0
    connection RR_Connected, subpixel_order SubPixelHorizontalRGB

ConfigureNotify event, serial 125, synthetic NO, window 0x4bc,
    event 0x4bc, window 0x4bc, (0,0), width 3840, height 1200,
    border_width 0, above 0x0, override NO

======================================================================

In the middle of that mess, there is a RRScreenChangeNotify event with width
3840, which signifies the invalid desktop state that I get as the result of the
problem - I've managed to smoke it out to xfsettingsd (part of the
xfce4-settings package) - it responds to the disconnection by disabling the
CRTC, and then when it reappears, it enables it without a clue of what the
monitor is, despite it being described in the xfconf settings - and therefore
not putting it in the right place again.

xfsettingsd's version of the events:

=========================================================

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 85 DisplayPort-0.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 3, after = 3.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 85 DisplayPort-0.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 3, after = 3.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 3, after = 2.
xfce4-settings(displays): Output disconnected: DisplayPort-0
xfce4-settings(displays): Disabling CRTC 79.
xfce4-settings(displays): Normalized CRTC 80: size=1920x1200, pos=0x0.
xfce4-settings(displays): Normalized CRTC 81: size=1920x1200, pos=1920x0.
xfce4-settings(displays): min_h = 200, min_w = 320, max_h = 16384, max_w =
16384, prev_h = 1200, prev_w = 5760, prev_hmm = 318, prev_wmm = 1524, h = 1200,
w = 3840, hmm = 318, wmm = 1016.
xfce4-settings(displays): Applying desktop dimensions: 3840x1200 (px), 1016x318
(mm).
xfce4-settings(displays): Configuring CRTC 80.
xfce4-settings(displays): Configuring CRTC 79.
xfce4-settings(displays): Configuring CRTC 81.
xfce4-settings(displays): Configuring CRTC 82.
xfce4-settings(displays): Configuring CRTC 83.
xfce4-settings(displays): Configuring CRTC 84.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 85 DisplayPort-0.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 2, after = 3.
xfce4-settings(displays): New output connected: DisplayPort-0
xfce4-settings(displays): enabling crtc for DisplayPort-0
xfce4-settings(displays): CRTC 79 assigned to DisplayPort-0.
xfce4-settings(displays): CRTC 79, output list[0] -> 85.
xfce4-settings(displays): Normalized CRTC 80: size=1920x1200, pos=0x0.
xfce4-settings(displays): Normalized CRTC 79: size=1920x1200, pos=0x0.
xfce4-settings(displays): Normalized CRTC 81: size=1920x1200, pos=1920x0.
xfce4-settings(displays): min_h = 200, min_w = 320, max_h = 16384, max_w =
16384, prev_h = 1200, prev_w = 5760, prev_hmm = 318, prev_wmm = 1524, h = 1200,
w = 3840, hmm = 318, wmm = 1016.
xfce4-settings(displays): Applying desktop dimensions: 3840x1200 (px), 1016x318
(mm).
xfce4-settings(displays): Configuring CRTC 80.
xfce4-settings(displays): Configuring CRTC 79.
xfce4-settings(displays): Applying changes to CRTC 79.
xfce4-settings(displays): Configuring CRTC 81.
xfce4-settings(displays): Configuring CRTC 82.
xfce4-settings(displays): Configuring CRTC 83.
xfce4-settings(displays): Configuring CRTC 84.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 85 DisplayPort-0.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 3, after = 3.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 85 DisplayPort-0.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 3, after = 3.
xfce4-settings(displays): RRScreenChangeNotify event received.
xfce4-settings(displays): Refreshing RandR cache.
xfce4-settings(displays): Detected CRTC 80.
xfce4-settings(displays): Detected CRTC 79.
xfce4-settings(displays): Detected CRTC 81.
xfce4-settings(displays): Detected CRTC 82.
xfce4-settings(displays): Detected CRTC 83.
xfce4-settings(displays): Detected CRTC 84.
xfce4-settings(displays): Detected output 85 DisplayPort-0.
xfce4-settings(displays): Detected output 86 HDMI-0.
xfce4-settings(displays): Detected output 88 DVI-1.
xfce4-settings(displays): Noutput: before = 3, after = 3.

=========================================================

I'm assuming the important part from the X perspective is when
xfsettingsd/displays.c:xfce_displays_helper_screen_on_event realises the
display is Disconnected, and runs xfce_displays_helper_disable_crtc which calls
XRRSetCrtcConfig with RRCrtc->mode of None/NULL.

If the daemon is killed, no reconfiguration occurs and the desktop keeps its
correct configuration - presumably at the X level its just treated like a
monitor powering off and on - so I guess the next step is for me to understand
what is causing the Disconnect event to be fired through the stack, since the
monitor is definitely not disconnected in reality.

Kudos to Michel for the guess earlier.

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to