Jiri Kosina
c12aba5aa0
drm/i915: stop using GMBUS IRQs on Gen4 chips
...
Commit 28c70f162 ("drm/i915: use the gmbus irq for waits") switched to
using GMBUS irqs instead of GPIO bit-banging for chipset generations 4
and above.
It turns out though that on many systems this leads to spurious interrupts
being generated, long after the register write to disable the IRQs has been
issued.
Typically this results in the spurious interrupt source getting
disabled:
[ 9.636345] irq 16: nobody cared (try booting with the "irqpoll" option)
[ 9.637915] Pid: 4157, comm: ifup Tainted: GF 3.9.0-rc2-00341-g0863702 #422
[ 9.639484] Call Trace:
[ 9.640731] <IRQ> [<ffffffff8109b40d>] __report_bad_irq+0x1d/0xc7
[ 9.640731] [<ffffffff8109b7db>] note_interrupt+0x15b/0x1e8
[ 9.640731] [<ffffffff810999f7>] handle_irq_event_percpu+0x1bf/0x214
[ 9.640731] [<ffffffff81099a88>] handle_irq_event+0x3c/0x5c
[ 9.640731] [<ffffffff8109c139>] handle_fasteoi_irq+0x7a/0xb0
[ 9.640731] [<ffffffff8100400e>] handle_irq+0x1a/0x24
[ 9.640731] [<ffffffff81003d17>] do_IRQ+0x48/0xaf
[ 9.640731] [<ffffffff8142f1ea>] common_interrupt+0x6a/0x6a
[ 9.640731] <EOI> [<ffffffff8142f952>] ? system_call_fastpath+0x16/0x1b
[ 9.640731] handlers:
[ 9.640731] [<ffffffffa000d771>] usb_hcd_irq [usbcore]
[ 9.640731] [<ffffffffa0306189>] yenta_interrupt [yenta_socket]
[ 9.640731] Disabling IRQ #16
The really curious thing is now that irq 16 is _not_ the interrupt for
the i915 driver when using MSI, but it _is_ the interrupt when not
using MSI. So by all indications it seems like gmbus is able to
generate a legacy (shared) interrupt in MSI mode on some
configurations. I've tried to reproduce this and the differentiating
thing seems to be that on unaffected systems no other device uses irq
16 (which seems to be the non-MSI intel gfx interrupt on all gm45).
I have no idea how that even can happen.
To avoid tempting this elephant into a rage, just disable gmbus
interrupt support on gen 4.
v2: Improve the commit message with exact details of what's going on.
Also add a comment in the code to warn against this particular
elephant in the room.
v3: Move the comment explaing how gen4 blows up next to the definition
of HAS_GMBUS_IRQ to keep the code-flow straight. Suggested by Chris
Wilson.
Signed-off-by: Jiri Kosina <jkosina@suse.cz> (v1)
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
References: https://lkml.org/lkml/2013/3/8/325
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2013-03-20 00:03:16 +01:00
..
accessibility
acpi
ACPI / glue: Drop .find_bridge() callback from struct acpi_bus_type
2013-03-04 14:23:40 +01:00
amba
Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm
2013-03-03 11:54:39 -08:00
ata
ACPI / glue: Drop .find_bridge() callback from struct acpi_bus_type
2013-03-04 14:23:40 +01:00
atm
hlist: drop the node parameter from iterators
2013-02-27 19:10:24 -08:00
auxdisplay
base
ACPI and power management fixes for 3.9-rc2
2013-03-07 14:54:28 -08:00
bcma
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
2013-03-01 13:52:03 -05:00
block
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
2013-02-28 17:43:09 -08:00
bluetooth
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2013-02-21 17:40:58 -08:00
bus
cdrom
char
Fix a circular locking dependency in random's collection of cputime
2013-03-08 14:42:16 -08:00
clk
hlist: drop the node parameter from iterators
2013-02-27 19:10:24 -08:00
clocksource
ImgTec Meta architecture changes for v3.9-rc1
2013-03-03 12:06:09 -08:00
connector
proc connector: reject unprivileged listener bumps
2013-02-27 13:08:35 -05:00
cpufreq
cpufreq / intel_pstate: Do not load on VM that does not report max P state.
2013-03-06 23:40:11 +01:00
cpuidle
crypto
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
2013-02-25 15:56:15 -08:00
dca
dca: convert to idr_alloc()
2013-02-27 19:10:15 -08:00
devfreq
dio
dma
Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
2013-03-03 10:20:22 -08:00
edac
Merge branch 'linux_next' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac
2013-02-28 20:42:33 -08:00
eisa
extcon
firewire
firewire: convert to idr_alloc()
2013-02-27 19:10:15 -08:00
firmware
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
2013-03-09 16:51:13 -08:00
gpio
gpio/gpio-ich: fix ichx_gpio_check_available() return what callers expect
2013-03-02 13:20:21 +00:00
gpu
drm/i915: stop using GMBUS IRQs on Gen4 chips
2013-03-20 00:03:16 +01:00
hid
Merge branch 'for-3.9/upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
2013-03-08 14:42:52 -08:00
hsi
hsi: fix kernel-doc warnings
2013-03-01 13:39:00 -08:00
hv
Drivers: hv: vmbus: Use the new infrastructure for delivering VMBUS interrupts
2013-02-27 10:15:53 -08:00
hwmon
hwmon: (sht15) Check return value of regulator_enable()
2013-03-03 21:45:48 -08:00
hwspinlock
i2c
idr: remove MAX_IDR_MASK and move left MAX_IDR_* into idr.c
2013-02-27 19:10:20 -08:00
ide
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-02-26 20:16:07 -08:00
idle
Merge branch 'core-locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2013-02-22 19:25:09 -08:00
iio
infiniband
fs: Limit sys_mount to only request filesystem modules.
2013-03-03 19:36:31 -08:00
input
Atmel MXT touchscreen: increase reset timeouts
2013-03-09 10:31:01 -08:00
iommu
iommu, x86: Add DMA remap fault reason
2013-03-06 09:41:51 +01:00
ipack
irqchip
ImgTec Meta architecture changes for v3.9-rc1
2013-03-03 12:06:09 -08:00
isdn
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-03-05 18:42:29 -08:00
leds
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds
2013-02-26 09:29:02 -08:00
lguest
All trivial, thanks to the stuff which didn't quite make it time.
2013-02-26 14:49:12 -08:00
macintosh
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
2013-02-23 17:09:55 -08:00
mailbox
mailbox, pl320-ipc: remove __init from probe function
2013-03-04 14:23:11 +01:00
md
md updates for 3.9
2013-03-05 17:22:08 -08:00
media
arm-soc: late OMAP changes
2013-02-28 20:00:40 -08:00
memory
memstick
memstick: move the dereference below the NULL test
2013-02-27 19:10:23 -08:00
message
mfd
mfd: convert to idr_alloc()
2013-02-27 19:10:17 -08:00
misc
fs: Limit sys_mount to only request filesystem modules.
2013-03-03 19:36:31 -08:00
mmc
Merge branches 'devel-stable', 'fixes' and 'mmci' into for-linus
2013-03-03 00:32:50 +00:00
mtd
fs: Limit sys_mount to only request filesystem modules.
2013-03-03 19:36:31 -08:00
net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-03-05 18:42:29 -08:00
nfc
ntb
nubus
of
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2013-02-21 17:40:58 -08:00
oprofile
fs: Limit sys_mount to only request filesystem modules.
2013-03-03 19:36:31 -08:00
parisc
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-02-26 20:16:07 -08:00
parport
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
2013-02-21 17:54:03 -08:00
pci
ACPI / glue: Add .match() callback to struct acpi_bus_type
2013-03-04 14:23:40 +01:00
pcmcia
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2013-02-21 17:40:58 -08:00
pinctrl
platform
Platform: x86: chromeos_laptop : Add basic platform data for atmel devices
2013-03-08 16:03:29 -08:00
pnp
ACPI / glue: Add .match() callback to struct acpi_bus_type
2013-03-04 14:23:40 +01:00
power
power: convert to idr_alloc()
2013-02-27 19:10:18 -08:00
pps
drivers/pps/clients/pps-gpio.c: use devm_kzalloc
2013-02-27 19:10:23 -08:00
ps3
ptp
pwm
pwm: Changes for v3.9-rc1
2013-02-26 09:34:29 -08:00
rapidio
regulator
Merge remote-tracking branch 'regulator/fix/twl' into tmp
2013-03-05 10:12:43 +08:00
remoteproc
remoteproc: convert to idr_alloc()
2013-02-27 19:10:18 -08:00
rpmsg
rpmsg: convert to idr_alloc()
2013-02-27 19:10:18 -08:00
rtc
rtc: stmp3xxx: add wdt-accessor function
2013-03-01 12:40:36 +01:00
s390
qdio: remove unused parameters
2013-02-28 09:37:12 +01:00
sbus
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2013-02-26 20:16:07 -08:00
scsi
ACPI / glue: Add .match() callback to struct acpi_bus_type
2013-03-04 14:23:40 +01:00
sfi
sh
sn
spi
ssb
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into mips-for-linux-next
2013-02-22 10:07:30 +01:00
staging
fs: Limit sys_mount to only request filesystem modules.
2013-03-03 19:36:31 -08:00
target
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2013-03-02 11:43:27 -08:00
tc
thermal
Fix mis-merge of intel_powerclamp.c resulting in compile error
2013-02-28 20:23:09 -08:00
tty
drivers/tty/hvc: Use strlcpy instead of strncpy
2013-03-05 16:56:27 +11:00
uio
uio: convert to idr_alloc()
2013-02-27 19:10:19 -08:00
usb
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
2013-03-09 16:51:13 -08:00
uwb
vfio
vfio: convert to idr_alloc()
2013-02-27 19:10:19 -08:00
vhost
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2013-02-26 11:42:23 -08:00
video
backlight: add new lp8788 backlight driver
2013-02-27 19:10:09 -08:00
virt
virtio
All trivial, thanks to the stuff which didn't quite make it time.
2013-02-26 14:49:12 -08:00
vlynq
vme
w1
arm-soc: i.MX DT changes
2013-02-28 19:59:34 -08:00
watchdog
watchdog: sp805_wdt depends on ARM
2013-03-01 12:56:26 +01:00
xen
fs: Limit sys_mount to only request filesystem modules.
2013-03-03 19:36:31 -08:00
zorro
new helper: file_inode(file)
2013-02-22 23:31:31 -05:00
Kconfig
Makefile
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
2013-02-23 17:09:55 -08:00