[Intel-gfx] i915: hotplug events gone wild

Andrew Lutomirski luto at mit.edu
Sun Jan 31 04:02:51 CET 2010


[I posted this bug earlier with a terrible description as "resume
lagginess and other problems."  Here it is again with a better bug
report.]

I'm running 2.6.33-rc5 (plus some wireless-testing stuff, but I've
seen this problem on a variety of 2.6.33-rc? kernels).  Every now and
then, X starts to lag badly on my GM45 laptop.  When this happens, I
usually see a bunch of events in udevmonitor.  Running with
drm.debug=0x02 (and the patch below to keep the log under control), I
see tons of messages like this:

[41210.355059] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41211.357530] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41213.030722] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41213.929119] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41214.743764] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41215.554894] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41216.174235] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41216.985026] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41217.784241] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41218.685435] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41219.559522] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41220.335244] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41221.244359] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41222.050496] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41222.917042] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41224.021077] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41224.747465] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41225.718690] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41226.470519] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000
[41227.268363] [drm:i915_driver_irq_handler], hotplug event received,
stat 0x28200000

Looks like a bug to me :)

I haven't seen this after a reboot before suspending, but that could
just be because I suspend and resume pretty frequently.

acpi_listen does not show anything.  It does detect LID events,
though, if I leave it running while I close and reopen the lid.

--Andy


diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 0c67924..d0977ea 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1618,7 +1618,7 @@ i915_add_request(struct drm_device *dev, struct
drm_file *file_priv,
 	OUT_RING(MI_USER_INTERRUPT);
 	ADVANCE_LP_RING();

-	DRM_DEBUG_DRIVER("%d\n", seqno);
+	//DRM_DEBUG_DRIVER("%d\n", seqno);

 	request->seqno = seqno;
 	request->emitted_jiffies = jiffies;
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 89a071a..920ec44 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -266,6 +266,7 @@ static void i915_hotplug_work_func(struct work_struct *work)
 		}
 	}
 	/* Just fire off a uevent and let userspace tell us what to do */
+	printk(KERN_ERR, "i915 uevent: i915_hotplug_work_func\n");
 	drm_sysfs_hotplug_event(dev);
 }

diff --git a/drivers/gpu/drm/i915/intel_display.c
b/drivers/gpu/drm/i915/intel_display.c
index 45da78e..f2040bf 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3759,7 +3759,7 @@ static void intel_gpu_idle_timer(unsigned long arg)
 	struct drm_device *dev = (struct drm_device *)arg;
 	drm_i915_private_t *dev_priv = dev->dev_private;

-	DRM_DEBUG_DRIVER("idle timer fired, downclocking\n");
+	//DRM_DEBUG_DRIVER("idle timer fired, downclocking\n");

 	dev_priv->busy = false;

@@ -3774,7 +3774,7 @@ static void intel_crtc_idle_timer(unsigned long arg)
 	struct drm_crtc *crtc = &intel_crtc->base;
 	drm_i915_private_t *dev_priv = crtc->dev->dev_private;

-	DRM_DEBUG_DRIVER("idle timer fired, downclocking\n");
+	//DRM_DEBUG_DRIVER("idle timer fired, downclocking\n");

 	intel_crtc->busy = false;



More information about the Intel-gfx mailing list