intel_panel_destroy_backlight(connector);
 }
 
+static void intel_hpd_poll_fini(struct drm_device *dev)
+{
+       struct intel_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+
+       /* First disable polling... */
+       drm_kms_helper_poll_fini(dev);
+
+       /* Then kill the work that may have been queued by hpd. */
+       drm_connector_list_iter_begin(dev, &conn_iter);
+       for_each_intel_connector_iter(connector, &conn_iter) {
+               if (connector->modeset_retry_work.func)
+                       cancel_work_sync(&connector->modeset_retry_work);
+       }
+       drm_connector_list_iter_end(&conn_iter);
+}
+
 void intel_modeset_cleanup(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
         * Due to the hpd irq storm handling the hotplug work can re-arm the
         * poll handlers. Hence disable polling after hpd handling is shut down.
         */
-       drm_kms_helper_poll_fini(dev);
+       intel_hpd_poll_fini(dev);
 
        /* poll work can call into fbdev, hence clean that up afterwards */
        intel_fbdev_fini(dev_priv);