Commit 32e3ae50 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915/hpd: Replace the loop-within-loop with two independent loops



No point in looping over all connectors for each hpd pin. Just loop
over each connector first and deal with each one's hpd pin. Then
loop over all the hpd pins to mark them as enabled again.

Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200205183546.9291-2-ville.syrjala@linux.intel.com


Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 70697e29
Loading
Loading
Loading
Loading
+21 −18
Original line number Diff line number Diff line
@@ -242,24 +242,22 @@ static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
		container_of(work, typeof(*dev_priv),
			     hotplug.reenable_work.work);
	struct drm_device *dev = &dev_priv->drm;
	struct drm_connector_list_iter conn_iter;
	struct intel_connector *connector;
	intel_wakeref_t wakeref;
	enum hpd_pin pin;

	wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);

	spin_lock_irq(&dev_priv->irq_lock);
	for_each_hpd_pin(pin) {
		struct drm_connector_list_iter conn_iter;
		struct intel_connector *connector;

		if (dev_priv->hotplug.stats[pin].state != HPD_DISABLED)
			continue;

		dev_priv->hotplug.stats[pin].state = HPD_ENABLED;

	drm_connector_list_iter_begin(dev, &conn_iter);
	for_each_intel_connector_iter(connector, &conn_iter) {
			if (intel_connector_hpd_pin(connector) == pin) {
		pin = intel_connector_hpd_pin(connector);
		if (pin == HPD_NONE ||
		    dev_priv->hotplug.stats[pin].state != HPD_DISABLED)
			continue;

		if (connector->base.polled != connector->polled)
			DRM_DEBUG_DRIVER("Reenabling HPD on connector %s\n",
					 connector->base.name);
@@ -267,11 +265,16 @@ static void intel_hpd_irq_storm_reenable_work(struct work_struct *work)
		if (!connector->base.polled)
			connector->base.polled = DRM_CONNECTOR_POLL_HPD;
	}
		}
	drm_connector_list_iter_end(&conn_iter);

	for_each_hpd_pin(pin) {
		if (dev_priv->hotplug.stats[pin].state == HPD_DISABLED)
			dev_priv->hotplug.stats[pin].state = HPD_ENABLED;
	}

	if (dev_priv->display_irqs_enabled && dev_priv->display.hpd_irq_setup)
		dev_priv->display.hpd_irq_setup(dev_priv);

	spin_unlock_irq(&dev_priv->irq_lock);

	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);