On Thu, May 21, 2015 at 12:32:18PM +0200, Nicolas Kalkhof wrote: > > This only contains the pile of WARNINGs and not the Oops itself. I guess > > we still need a picture (and you need to change the system console logging > > to make sure the debug stuff shows up to). At least at the bottom of your > > past there's from drm or i915, indicating that the crucial debug info > > didn't make it out before the machine died. > > Ok, I've set CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7 to squeeze some more debug info out of the kernel. For the OOPS I still have to take a picture since kdump seems to be broken for me. > > http://pastebin.com/9mxRgNa2 > > > I just want the decoded address (which I read from the oops, if you > > recompile the kernel it might have changed so please double check). I.e. > > the above two lines is all the howto you need. But please use "list" > > instead of "break" as Chris suggested. > > Gotcha! > > gdb) list *drm_atomic_helper_check_modeset+0x2c5 > 0x955 is in drm_atomic_helper_check_modeset (drivers/gpu/drm/drm_atomic_helper.c:235). > 230 } > 231 > 232 connector_state->best_encoder = new_encoder; > 233 idx = drm_crtc_index(connector_state->crtc); > 234 > 235 crtc_state = state->crtc_states[idx]; > 236 crtc_state->mode_changed = true; > 237 > 238 DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n", > 239 connector->base.id, > (gdb) > > Address drm_atomic_helper_check_modeset+0x2c5/0x990 is the first line in the call trace. > One more thing: When I fire up X BEFORE I connect to the docking there are no OOPSES and I can switch between DP/eDP. As soon as I kill X however my machine dies. Ah, Chris hunch against my claim that this is impossible was spot-on. Can you please try the below hack please and grab dmesg? Hopefully the kernel won't die any more at least. -Daniel --- diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index b82ef6262469..15ba72fb98dd 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -157,6 +157,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx) struct drm_connector *connector; struct drm_connector_state *connector_state; struct drm_crtc_state *crtc_state; + struct drm_crtc *saved_crtc; int idx, ret; connector = state->connectors[conn_idx]; @@ -195,6 +196,8 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx) return 0; } + saved_crtc = connector_state->crtc; + funcs = connector->helper_private; new_encoder = funcs->best_encoder(connector); @@ -230,7 +233,8 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx) } connector_state->best_encoder = new_encoder; - idx = drm_crtc_index(connector_state->crtc); + WARN_ON(!connector_state->crtc); + idx = drm_crtc_index(saved_crtc); crtc_state = state->crtc_states[idx]; crtc_state->mode_changed = true; -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx