[Intel-gfx] [PATCH RFC v2 4/5] drm/i915: Work queue for uevent
Manasi Navare
manasi.d.navare at intel.com
Fri Oct 7 23:32:48 UTC 2016
We create a work queue for sending a hotplug uevent. This
gets scheduled on link training failure and gets executed after
modeset is finished and all locks are released.
This was required to avoid deadlock.
Cc: Jani Nikula <jani.nikula at linux.intel.com>
Cc: Daniel Vetter <daniel.vetter at intel.com>
Cc: Ville Syrjala <ville.syrjala at linux.intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 2 ++
drivers/gpu/drm/i915/intel_dp.c | 12 ++++++++++++
2 files changed, 14 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a219a35..9592e64 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1962,6 +1962,8 @@ struct drm_i915_private {
struct drm_i915_gem_object *vlv_pctx;
+ struct work_struct i915_modeset_retry_work;
+
#ifdef CONFIG_DRM_FBDEV_EMULATION
/* list of fbdev register on this device */
struct intel_fbdev *fbdev;
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 610316f..06c9d17 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5691,6 +5691,15 @@ out_vdd_off:
return false;
}
+static void intel_dp_modeset_retry_work_fn(struct work_struct *work)
+{
+ struct drm_i915_private *dev_priv;
+
+ dev_priv = container_of(work, typeof(*dev_priv), i915_modeset_retry_work);
+ DRM_DEBUG_KMS("\nManasi: Sending Uevent");
+ drm_kms_helper_hotplug_event(&dev_priv->drm);
+}
+
bool
intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
struct intel_connector *intel_connector)
@@ -5703,6 +5712,9 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
enum port port = intel_dig_port->port;
int type;
+ /* Initialize the work for modeset in case of link train failure */
+ INIT_WORK(&dev_priv->i915_modeset_retry_work, intel_dp_modeset_retry_work_fn);
+
if (WARN(intel_dig_port->max_lanes < 1,
"Not enough lanes (%d) for DP on port %c\n",
intel_dig_port->max_lanes, port_name(port)))
--
1.9.1
More information about the Intel-gfx
mailing list