Pull drm fixes from Dave Airlie: "One fix for a hotplug locking regressions, and one fix for an oops if you unplug the monitor at an inopportune moment on the udl device." * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm/fb-helper: Fix locking in drm_fb_helper_hotplug_event udl: handle EDID failure properly.
Unified · Split
| @@ -1544,10 +1544,10 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) · 1543 unmodified lines | ||
| 1544 | 1544 | if (!fb_helper->fb) |
| 1545 | 1545 | return 0; |
| 1546 | 1546 | |
| 1547 | − drm_modeset_lock_all(dev); | |
| 1547 | + mutex_lock(&fb_helper->dev->mode_config.mutex); | |
| 1548 | 1548 | if (!drm_fb_helper_is_bound(fb_helper)) { |
| 1549 | 1549 | fb_helper->delayed_hotplug = true; |
| 1550 | − drm_modeset_unlock_all(dev); | |
| 1550 | + mutex_unlock(&fb_helper->dev->mode_config.mutex); | |
| 1551 | 1551 | return 0; |
| 1552 | 1552 | } |
| 1553 | 1553 | DRM_DEBUG_KMS("\n"); |
| @@ -1558,9 +1558,11 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper) · 4 unmodified lines | ||
| 1558 | 1558 | |
| 1559 | 1559 | count = drm_fb_helper_probe_connector_modes(fb_helper, max_width, |
| 1560 | 1560 | max_height); |
| 1561 | + mutex_unlock(&fb_helper->dev->mode_config.mutex); | |
| 1562 | + | |
| 1563 | + drm_modeset_lock_all(dev); | |
| 1561 | 1564 | drm_setup_crtcs(fb_helper); |
| 1562 | 1565 | drm_modeset_unlock_all(dev); |
| 1563 | − | |
| 1564 | 1566 | drm_fb_helper_set_par(fb_helper->fbdev); |
| 1565 | 1567 | |
| 1566 | 1568 | return 0; |
| @@ -61,6 +61,10 @@ static int udl_get_modes(struct drm_connector *connector) · 60 unmodified lines | ||
| 61 | 61 | int ret; |
| 62 | 62 | |
| 63 | 63 | edid = (struct edid *)udl_get_edid(udl); |
| 64 | + if (!edid) { | |
| 65 | + drm_mode_connector_update_edid_property(connector, NULL); | |
| 66 | + return 0; | |
| 67 | + } | |
| 64 | 68 | |
| 65 | 69 | /* |
| 66 | 70 | * We only read the main block, but if the monitor reports extension |