Thomas Gleixner
ec25d05e18
PCI/MSI: Protect msi_desc::masked for multi-MSI
...
commit 77e89afc25f30abd56e76a809ee2884d7c1b63ce upstream.
Multi-MSI uses a single MSI descriptor and there is a single mask register
when the device supports per vector masking. To avoid reading back the mask
register the value is cached in the MSI descriptor and updates are done by
clearing and setting bits in the cache and writing it to the device.
But nothing protects msi_desc::masked and the mask register from being
modified concurrently on two different CPUs for two different Linux
interrupts which belong to the same multi-MSI descriptor.
Add a lock to struct device and protect any operation on the mask and the
mask register with it.
This makes the update of msi_desc::masked unconditional, but there is no
place which requires a modification of the hardware register without
updating the masked cache.
msi_mask_irq() is now an empty wrapper which will be cleaned up in follow
up changes.
The problem goes way back to the initial support of multi-MSI, but picking
the commit which introduced the mask cache is a valid cut off point
(2.6.30).
Fixes: f2440d9acb ("PCI MSI: Refactor interrupt masking code")
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210729222542.726833414@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-08-18 08:57:03 +02:00
..
accessibility
acpi
ACPI: NFIT: Fix support for virtual SPA ranges
2021-08-18 08:56:57 +02:00
amba
android
ata
libata: fix ata_pio_sector for CONFIG_HIGHMEM
2021-08-12 13:21:04 +02:00
atm
atm: nicstar: register the interrupt handler in the right place
2021-07-19 08:53:12 +02:00
auxdisplay
base
PCI/MSI: Protect msi_desc::masked for multi-MSI
2021-08-18 08:57:03 +02:00
bcma
block
nbd: Aovid double completion of a request
2021-08-18 08:57:01 +02:00
bluetooth
Bluetooth: btusb: fix bt fiwmare downloading failure issue for qca btsoc.
2021-07-19 08:53:13 +02:00
bus
bus: ti-sysc: Fix flakey idling of uarts and stop using swsup_sidle_act
2021-06-10 13:37:08 +02:00
cdrom
cdrom: gdrom: initialize global variable at init time
2021-05-26 12:05:19 +02:00
char
tpm_ftpm_tee: Free and unregister TEE shared memory during kexec
2021-08-12 13:21:01 +02:00
clk
clk: fix leak on devm_clk_bulk_get_all() unwind
2021-08-12 13:21:00 +02:00
clocksource
clocksource/arm_arch_timer: Improve Allwinner A64 timer workaround
2021-07-19 08:53:15 +02:00
connector
counter
cpufreq
cpufreq: Make cpufreq_online() call driver->offline() on errors
2021-07-14 16:53:25 +02:00
cpuidle
crypto
crypto: ccp - Annotate SEV Firmware file names
2021-07-19 08:53:14 +02:00
dax
dca
devfreq
PM / devfreq: Use more accurate returned new_freq as resume_freq
2021-05-14 09:44:20 +02:00
dio
dma
dmaengine: imx-dma: configure the generic DMA type to make it work
2021-08-12 13:20:56 +02:00
dma-buf
dma-buf/sync_file: Don't leak fences on merge failure
2021-07-25 14:35:15 +02:00
edac
EDAC/Intel: Do not load EDAC driver when running as a guest
2021-07-14 16:53:18 +02:00
eisa
extcon
extcon: intel-mrfld: Sync hardware and software state on init
2021-07-19 08:53:16 +02:00
firewire
firmware
firmware: arm_scmi: Add delayed response status check
2021-08-08 09:04:08 +02:00
fpga
fpga: stratix10-soc: Add missing fpga_mgr_free() call
2021-07-19 08:53:15 +02:00
fsi
fsi/sbefifo: Fix reset timeout
2021-07-14 16:53:42 +02:00
gnss
gpio
gpio: tqmx86: really make IRQ optional
2021-08-12 13:20:57 +02:00
gpu
drm/meson: fix colour distortion from HDR set during vendor u-boot
2021-08-18 08:56:59 +02:00
greybus
hid
HID: wacom: Re-enable touch by default for Cintiq 24HDT / 27QHDT
2021-08-04 12:27:38 +02:00
hsi
HSI: core: fix resource leaks in hsi_add_client_from_dt()
2021-05-14 09:44:25 +02:00
hv
hv_utils: Fix passing zero to 'PTR_ERR' warning
2021-07-14 16:53:16 +02:00
hwmon
hwmon: (max31790) Fix fan speed reporting for fan7..12
2021-07-14 16:53:23 +02:00
hwspinlock
hwtracing
intel_th: Wait until port is in reset before programming it
2021-07-20 16:10:46 +02:00
i2c
i2c: dev: zero out array used for i2c reads from userspace
2021-08-18 08:56:56 +02:00
i3c
Revert "i3c master: fix missing destroy_workqueue() on error in i3c_master_register"
2021-05-14 09:44:15 +02:00
ide
idle
iio
iio: adc: Fix incorrect exit of for-loop
2021-08-18 08:56:56 +02:00
infiniband
RDMA/cma: Fix rdma_resolve_route() memory leak
2021-07-19 08:53:13 +02:00
input
Input: hideep - fix the uninitialized use in hideep_nvm_unlock()
2021-07-20 16:10:45 +02:00
interconnect
iommu
iommu/arm-smmu: Fix arm_smmu_device refcount leak in address translation
2021-07-20 16:10:44 +02:00
ipack
ipack/carriers/tpci200: Fix a double free in tpci200_pci_probe
2021-07-19 08:53:17 +02:00
irqchip
irqchip/gic-v3: Fix OF_BAD_ADDR error handling
2021-05-14 09:44:20 +02:00
isdn
mISDN: fix possible use-after-free in HFC_cleanup()
2021-07-19 08:53:08 +02:00
leds
leds: ktd2692: Fix an error handling path
2021-07-14 16:53:47 +02:00
lightnvm
macintosh
mailbox
mcb
md
md/raid10: properly indicate failure when ending a failed write request
2021-08-12 13:21:03 +02:00
media
media: v4l2-mem2mem: always consider OUTPUT queue during poll
2021-08-15 13:08:02 +02:00
memory
memory: fsl_ifc: fix leak of private memory on probe failure
2021-07-20 16:10:52 +02:00
memstick
memstick: rtsx_usb_ms: fix UAF
2021-07-14 16:53:13 +02:00
message
mfd
mfd: cpcap: Fix cpcap dmamask not set warnings
2021-07-20 16:10:43 +02:00
misc
misc: alcor_pci: fix inverted branch condition
2021-07-20 16:10:53 +02:00
mmc
mmc: core: Allow UHS-I voltage switch for SDSC cards if supported
2021-07-19 08:53:15 +02:00
mtd
mtd: rawnand: marvell: add missing clk_disable_unprepare() on error in marvell_nfc_resume()
2021-07-14 16:53:45 +02:00
mux
net
net: dsa: sja1105: fix broken backpressure in .port_fdb_dump
2021-08-18 08:57:00 +02:00
nfc
nfc: nfcsim: fix use after free during module unload
2021-08-04 12:27:38 +02:00
ntb
nubus
nvdimm
libnvdimm/region: Fix label activation vs errors
2021-08-18 08:56:57 +02:00
nvme
nvme: fix nvme_setup_command metadata trace event
2021-08-08 09:04:08 +02:00
nvmem
nvmem: core: add a missing of_node_put
2021-07-19 08:53:16 +02:00
of
of: Fix truncation of memory sizes on 32-bit platforms
2021-07-14 16:53:45 +02:00
opp
oprofile
parisc
parport
pci
PCI/MSI: Protect msi_desc::masked for multi-MSI
2021-08-18 08:57:03 +02:00
pcmcia
pcmcia: i82092: fix a null pointer dereference bug
2021-08-12 13:21:03 +02:00
perf
drivers/perf: fix the missed ida_simple_remove() in ddr_perf_probe()
2021-07-14 16:53:14 +02:00
phy
phy: ti: dm816x: Fix the error handling path in 'dm816x_usb_phy_probe()
2021-07-14 16:53:46 +02:00
pinctrl
pinctrl: mcp23s08: Fix missing unlock on error in mcp23s08_irq()
2021-07-19 08:53:18 +02:00
platform
platform/x86: pcengines-apuv2: Add missing terminating entries to gpio-lookup tables
2021-08-18 08:56:58 +02:00
pnp
power
power: supply: rt5033_battery: Fix device tree enumeration
2021-07-20 16:10:49 +02:00
powercap
pps
ps3
ptp
ptp: improve max_adj check against unreasonable values
2021-06-23 14:41:26 +02:00
pwm
pwm: sprd: Ensure configuring period and duty_cycle isn't wrongly skipped
2021-07-28 13:30:53 +02:00
rapidio
rapidio: handle create_workqueue() failure
2021-05-26 12:05:17 +02:00
ras
regulator
regulator: hi6421: Fix getting wrong drvdata
2021-07-28 13:30:55 +02:00
remoteproc
reset
reset: ti-syscon: fix to_ti_syscon_reset_data macro
2021-07-25 14:35:10 +02:00
rpmsg
rpmsg: qcom_glink_native: fix error return code of qcom_glink_rx_data()
2021-05-19 10:08:25 +02:00
rtc
rtc: max77686: Do not enforce (incorrect) interrupt trigger type
2021-07-25 14:35:12 +02:00
s390
s390/sclp_vt220: fix console name to match device
2021-07-20 16:10:43 +02:00
sbus
scsi
scsi: sr: Return correct event when media event code is 3
2021-08-12 13:20:56 +02:00
sfi
sh
siox
slimbus
soc
soc: ixp4xx/qmgr: fix invalid __iomem access
2021-08-12 13:21:04 +02:00
soundwire
soundwire: stream: Fix test for DP prepare complete
2021-07-14 16:53:45 +02:00
spi
spi: meson-spicc: fix memory leak in meson_spicc_remove
2021-08-12 13:21:04 +02:00
spmi
ssb
ssb: Fix error return code in ssb_bus_scan()
2021-07-14 16:53:29 +02:00
staging
staging: rtl8712: get rid of flush_scheduled_work
2021-08-12 13:21:01 +02:00
target
scsi: target: Fix protect handling in WRITE SAME(32)
2021-07-28 13:30:56 +02:00
tc
tee
tee: Correct inappropriate usage of TEE_SHM_DMA_BUF flag
2021-08-15 13:08:02 +02:00
thermal
thermal/core: Correct function name thermal_zone_device_unregister()
2021-07-25 14:35:12 +02:00
thunderbolt
thunderbolt: dma_port: Fix NVM read buffer bounds and offset issue
2021-06-03 08:59:03 +02:00
tty
serial: 8250_pci: Avoid irq sharing for MSI(-X) interrupts.
2021-08-12 13:21:03 +02:00
uio
uio_hv_generic: Fix a memory leak in error handling paths
2021-05-26 12:05:17 +02:00
usb
USB:ehci:fix Kunpeng920 ehci hardware problem
2021-08-15 13:08:04 +02:00
vfio
vfio/pci: Handle concurrent vma faults
2021-07-14 16:53:47 +02:00
vhost
video
backlight: lm3630a: Fix return code of .update_status() callback
2021-07-20 16:10:45 +02:00
virt
virtio
visorbus
visorbus: fix error return code in visorchipset_init()
2021-07-14 16:53:42 +02:00
vlynq
vme
w1
w1: ds2438: fixing bug that would always get page0
2021-07-20 16:10:41 +02:00
watchdog
Revert "watchdog: iTCO_wdt: Account for rebooting on second timeout"
2021-08-08 09:04:08 +02:00
xen
xen/events: Fix race in set_evtchn_to_irq
2021-08-18 08:57:01 +02:00
zorro
Kconfig
Makefile