2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-06 12:44:14 +08:00
linux-next/drivers
Alexander Gordeev ab0f9e78b9 ahci: Ensure "MSI Revert to Single Message" mode is not enforced
The AHCI specification allows hardware to choose to revert to
single MSI mode when fewer messages are allocated than requested.
Yet, at least ICH10 chipset reverts to single MSI mode even when
enough messages are allocated in some cases (see below).

This update forces the driver to not rely on initialization of
multiple MSIs mode alone and always check if "MSI Revert to
Single Message" (MRSM) mode was enforced by the controller and
fallback to the single MSI mode in case it did.

That prevents a situation when the driver configured multiple
per-port IRQ handlers, but the controller sends all port's
interrupts to a single IRQ, which could easily screw up the
interrupt handling and lead to delays and possibly crashes.

The fix was tested on a 6-port controller that successfully
reverted to the single MSI mode:

00:1f.2 SATA controller: Intel Corporation 82801JI (ICH10 Family) SATA
AHCI Controller (prog-if 01 [AHCI 1.0])
	Subsystem: Super Micro Computer Inc Device 10a7
	Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 101
	I/O ports at f110 [size=8]
	I/O ports at f100 [size=4]
	I/O ports at f0f0 [size=8]
	I/O ports at f0e0 [size=4]
	I/O ports at f020 [size=32]
	Memory at fbf00000 (32-bit, non-prefetchable) [size=2K]
	Capabilities: [80] MSI: Enable+ Count=1/16 Maskable- 64bit-
	Capabilities: [70] Power Management version 3
	Capabilities: [a8] SATA HBA v1.0
	Capabilities: [b0] PCI Advanced Features
	Kernel driver in use: ahci

With 6 ports just 8 MSI vectors should be enough, but the adapter
enforces the MRSM mode when less than 16 vectors are written to
the Multiple Messages Enable PCI register. I instigated MRSM mode
by forcing @nvec to 8 in ahci_init_interrupts().

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Cc: linux-ide@vger.kernel.org
Cc: stable@vger.kernel.org
Signed-off-by: Tejun Heo <tj@kernel.org>
2014-04-17 09:58:48 -04:00
..
accessibility
acpi PCI changes for the v3.15 merge window: 2014-04-01 15:14:04 -07:00
amba
ata ahci: Ensure "MSI Revert to Single Message" mode is not enforced 2014-04-17 09:58:48 -04:00
atm
auxdisplay
base Driver core / sysfs patches for 3.15-rc1 2014-04-01 16:28:19 -07:00
bcma
block Merge branch 'for-3.15/drivers' of git://git.kernel.dk/linux-block 2014-04-01 19:43:53 -07:00
bluetooth
bus
cdrom
char
clk Single fix for a clock driver merged in 3.14-rc1. Without this fix the 2014-03-08 10:51:30 -08:00
clocksource Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-04-01 11:00:07 -07:00
connector
cpufreq ACPI and power management updates for 3.15-rc1 2014-04-01 12:48:54 -07:00
cpuidle Merge branch 'for-3.15/core' of git://git.kernel.dk/linux-block 2014-04-01 19:19:15 -07:00
crypto
dca
devfreq PM / devfreq: Rewrite devfreq_update_status() to fix multiple bugs 2014-03-21 11:16:30 +09:00
dio
dma
edac A bunch of EDAC updates all over the place: 2014-04-01 13:54:00 -07:00
eisa
extcon extcon: Move OF helper function to extcon core and change function name 2014-03-19 14:41:58 +09:00
firewire Merge branch 'for-3.14-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2014-03-08 11:51:13 -08:00
firmware Driver core / sysfs patches for 3.15-rc1 2014-04-01 16:28:19 -07:00
fmc
gpio
gpu Driver core / sysfs patches for 3.15-rc1 2014-04-01 16:28:19 -07:00
hid USB patches for 3.15-rc1 2014-04-01 17:06:09 -07:00
hsi
hv Char/Misc driver patches for 3.15-rc1 2014-04-01 16:13:21 -07:00
hwmon hwmon: (pmbus/ltc2978) Add support for LTM4676 2014-03-19 18:59:40 -07:00
hwspinlock
i2c i2c: cpm: Fix build by adding of_address.h and of_irq.h 2014-03-24 14:54:21 +01:00
ide
idle
iio Staging driver pull request for 3.15-rc1 2014-04-01 16:45:00 -07:00
infiniband Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending 2014-03-09 13:50:14 -07:00
input ACPI and power management updates for 3.15-rc1 2014-04-01 12:48:54 -07:00
iommu PCI changes for the v3.15 merge window: 2014-04-01 15:14:04 -07:00
ipack
irqchip irqchip: sun7i/sun6i: Disable NMI before registering the handler 2014-03-31 11:12:57 +02:00
isdn isdn/capi: Make Middleware depend on CAPI2.0 2014-03-18 15:02:57 -04:00
leds
lguest
macintosh
mailbox
mcb drivers: mcb: Fix build error discovered by 0-day bot 2014-03-09 10:22:46 -07:00
md Merge branch 'for-3.15/drivers' of git://git.kernel.dk/linux-block 2014-04-01 19:43:53 -07:00
media Staging driver pull request for 3.15-rc1 2014-04-01 16:45:00 -07:00
memory
memstick
message PCI changes for the v3.15 merge window: 2014-04-01 15:14:04 -07:00
mfd regulator: Updates for v3.15 2014-04-01 13:17:46 -07:00
misc Staging driver pull request for 3.15-rc1 2014-04-01 16:45:00 -07:00
mmc workqueue: remove deprecated WQ_NON_REENTRANT 2014-03-29 09:33:03 -04:00
mtd Char/Misc driver patches for 3.15-rc1 2014-04-01 16:13:21 -07:00
net Merge branch 'for-3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2014-03-31 15:08:51 -07:00
nfc
ntb
nubus
of Staging driver pull request for 3.15-rc1 2014-04-01 16:45:00 -07:00
oprofile
parisc
parport
pci Driver core / sysfs patches for 3.15-rc1 2014-04-01 16:28:19 -07:00
pcmcia PCI changes for the v3.15 merge window: 2014-04-01 15:14:04 -07:00
phy PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver 2014-03-09 12:45:13 +05:30
pinctrl Pin control bulk changes for the v3.15 series, no new core 2014-04-01 13:10:49 -07:00
platform sound updates for 3.15-rc1 2014-04-01 15:38:47 -07:00
pnp Merge branch 'x86-asmlinkage-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-03-31 14:13:25 -07:00
power
powercap
pps
ps3
ptp
pwm
rapidio
regulator Merge remote-tracking branches 'regulator/topic/tps65218', 'regulator/topic/tps6524x', 'regulator/topic/tps6586x', 'regulator/topic/tps65910', 'regulator/topic/tps80031', 'regulator/topic/wm831x', 'regulator/topic/wm8350' and 'regulator/topic/wm8994' into regulator-next 2014-03-26 16:58:25 +00:00
remoteproc
reset
rpmsg
rtc
s390 Driver core / sysfs patches for 3.15-rc1 2014-04-01 16:28:19 -07:00
sbus
scsi Merge branch 'for-3.15/core' of git://git.kernel.dk/linux-block 2014-04-01 19:19:15 -07:00
sfi
sh
sn
spi Merge remote-tracking branches 'spi/topic/xilinx' and 'spi/topic/xtfpga' into spi-next 2014-03-30 00:51:48 +00:00
spmi spmi: pm: drop bus-level PM suspend/resume routines 2014-03-08 22:15:52 -08:00
ssb
staging Staging driver pull request for 3.15-rc1 2014-04-01 16:45:00 -07:00
target
tc
thermal
tty TTY/Serial driver update for 3.15-rc1 2014-04-01 16:55:57 -07:00
uio
usb USB patches for 3.15-rc1 2014-04-01 17:06:09 -07:00
uwb
vfio PCI changes for the v3.15 merge window: 2014-04-01 15:14:04 -07:00
vhost vhost: validate vhost_get_vq_desc return value 2014-03-28 16:10:35 -04:00
video Char/Misc driver patches for 3.15-rc1 2014-04-01 16:13:21 -07:00
virt
virtio
vlynq
vme
w1
watchdog watchdog: Fix Elan SC520 dependencies 2014-03-31 13:36:12 +02:00
xen ACPI and power management updates for 3.15-rc1 2014-04-01 12:48:54 -07:00
zorro
Kconfig
Makefile