linux/drivers/gpu/drm
Linus Torvalds 3381d7b2b3 Updates for the [PCI] MSI subsystem:
- Add interrupt redirection infrastructure
 
     Some PCI controllers use a single demultiplexing interrupt for the MSI
     interrupts of subordinate devices.
 
     This prevents setting the interrupt affinity of device interrupts, which
     causes device interrupts to be delivered to a single CPU. That obviously is
     counterproductive for multi-queue devices and interrupt balancing.
 
     To work around this limitation the new infrastructure installs a dummy
     irq_set_affinity() callback which captures the affinity mask and picks a
     redirection target CPU out of the mask.
 
     When the PCI controller demultiplexes the interrupts it invokes a new
     handling function in the core, which either runs the interrupt handler in
     the context of the target CPU or delegates it to irq_work on the target CPU.
 
   - Utilize the interrupt redirection mechanism in the PCI DWC host controller
     driver.
 
     This allows affinity control for the subordinate device MSI interrupts
     instead of being randomly executed on the CPU which runs the demultiplex
     handler.
 
   - Replace the binary 64-bit MSI flag with a DMA mask
 
     Some PCI devices have PCI_MSI_FLAGS_64BIT in the MSI capability, but
     implement less than 64 address bits. This breaks on platforms where such a
     device is assigned an MSI address higher than what's supported.
 
     With the binary 64-bit flag there is no other choice than disabling 64-bit
     MSI support which leaves the device disfunctional.
 
     By using a DMA mask the address limit of a device can be described
     correctly which provides support for the above scenario.
 
   - Make use of the DMA mask based address limit in the hda/intel and radeon
     drivers to enable them on affected platforms.
 
   - The usual small cleanups and improvements
 -----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCgAuFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmmJyPsQHHRnbHhAa2Vy
 bmVsLm9yZwAKCRCmGPVMDXSYocekEADAsS5FlUkFuBy6kODhl5J7b9/oqlL3IEnR
 3CdOrFO716dce+Gej+Wp3T93dJ3XsfD7nCZuy99+LwUkTubmaBJXfjY9S+Ket0ID
 Wc3ltiD6f3GEFB14rXN+fFG/u+OOLkaXdpbQpiTnqL4JAti9qF80D4uon28+FC/o
 wc1MhqVBPbOHU9iM196ngkZuXCNVPLcnZN6PNBgIn0sxx06LcK+daY0bNGxfn5Ua
 LY9SD8hN7tYlkDi42nB/ZXMrexqT9cxSqHObmPX+G/QLfXCRBtD+gyVbs+KVzpRL
 hmFERTlUh9tUdcQFrjgiZP/r4N5ilzsu6w5ZpSOEsGuahFUPZWJWFFC1D8rmq/Ay
 X9HKge1jqXJtbCf0pJM/kdbJKSH5S6aLP3iF37y+PqITIEIX8jIT3oVcvL9hI0BW
 HFxpuJfhAVg63kMegZCO/iROTusLHUZr8iwYOM7pEiCE6fP46jPijsPffVIWvrlJ
 2LVOv/A5wy9q8FW8sF9/M6CW7cdeYQF06Ce3qAyMxjZjEyR3KFBJCVWjhqyMxZJP
 3zFl1XXKXgRO+CDrYKVTPIaXR5D76k/l6MnECQpq81CQyQKm2h6A9PyY+n70FfbZ
 BimakUlBGCd92ZbSxzC9pAOiHo0ZoKtc5BhnsRhKVyBCmEKDazEplDuf49/OSZUE
 p2kaf/PuOw==
 =SCSQ
 -----END PGP SIGNATURE-----

Merge tag 'irq-msi-2026-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull MSI updates from Thomas Gleixner:
 "Updates for the [PCI] MSI subsystem:

   - Add interrupt redirection infrastructure

     Some PCI controllers use a single demultiplexing interrupt for the
     MSI interrupts of subordinate devices.

     This prevents setting the interrupt affinity of device interrupts,
     which causes device interrupts to be delivered to a single CPU.
     That obviously is counterproductive for multi-queue devices and
     interrupt balancing.

     To work around this limitation the new infrastructure installs a
     dummy irq_set_affinity() callback which captures the affinity mask
     and picks a redirection target CPU out of the mask.

     When the PCI controller demultiplexes the interrupts it invokes a
     new handling function in the core, which either runs the interrupt
     handler in the context of the target CPU or delegates it to
     irq_work on the target CPU.

   - Utilize the interrupt redirection mechanism in the PCI DWC host
     controller driver.

     This allows affinity control for the subordinate device MSI
     interrupts instead of being randomly executed on the CPU which runs
     the demultiplex handler.

   - Replace the binary 64-bit MSI flag with a DMA mask

     Some PCI devices have PCI_MSI_FLAGS_64BIT in the MSI capability,
     but implement less than 64 address bits. This breaks on platforms
     where such a device is assigned an MSI address higher than what's
     supported.

     With the binary 64-bit flag there is no other choice than disabling
     64-bit MSI support which leaves the device disfunctional.

     By using a DMA mask the address limit of a device can be described
     correctly which provides support for the above scenario.

   - Make use of the DMA mask based address limit in the hda/intel and
     radeon drivers to enable them on affected platforms

   - The usual small cleanups and improvements"

* tag 'irq-msi-2026-02-09' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  ALSA: hda/intel: Make MSI address limit based on the device DMA limit
  drm/radeon: Make MSI address limit based on the device DMA limit
  PCI/MSI: Check the device specific address mask in msi_verify_entries()
  PCI/MSI: Convert the boolean no_64bit_msi flag to a DMA address mask
  genirq/redirect: Prevent writing MSI message on affinity change
  PCI/MSI: Unmap MSI-X region on error
  genirq: Update effective affinity for redirected interrupts
  PCI: dwc: Enable MSI affinity support
  PCI: dwc: Code cleanup
  genirq: Add interrupt redirection infrastructure
  genirq/msi: Correct kernel-doc in <linux/msi.h>
2026-02-10 16:30:29 -08:00
..
adp
amd drm/amdgpu: Fix double deletion of validate_list 2026-02-03 17:24:21 -05:00
arm drm: Discard pm_runtime_put() return value 2026-01-16 20:28:05 +01:00
armada
aspeed
ast
atmel-hlcdc
bridge Power management updates for 6.20-rc1/7.0-rc1 2026-02-09 19:00:42 -08:00
ci
clients
display
etnaviv
exynos drm/exynos: hdmi: replace use of system_wq with system_percpu_wq 2026-01-07 17:50:50 +09:00
fsl-dcu
gma500 Revert "drm/gma500: use drm_crtc_vblank_crtc()" 2026-02-02 10:10:15 +01:00
gud drm/gud: fix NULL fb and crtc dereferences on USB disconnect 2026-01-13 13:58:24 +00:00
hisilicon
hyperv
i915 A slightly calmer cycle for docs this time around, though there is still a 2026-02-09 20:53:18 -08:00
imagination Merge branch 'pm-runtime' 2026-02-04 21:03:18 +01:00
imx Power management updates for 6.20-rc1/7.0-rc1 2026-02-09 19:00:42 -08:00
ingenic
kmb
lib
lima
logicvc
loongson
mcde
mediatek Mediatek DRM Fixes - 20260119 2026-01-23 10:13:12 +10:00
meson
mgag200 drm/mgag200: fix mgag200_bmc_stop_scanout() 2026-02-04 08:52:53 +01:00
msm Merge tag 'drm-msm-fixes-2026-01-23' of https://gitlab.freedesktop.org/drm/msm into drm-fixes 2026-01-28 14:25:16 +10:00
mxsfb
nouveau hardening updates for v7.0-rc1 2026-02-10 08:54:13 -08:00
nova Driver core changes for 6.19-rc1 2025-12-05 21:29:02 -08:00
omapdrm
panel drm/panel: simple: restore connector_type fallback 2026-01-13 10:07:40 +01:00
panfrost
panthor drm/gpuvm: take GEM lock inside drm_gpuvm_bo_obtain_prealloc() 2026-01-08 17:45:09 +01:00
pl111 drm/pl111: Fix error handling in pl111_amba_probe 2025-12-31 22:42:26 +01:00
qxl
radeon Updates for the [PCI] MSI subsystem: 2026-02-10 16:30:29 -08:00
renesas
rockchip drm/rockchip: dw_hdmi_qp: Switch to gpiod_set_value_cansleep() 2026-01-11 14:36:21 +01:00
scheduler
sitronix
solomon
sprd
sti
stm
sun4i
sysfb EFI updates for v7.0 2026-02-09 20:49:19 -08:00
tegra
tests Merge remote-tracking branch 'drm/drm-fixes' into drm-misc-fixes 2025-12-15 12:53:27 +01:00
tidss drm/tidss: Fix enable/disable order 2026-01-03 20:08:24 +01:00
tilcdc drm fixes for 6.19-rc1 2025-12-13 17:39:28 +12:00
tiny
ttm drm fixes for 6.19-rc1 2025-12-13 17:39:28 +12:00
tve200
tyr drm/tyr: depend on `COMMON_CLK` to fix build error 2026-01-26 02:18:58 +01:00
udl
v3d
vboxvideo
vc4 drm: Discard pm_runtime_put() return value 2026-01-16 20:28:05 +01:00
vgem
virtio
vkms drm/vkms: Fix color pipeline enum name leak 2026-01-22 10:26:35 +01:00
vmwgfx drm/vmwgfx: Fix kernel-doc warnings for vmwgfx_fence 2026-01-07 12:31:21 -05:00
xe drm/xe/guc: Fix CFI violation in debugfs access. 2026-02-05 09:45:22 +01:00
xen
xlnx
Kconfig drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE 2026-01-22 10:41:18 +01:00
Kconfig.debug
Makefile drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE 2026-01-22 10:41:18 +01:00
drm_atomic.c
drm_atomic_helper.c drm/atomic-helper: Export and namespace some functions 2026-01-03 20:08:17 +01:00
drm_atomic_state_helper.c
drm_atomic_uapi.c
drm_auth.c
drm_blend.c
drm_bridge.c
drm_bridge_helper.c
drm_buddy.c
drm_cache.c
drm_client.c
drm_client_event.c
drm_client_modeset.c
drm_client_sysrq.c
drm_color_mgmt.c
drm_colorop.c
drm_connector.c
drm_crtc.c
drm_crtc_helper.c
drm_crtc_helper_internal.h
drm_crtc_internal.h
drm_damage_helper.c
drm_debugfs.c
drm_debugfs_crc.c
drm_displayid.c
drm_displayid_internal.h
drm_draw.c
drm_draw_internal.h
drm_drv.c
drm_dumb_buffers.c
drm_edid.c
drm_edid_load.c
drm_eld.c
drm_encoder.c
drm_exec.c
drm_fb_dma_helper.c
drm_fb_helper.c drm/fb-helper: Fix vblank timeout during suspend/reset 2026-01-06 09:05:06 +01:00
drm_fbdev_dma.c
drm_fbdev_shmem.c
drm_fbdev_ttm.c
drm_file.c
drm_flip_work.c
drm_format_helper.c
drm_format_internal.h
drm_fourcc.c
drm_framebuffer.c
drm_gem.c drm: Do not allow userspace to trigger kernel warnings in drm_gem_change_handle_ioctl() 2026-01-26 11:45:51 +00:00
drm_gem_atomic_helper.c
drm_gem_dma_helper.c
drm_gem_framebuffer_helper.c
drm_gem_shmem_helper.c drm/gem-shmem: Fix the MODULE_LICENSE() string 2025-12-21 20:15:36 +01:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c
drm_gpusvm.c
drm_gpuvm.c drm/gpuvm: take GEM lock inside drm_gpuvm_bo_obtain_prealloc() 2026-01-08 17:45:09 +01:00
drm_internal.h
drm_ioc32.c
drm_ioctl.c
drm_kms_helper_common.c
drm_lease.c
drm_managed.c
drm_mipi_dbi.c
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c
drm_mode_object.c
drm_modes.c
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c
drm_pagemap.c mm/zone_device: reinitialize large zone device private folios 2026-01-26 19:03:48 -08:00
drm_panel.c
drm_panel_backlight_quirks.c
drm_panel_orientation_quirks.c
drm_panic.c
drm_panic_qr.rs
drm_pci.c
drm_plane.c drm fixes for 6.19-rc1 2025-12-13 17:39:28 +12:00
drm_plane_helper.c
drm_prime.c
drm_print.c
drm_privacy_screen.c
drm_privacy_screen_x86.c
drm_probe_helper.c
drm_property.c
drm_rect.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_suballoc.c
drm_syncobj.c
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c
drm_vblank_helper.c
drm_vblank_work.c
drm_vma_manager.c
drm_writeback.c