You are not logged in.
Since the upgrade from 3.7.10 to 3.8.x the X11 using 3D Acceleration (X4500 Intel) hangs periodically. drm_kms_helper.poll=0 doesn't help. Any ideas?
Last edited by gamanakis (2013-04-07 21:59:07)
Offline
Did you just upgrade the kernel, or your whole system? Maybe downgrading xorg-server will do the trick.
You may have already seen his, but I'll link it anyways.
https://wiki.archlinux.org/index.php/In … leshooting
Some issues with X crashing, GPU hanging, or problems with X freezing, can be fixed by disabling the GPU usage with the NoAccel option:
It sounds like you didn't have issues before, so that's why I say it might be a compatibility issue, and that's a pretty common issue with closed-source graphic drivers.
Last edited by MagicSkyFairy (2013-03-23 23:04:51)
I have wasted atleast a second of your time by making you read my signature.
Offline
I upgraded just the Kernel. I use Cinnamon so the 3D Acceleration is needed.
Offline
The problem appears to be solved in the 3.9-rc4.
Offline
The problem appears to be solved in the 3.9-rc4.
Not for me. Ok, maybe the symptoms: with 3.9-rc4, X is smooth even when i915 starts interrupting like crazy and kworker takes 30% of cpu. At least the computer is usable and doesn't hang. But the underlying issue (i915 interrupting at a rate of 500 interrupts per second) is a problem that should be resolved. I have this with 3.9_rc4:
CPU0 CPU1
0: 71181 71669 IO-APIC-edge timer
1: 769 752 IO-APIC-edge i8042
8: 15 14 IO-APIC-edge rtc0
9: 5251 5256 IO-APIC-fasteoi acpi
12: 23829 23608 IO-APIC-edge i8042
16: 0 0 IO-APIC-fasteoi uhci_hcd:usb3, uhci_hcd:usb6
19: 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb5
23: 14 16 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb4
42: 190035 189675 PCI-MSI-edge i915
43: 8049 8086 PCI-MSI-edge ahci
44: 6924 5177 PCI-MSI-edge iwlwifi
45: 129 113 PCI-MSI-edge snd_hda_intel
NMI: 0 0 Non-maskable interrupts
LOC: 126108 131456 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
IWI: 0 0 IRQ work interrupts
RTR: 0 0 APIC ICR read retries
RES: 27861 3724 Rescheduling interrupts
CAL: 58157 56358 Function call interrupts
TLB: 629 654 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 2 2 Machine check polls
ERR: 0
MIS: 0
This was in just 7 minutes.
Offline
Testing linux-3.9-rc5. Seems a lot better. 10 minutes uptime, 22809 interrupts.
Offline
Currently bisecting the 3.7 - 3.8 git repo. Seems like there is a problem with drm. Will report back soon.
Offline
Seems like the culprit lesion is the following:
commit 69787f7da6b2adc4054357a661aaa1701a9ca76f
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Tue Oct 23 18:23:34 2012 +0000
drm: run the hpd irq event code directly
All drivers already have a work item to run the hpd code, so we don't
need to launch a new one in the helper code. Dave Airlie mentioned
that the cancel+re-queue might paper over DP related hpd ping-pongs,
hence why this is split out.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 9adbd2b..a8a61e4 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -1019,12 +1019,9 @@ void drm_kms_helper_poll_enable(struct drm_device *dev)
}
EXPORT_SYMBOL(drm_kms_helper_poll_enable);
-static void hpd_irq_event_execute(struct work_struct *work);
-
void drm_kms_helper_poll_init(struct drm_device *dev)
{
INIT_DELAYED_WORK(&dev->mode_config.output_poll_work, output_poll_execute);
- INIT_DELAYED_WORK(&dev->mode_config.hpd_irq_work, hpd_irq_event_execute);
dev->mode_config.poll_enabled = true;
drm_kms_helper_poll_enable(dev);
@@ -1037,10 +1034,8 @@ void drm_kms_helper_poll_fini(struct drm_device *dev)
}
EXPORT_SYMBOL(drm_kms_helper_poll_fini);
-static void hpd_irq_event_execute(struct work_struct *work)
+void drm_helper_hpd_irq_event(struct drm_device *dev)
{
- struct delayed_work *delayed_work = to_delayed_work(work);
- struct drm_device *dev = container_of(delayed_work, struct drm_device, mode_config.hpd_irq_work);
struct drm_connector *connector;
enum drm_connector_status old_status;
bool changed = false;
@@ -1071,11 +1066,4 @@ static void hpd_irq_event_execute(struct work_struct *work)
if (changed)
drm_kms_helper_hotplug_event(dev);
}
-
-void drm_helper_hpd_irq_event(struct drm_device *dev)
-{
- cancel_delayed_work(&dev->mode_config.hpd_irq_work);
- if (drm_kms_helper_poll)
- schedule_delayed_work(&dev->mode_config.hpd_irq_work, 0);
-}
EXPORT_SYMBOL(drm_helper_hpd_irq_event);
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index ccff8c9..1f5f1d6 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -793,7 +793,6 @@ struct drm_mode_config {
/* output poll support */
bool poll_enabled;
struct delayed_work output_poll_work;
- struct delayed_work hpd_irq_work;
/* pointers to standard properties */
struct list_head property_blob_list;
Someone please try to reverse this patch and report.
Offline
Seems like the culprit lesion is the following:
...
Someone please try to reverse this patch and report.
Mmmm nope. At least on 3.9.0-rc5. The patch reverses cleanly (with fuzzy) and the kernel compiles fine. At first it seemed promising (just 7 interrupts after a few minutes) but after a while i915 started interrupting again at 500 int/sec
Offline
i have same stuck too after upgrade of kernel. i use i915 but on a hd3000.
should i check in someway if it is the same problem?
i was thinking about a problem with hd, but it could be i915.
otherwise thx in advance for the help.
Carthago delenda est
Offline
Mmmm nope. At least on 3.9.0-rc5. The patch reverses cleanly (with fuzzy) and the kernel compiles fine. At first it seemed promising (just 7 interrupts after a few minutes) but after a while i915 started interrupting again at 500 int/sec
I meant that the GPU hangs no more. The interrupts is another issue. I am investigating further on it. Will report back soon.
Offline
I ended up not reverting the commit but patching it:
diff -rupN a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
--- a/drivers/gpu/drm/drm_crtc_helper.c 2013-02-19 00:58:34.000000000 +0100
+++ b/drivers/gpu/drm/drm_crtc_helper.c 2013-04-05 23:10:36.454936677 +0200
@@ -1067,7 +1067,7 @@ void drm_helper_hpd_irq_event(struct drm
enum drm_connector_status old_status;
bool changed = false;
- if (!dev->mode_config.poll_enabled)
+ if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll)
return;
mutex_lock(&dev->mode_config.mutex);
i915 interrupts are however high.
Last edited by gamanakis (2013-04-05 22:23:05)
Offline
Bug in upstream. Patch from devs filed.
See:
https://patchwork.kernel.org/patch/2400621/
https://patchwork.kernel.org/patch/2402211/
Last edited by gamanakis (2013-04-07 21:56:45)
Offline
Can this patch be applied to the 3.8 kernel?
Offline