drm: Use a nondestructive mode for output detect when polling
Destructive load-detection is very expensive and due to failings elsewhere can trigger system wide stalls of up to 600ms. A simple first step to correcting this is not to invoke such an expensive and destructive load-detection operation automatically. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=29536 Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=16265 Reported-by: Bruno Prémont <bonbons@linux-vserver.org> Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: stable@kernel.org Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:

committed by
Dave Airlie

parent
27849044ca
commit
7b334fcb45
@@ -103,7 +103,7 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
|
||||
if (connector->funcs->force)
|
||||
connector->funcs->force(connector);
|
||||
} else {
|
||||
connector->status = connector->funcs->detect(connector);
|
||||
connector->status = connector->funcs->detect(connector, false);
|
||||
drm_kms_helper_poll_enable(dev);
|
||||
}
|
||||
|
||||
@@ -866,7 +866,7 @@ static void output_poll_execute(struct work_struct *work)
|
||||
!(connector->polled & DRM_CONNECTOR_POLL_HPD))
|
||||
continue;
|
||||
|
||||
status = connector->funcs->detect(connector);
|
||||
status = connector->funcs->detect(connector, true);
|
||||
if (old_status != status)
|
||||
changed = true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user