Commit graph

1,481,701 commits

Author SHA1 Message Date
Kevin Tian
219cc978d6 iommu/vt-d: Fix no_iommu to disable platform opt-in
If user explicitly requests to disable iommu (via "iommu=off" or
"intel_iommu=off"), there is no reason to force enabling it due
to platform opt-in (for external-facing devices). User should be
aware of any security implication of doing so.

"intel_iommu=off" implements this policy by setting no_platform_optin
to skip platform opt-in in platform_optin_force_iommu().

However, "iommu=off" (no_iommu=1) doesn't set no_platform_optin
hence is broken in this aspect:

  - detect_intel_iommu() doesn't request ACS if no_iommu=1
  - platform_optin_force_iommu() forces iommu on if external-facing
    devices exist and no_platform_optin is not set

This leads to a bad configuration with ACS disabled while DMA
remapping is enabled.

Instead of setting no_platform_optin (will soon be removed) for
no_iommu=1, directly check no_iommu in platform_optin_force_iommu().

Fixes: 89a6079df7 ("iommu/vt-d: Force IOMMU on for platform opt in hint")
Cc: stable@vger.kernel.org
Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 10:04:03 +02:00
Dmitry Antipov
1251ade0e3 iommu/vt-d: Use kstrtoint_from_user() in dmar_perf_latency_write()
Simplify 'dmar_perf_latency_write()' by using the convenient
'kstrtoint_from_user()'.

Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 10:04:03 +02:00
Guanghui Feng
3846e469c1 iommu/vt-d: Fix CACHE_TAG_NESTING_DEVTLB polluting shared variables in flush loop
In cache_tag_flush_range(), the CACHE_TAG_NESTING_DEVTLB case modifies the
shared local variables 'addr' and 'mask' before falling through to
CACHE_TAG_DEVTLB. This causes all subsequent CACHE_TAG_DEVTLB entries in
the same loop iteration to incorrectly use the full-range flush parameters
(addr=0, mask=MAX_AGAW_PFN_WIDTH) instead of the precisely calculated PSI
range. This is not the intended behavior, as regular DEVTLB entries should
always perform targeted range-based invalidation.

Fix this by having CACHE_TAG_NESTING_DEVTLB directly call
cache_tag_flush_devtlb_psi() with the full-range constants and break,
instead of modifying shared variables and falling through. This ensures
CACHE_TAG_DEVTLB always uses the original calculated addr and mask for
precise range flush.

This change slightly affects trace_cache_tag_flush_range() behavior.
Previously, after addr/mask were overwritten, the tracepoint could record
a full-range flush even when the caller requested a narrower range.

The tracepoint should reflect caller intent. Although this helper may
widen the actual hardware invalidation range for implementation reasons,
that does not change what the caller requested, so logging the requested
range is the correct behavior.

If the actual invalidation range sent to hardware is needed, it is already
visible via the qi_submit trace event, which records the invalidation
descriptors emitted by the driver.

Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
Signed-off-by: Guixin Liu <kanie@linux.alibaba.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 10:04:03 +02:00
Li RongQing
710fe30142 iommu/vt-d: Use logical OR operator for privilege mode check
Replace bitwise OR (|) with logical OR (||) in the privilege mode
validation check. While both operators produce the same result for
boolean values (0 or 1), using logical OR is semantically correct and
makes the intent clearer.

No functional change, but improves code readability.

Signed-off-by: Li RongQing <lirongqing@baidu.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 10:04:03 +02:00
Desnes Nunes
c6e63fc8e8 iommu/vt-d: Fix UCTP context table slot when copying root entries
When translation is already enabled at boot (e.g. kdump), the vt-d driver
copies context tables from the previous kernel's root table. In scalable
mode, buses that only populate the upper root half (UCTP, devfn >= 0x80)
should be written to ctxt_tbls[tbl_idx + 1] through copy_context_table().
However, the current copy path always uses tbl[tbl_idx + 0] in this situa-
tion. Since idx wraps to 0 at devfn 0x80 due to a zeroed LCTP, new_ce for
LCTP will be NULL and keep pos equals to 0. Thus, UCTP entries will be co-
pied into tbl[tbl_idx + 0] instead of tbl[tbl_idx + 1], and written after-
wards to root_entry[bus].lo instead of .hi in copy_translation_tables().

In short, devices on bus 0x80 with devfn >= 0x80 fail DMA with fault 0x39,
which will break drivers running in kernels with translation pre-enabled.
This fixes NO_PASID DMAR faults for UCTP-only buses such as:

DMAR: [DMA Read NO_PASID] Request device [80:14.0] fault addr 0xe81759000
      [fault reason 0x39] SM: Present bit in Root Entry is clear

For instance, this fault yielded to locking issues between systemd and
xHCI, blocking a system's reboot after a vmcore was captured with kdump:

 systemd-udevd[246]: usb3: Worker [255] processing SEQNUM=2193 is taking a long time
 dracut-initqueue[277]: Timed out while waiting for udev queue to empty.
 systemd-udevd[246]: usb3: Worker [255] processing SEQNUM=2193 killed
 systemd-udevd[246]: usb3: Worker [255] terminated by signal 9 (KILL).
 ...
 kdump[569]: saving vmcore complete
 ...
 systemd-shutdown[1]: Rebooting.
 INFO: task kworker/0:1:11 blocked for more than 122 seconds.
       Not tainted 7.0.0-clean #1
 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
 task:kworker/0:1 state:D stack:0 pid:11 tgid:11 ppid:2 task_flags:0x4208160 flags:0x00080000
 Workqueue: usb_hub_wq hub_event
 Call Trace:
  <TASK>
  __schedule+0x299/0x5c0
  schedule+0x27/0x80
  schedule_timeout+0xbd/0x100
  __wait_for_common+0x97/0x1b0
  ? __pfx_schedule_timeout+0x10/0x10
  xhci_alloc_dev+0x9e/0x2b0
  usb_alloc_dev+0x7a/0x3b0
  hub_port_connect+0x285/0x960
  hub_port_connect_change+0x94/0x290
  port_event+0x4bb/0x840
  hub_event+0x141/0x460
  process_one_work+0x196/0x390
  worker_thread+0x1af/0x320
  ? __pfx_worker_thread+0x10/0x10
  kthread+0xe3/0x120
  ? __pfx_kthread+0x10/0x10
  ret_from_fork+0x199/0x260
  ? __pfx_kthread+0x10/0x10
  ret_from_fork_asm+0x1a/0x30
  </TASK>
 INFO: task systemd-shutdow:1 blocked for more than 122 seconds.
       Not tainted 7.0.0-clean #1
 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
 task:systemd-shutdow state:D stack:0 pid:1 tgid:1 ppid:0 task_flags:0x400100 flags:0x00080000
 Call Trace:
  <TASK>
  __schedule+0x299/0x5c0
  schedule+0x27/0x80
  schedule_preempt_disabled+0x15/0x30
  __mutex_lock.constprop.0+0x547/0xac0
  device_shutdown+0xac/0x1b0
  kernel_restart+0x3a/0x70
  __do_sys_reboot+0x147/0x240
  do_syscall_64+0x11b/0x6a0
  ? handle_mm_fault+0x110/0x350
  ? do_user_addr_fault+0x206/0x680
  ? irqentry_exit+0x7a/0x4d0
  entry_SYSCALL_64_after_hwframe+0x76/0x7e
 RIP: 0033:0x7fe2958da917
 RSP: 002b:00007ffc5c458618 EFLAGS: 00000206 ORIG_RAX: 00000000000000a9
 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fe2958da917
 RDX: 0000000001234567 RSI: 0000000028121969 RDI: 00000000fee1dead
 RBP: 00007ffc5c458790 R08: 0000000000000069 R09: 00000000ffffffff
 R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000000
 R13: 0000000000000000 R14: 00007ffc5c4588b8 R15: 0000000000000000
  </TASK>
 INFO: task systemd-shutdow:1 is blocked on a mutex likely owned by task kworker/0:1:11.

Fixes: 091d42e43d ("iommu/vt-d: Copy translation tables from old kernel")
Signed-off-by: Desnes Nunes <desnesn@redhat.com>
Tested-by: Tao Liu <ltao@redhat.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 10:04:02 +02:00
Arnd Bergmann
93d524fb91 More Qualcomm driver updates for v7.3
Add SMEM parsing for DDR configuration data and use its highest bank
 address bit to select the appropriate UBWC configuration.
 
 Enable generic PAS trusted-zone APIs for the Iris and Venus media drivers.
 
 Fix SCM probe retry state, reserved-memory cleanup, and an early IRQ-handler
 NULL dereference. Enable QSEECOM EFI variable access on the Asus Zenbook A16.
 
 Correct GENI firmware-size validation using the hardware CFG RAM depth and
 correct the PMIC GLINK Thunderbolt extradata layout.
 
 Document the Nord AOSS side channel and the IMEM minidump SRAM property.
 Clean up Qualcomm statistics macros and the WCNSS binding schema.
 -----BEGIN PGP SIGNATURE-----
 
 iQJCBAABCgAsFiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAmp1/J8OHGJqb3JuQGty
 eW8uc2UACgkQCx85Pw2ZrcXcZQ/9G3XLVoPBw7j1dyAfdDs1x16kZBoHxexXbPLQ
 RgNZHrcz2voh4pXOF21nf5Pv9eC+i4rZU0PzIBJBzHiW/0C+QMegOzx70upIgoBM
 V2Xsw/eqhfcPMl0xz/6LCYijGe1UXcdl1qD+blbe4qql+BFsZdG5skmqpEA2M6ZH
 DiD9II5hW/XNAZOFRkV64nV+oaX3nlU9HyusPIebL5YV8ZHjBis/QQpbObLHNUQy
 kL7UACS86U2PoR+womdoBcESArrEEpJzdezWwxjAS8nsOFoPUjzRaYxdlODm4rad
 xw+fB/loedU8yLfZpcE0GdEE6qwrwt4tda3X3ZeSfOuYqq+XiRA33CeRwCDb+XNK
 DlOpA3bRNTY8d3LZ+Worg329kRPB86fmvYTxsvurJ7/LTVSl1ZHotL0rdFOcL8BD
 sR3FIRXSPt/RUE0QY7Xq38BahsgWAjKt2TFNrtq2PJdQES2kYLXpx8+xAzFWeg//
 TxkM8UtA5dmt19svsAtELHyTGm8lWFBtbZSyHDbdGhDH6Wvf0PHNcsqY5lYIvwn+
 5+bpT00Os2KdlgaBvWzUxM+FoWJ1QH9hYjEJZRFdcWmtbnNRABBLcyyGgtAOffot
 mVjRrrRkgSBn+94eZTmqC25RPwZbkd1hog9ym5JUa2RLYfgsKDHW6rb1p/+Qp601
 diAdn9s=
 =hi1p
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5hSsACgkQmmx57+YA
 GNk9Lw//d58iG3MEb2ttm1MTuUv1S5f3kaleALzaGJh7mXk7MrtdYd+nVEKsXJ4m
 tmBQW2TmrjUdj36YkIhkyuiX0iE2Y6Gje+pm1v7axbqWGJ3Kr48Ytrc/QrlCS6Ji
 nHz4aZx7Lm6HYiGkl9QVajkP3w/FDnlk+awLc0kN/0BqzEkyPKrJYTePz7FHnfhy
 kRmpzMBZY05MG3MxxJU57bJHWntmKL4rCSpTUdVMP28lb8lIRLbrK7IEIoCR+Css
 bciH++o8pBFrJv3ryexMlUmR5Ua38BjuoDXeK17PwqoB2My8CJUJAf8+dKVWGJ9h
 efpSGJKfUjpDTUJKqKESx11jb900DPpFg773JwtJCRTP+7TZU1iv/6KxyfNgz6Qx
 LGNUEehZ6nYRUo91v5FX4jBaafEHqpl/PLUQIPqvaCcYTQ1pw+TZKBhA/EZJucuv
 RrE9fLt1ivn7+YaJSrEavzsPzMiXHs+Y61zbb1OEIGAg07uu9GUTjhaI+DfUIDNf
 VT5v8Y4TopL8NEHsSekaJ4Zu4gGe/gOreZWlxDBtbtMWB7T4KmgRPJhAmrp40bQq
 B6LcmsDw80YCa46MRbF9PnvM7YEOdZox4Riw8V5IcdHd2IjwfMGPD75TY56mMlIC
 u0LBNKuaOtG+Y9m7TeJ/W8kElAib71dh4wZb5xmqrZcVLmRgtxo=
 =TIvW
 -----END PGP SIGNATURE-----

Merge tag 'qcom-drivers-for-7.3-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into soc/drivers

More Qualcomm driver updates for v7.3

Add SMEM parsing for DDR configuration data and use its highest bank
address bit to select the appropriate UBWC configuration.

Enable generic PAS trusted-zone APIs for the Iris and Venus media drivers.

Fix SCM probe retry state, reserved-memory cleanup, and an early IRQ-handler
NULL dereference. Enable QSEECOM EFI variable access on the Asus Zenbook A16.

Correct GENI firmware-size validation using the hardware CFG RAM depth and
correct the PMIC GLINK Thunderbolt extradata layout.

Document the Nord AOSS side channel and the IMEM minidump SRAM property.
Clean up Qualcomm statistics macros and the WCNSS binding schema.

* tag 'qcom-drivers-for-7.3-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux:
  media: qcom: Switch to generic PAS TZ APIs
  dt-bindings: soc: qcom,aoss-qmp: Document Nord AOSS side channel
  dt-bindings: sram: qcom,imem: Add minidump-sram pattern property
  soc: qcom: qcom_stats: Replace CLIENT_VOTES_OFFSET macro with sizeof()
  soc: qcom: qcom_stats: Remove unused macro definitions
  soc: qcom: ubwc: Get HBB from SMEM
  soc: qcom: smem: Expose DDR data from SMEM
  soc: qcom: smem: Use 'unsigned int' instead of 'unsigned'
  firmware: qcom: scm: Fix tzmem state on probe retry
  firmware: qcom: scm: Fix reserved memory cleanup on probe failure
  firmware: qcom: scm: Fix NULL dereference in IRQ handler before __scm is published
  firmware: qcom: scm: Allow QSEECOM on Asus Zenbook A16 (UX3607OA)
  soc: qcom: geni-se: Use HW PROG_RAM_DEPTH to validate firmware size
  soc: qcom: pmic_glink_altmode: Define the TBT extradata properly
  dt-bindings: soc: qcom,wcnss: Drop redundant $ref of firmware-name property

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 10:00:21 +02:00
Andrew Jones
5a9e89ea34 iommu/dma: Restore locking around msi_page_list
Unlike a group's default domain, which is always freshly allocated
and privately owned (iommu_group_alloc_default_domain()), VFIO type1's
legacy container merges any newly attached group into an existing
domain whenever their iommu_ops and cache-coherency enforcement match.

iommu_dma_get_msi_page() only asserts the caller's own group mutex is
held (iommu_group_mutex_assert()). On an IOMMU that publishes
IOMMU_RESV_SW_MSI, e.g. ARM SMMU, a VM with two such devices assigned
through the legacy container can have their guest drivers probe and
allocate MSIs in parallel; each host-side VFIO_DEVICE_SET_IRQS lands
on a different device fd and group mutex, but both devices' domains
are the same merged domain, so both can enter
iommu_dma_get_msi_page() concurrently and corrupt msi_page_list.

commit 288683c92b ("iommu: Make iommu_dma_prepare_msi() into a
generic operation") dropped the prior msi_prepare_lock on the
reasoning that "each iommu_domain is unique to a group," which holds
for default domains but not this VFIO type1 case. Restore the static
lock, since it's only guarding a corner case and will likely never
be contended.

iommufd avoids the equivalent problem by having its own callers
(iommufd_sw_map_msi()) take a ctx-wide sw_msi_lock before ever
reaching the shared list. VFIO type1 can't mirror that since it
dispatches to iommu_dma_sw_msi() which is outside VFIO's jurisdiction.

Fixes: 288683c92b ("iommu: Make iommu_dma_prepare_msi() into a generic operation")
Signed-off-by: Andrew Jones <andrew.jones@oss.qualcomm.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 09:56:46 +02:00
Arnd Bergmann
421762c6bb Drop unused assignment of platform_device_id driver data
-----BEGIN PGP SIGNATURE-----
 
 iQJUBAABCgA+FiEE0qerISgy2SKkqO79Wr/6JGat8H4FAmp0iJ4gHGplbnMud2lr
 bGFuZGVyQG9zcy5xdWFsY29tbS5jb20ACgkQWr/6JGat8H5g/w//YPqPqopvxiOs
 UaaQgfLLW7EwGWujuqaAgt/z0NqaEuFQja1IE0Ng+IQ9JMMZarpMywfy84iEAn/q
 Vla1WuwB/TySpJIh8i2tbhwDBLtiBXQUtVVd1Sc7WYEH7R4ncowbQH66I1o9t2LP
 lG4odLYWVvZmI5V61b/RoYRbfNeUAvzZN4RPzqm5dckgExFT8hCVDP8x8coqH21V
 yEVcYTLBFly4z1eIH+NofhqfqHOk5g4ffo0VbZYYsJsVi1J5OnpVvDZAOMJeEcBy
 gTJJgpnSSqe3Ey/u4iMZE+VcwghZkNNUFrsqB8eMLXZzrNtlIDxYUw2D28Nw2k3C
 IkdazfRiwtgRmApWoQatMNWWRhHLIh86NNqlw140K4BOJ/sm3zLPrV2WQAPNtEpH
 RSJ73bwF341nz4Wag6m+w/BjP0H+jQZpnwpds7+BUUx6/YM85BSsWHzqNka15k5G
 oQEVDg911X+/wN/o3/pK6MP1BcUSywAeJ8+ZQeLrB2U41D4GHBey30kgKIlY/q2O
 cLlVyzcjV58yNuNwHtxVxBcrIrVv+Ftwo1QBVNDwN+ZNX9B21atrwmpybM+X02vc
 9lT3PmQwz2Vy60Ab5WIUyKCXW40+b6tUrxMN18WJQV3/xURlmrASmHuz/POAEXL3
 PE0GDBo88QxIaj52Y1m1EPuVdSaRKt8=
 =FsGK
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5hBYACgkQmmx57+YA
 GNmGoQ/+I/iyvpvz2xWbb4XW6vQ5VPJhHqmZqM8/vi7/YyJbCM9EQwfd6CBnpePy
 VoocWBkVmBkZmCD2iPPRWOmRNZyIBGaUSEXW6yD6vSXYZRo7uafkk01TH7Y3GDbZ
 T3b0w37507Psmg2LoZORo832x7Haptb/nsD4TjKiFYyMx0usX8hYnxPrCo0gLfED
 4TMFcyYrWTHaF0uJV6SfjxyaPZlulc2duuDHO/bxemY0nsRFve2NB+gsvtOOARR4
 fZv5tQ02YrTiYdQxUUZhd8XX0wYrpvzF/nKqxfhuIB2PCq7uaMtQJI0vFvN4OeeV
 o+tYlEjk4verOskmmtHsBdlUW7nK0tsbHAFLjf0gXpJh5a2faDiNePKyRkk+o/A5
 hkeQW5n2GJuJcnmHe4bjPbDp/OVyOjfsNRUogHBSSJnlq5k+YvIpLefr1kQyBvgb
 GFCZC6wu9vCnptEnpqNYGnpNHjmzzH8XQPPNMlj8wRPAkrw2+e8JCsO5E0zAHJbd
 E4q1yU/cOoFGvengVkiNfeVx4GoZYnO5J+YRc2iRfT9HhbJ/rCEuQ6XKSnWiVB+s
 vGMcftTclk0jQDjV2AxhcJ8diP3I253r+apmx2dzXPk9+dQ1TrtGskntztrZehNM
 Y3RzPkc7F1d3VSOotU87tsxL9Ani05W7RNmoeWbzkHsnR/MLpPk=
 =w2UL
 -----END PGP SIGNATURE-----

Merge tag 'qcomtee-for-v7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee into soc/drivers

Drop unused assignment of platform_device_id driver data

* tag 'qcomtee-for-v7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee:
  tee: qcomtee: Drop unused assignment of platform_device_id driver data

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 09:54:30 +02:00
Shuai Xue
41cdc2a3d4 iommupt: Return zero for invalid iova_to_phys() ranges
DOMAIN_NS(iova_to_phys) returns a phys_addr_t and follows the IOMMU
iova_to_phys() convention of returning 0 when there is no valid
translation.

make_range() returns a negative errno if the input IOVA cannot be
represented by this page table format. Returning that errno directly
casts it to phys_addr_t. Callers treat zero as no translation and use
non-zero values as physical addresses, so this can make them consume a
bogus physical address instead of seeing a failed translation.

Match the page-table walk failure path and return 0 for range validation
failures too.

Fixes: 9d4c274cd7 ("iommupt: Add iova_to_phys op")
Cc: stable@vger.kernel.org
Assisted-by: Qoder:Qwen-3.8-MAX-Preview
Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 09:51:52 +02:00
Shuai Xue
4ac2ce1238 iommufd: Release current IOAS on xa_store() failure
iommufd_take_all_iova_rwsem() takes an object reference and the
iova_rwsem write lock before storing the IOAS in the temporary ioas_list
xarray.

If xa_store() fails, the current IOAS has not been inserted into
ioas_list yet. iommufd_release_all_iova_rwsem() only unwinds IOAS
objects already present in that xarray, so it cannot release the current
IOAS.

Release the current IOAS rwsem and object reference before unwinding the
previously stored entries.

Fixes: 051ae5aa73 ("iommufd: Lock all IOAS objects")
Cc: stable@vger.kernel.org
Assisted-by: Qoder:Qwen-3.8-MAX-Preview
Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 09:51:52 +02:00
Shuai Xue
0dbcdf4473 iommufd: Avoid locking internal accesses during unmap
iommufd_access_notify_unmap() skips internal accesses because they do
not have an external unmap callback to invoke.

However, the current test calls iommufd_lock_obj() before checking
whether the access is internal. If iommufd_lock_obj() succeeds, the loop
then sees the internal access and continues, bypassing the matching
iommufd_put_object() used by the normal unmap path. This leaks the
object reference taken by iommufd_lock_obj().

Check for internal accesses first so skipped entries are never locked.

Fixes: 27b77ea5fe ("iommufd/access: Bypass access->ops->unmap for internal use")
Cc: stable@vger.kernel.org
Assisted-by: Qoder:Qwen-3.8-MAX-Preview
Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 09:51:51 +02:00
Shuai Xue
530f8f9c35 iommu/sva: Set handle->dev before the SVA handle is visible
iommu_attach_device_pasid() installs the new SVA attach handle in the
group PASID lookup before iommu_sva_bind_device() returns. A concurrent
bind can therefore find and reuse the same handle after iommu_sva_lock is
dropped.

handle->dev was initialized after dropping iommu_sva_lock. This leaves a
window where a racing bind can return a handle whose dev pointer is still
NULL. A subsequent iommu_sva_unbind_device() can then dereference it via
handle->dev->iommu_group.

Initialize handle->dev before releasing iommu_sva_lock so any visible SVA
handle is fully initialized.

Fixes: be51b1d6bb ("iommu/sva: Refactoring iommu_sva_bind/unbind_device()")
Cc: stable@vger.kernel.org
Assisted-by: Qoder:Qwen-3.8-MAX-Preview
Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2026-08-10 09:51:51 +02:00
Arnd Bergmann
253ea5efea TI SoC driver updates for v7.3
Minor bug fixes and cleanups across TI SoC and firmware drivers:
 
 - firmware: ti_sci: Fix a resource leak by undoing list publication when
   device populate fails, ensuring proper cleanup on error paths
 - soc: ti: knav_qmss: Remove debugfs file on teardown to avoid stale
   entries and potential use-after-free scenarios
 - soc: ti: wkup_m3_ipc: Remove redundant dev_err() call to avoid
   duplicate error reporting
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEE+KKGk1TrgjIXoxo03bWEnRc2JJ0FAmpzR+4ACgkQ3bWEnRc2
 JJ3b8A//cpKS/kqdJoiyXqYz0sSsSw3vviZzUMFLL4qZAUiA/FIAH+2vy6+7ytv+
 4PtwR3fGLBu2q5u+21t19lSnzIVi1R2mneYs+GlY+/0nXBvaW46TJzY0fgFcXYJX
 7A2+5M2pMUXSIe0okMgAU5RqasLFMiOGXE5ZLI3Kzw88IR4WH4nna8Y5T/GqIx2Y
 KCBhFY9sERM64M25r6L0Iyjf4WkGFYIUL7f5d96104XKvwiet1xEWbJOwosaI/hk
 QSnQWvrZ6kZyKgvlPdZbdEdkiryU8Ec3D3fDU4I9HYVivi8E67I1C2KjkvmwUz/+
 HvfMfQYlSj8vIadJiLl0/zfb2AB0PU0uPEjyY7sM9QV/f5VDNbpiu3RkueSW6l2I
 omNLOfn9zM4GVR538ZU1581QlP0UI2InvVHeQ1xl8dDzYMrmVwOl6+MpEtPVIyMw
 m/HmjZK9g0M2t7I0qKcvIBuTeLZihzxccCFfcENseVGcFMcpb8lb8w5Z5mkVB+Nc
 8GpF3KKdEf6G6vTTwJCaK6DXqrhjaJvi1A9Dp0gwYLgIwpF77SsgIOLvGLAyKYYs
 opXX/e/cOQ2L7FdDtEiaojbmUaqEQ79Tf7MdlEBNrLv/N9AhptM3u7uTXKbFjQbP
 8dYuBfmMmbA4MW4+BhO+TDdae/peeOfoesdz0iJlsHGqg8GUauk=
 =miKf
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5glIACgkQmmx57+YA
 GNljDg/+OyNv2K+6vxK4/SZg6bDNZ2p6qSeVuY8tuluX8Uc/K5k54ubamdPgCyDB
 SNIPVbxq0vfVguEFtYXhJNI7qnx6k66kF6q6XGm8FLJDyViD5QeD3ZgnVOp0dWGd
 CVhxoCXBNhyjwj/hiNR6yBePpMCcBw1D5MtJrrusEooS1K5Xuo1vW8ovXzER2WKG
 No1raMpx0f5RK13STnz4LnUKtMkHstDO5dktRmBz5Y372tM/Pw3CsbbRENIrreQJ
 y57pGJ1Y5EQ99KkJhUpltg6+1xIsOexhJ1mbxInnqPNPQ8ogVh/EcmodZYtz0pBs
 yq1Lm2gR2layXL7IuUBO9JFVVRRjeT0nvDgXzoBN4kk6grhkYtBb07+NwrDnamaw
 9sND7YodKjqe690x67iF3HOctemcefcuDAGlIdThi15SEiEMofepZFeAR2MpjzFP
 4aJVc4HWPKqaPc7Gu7WngzcvpxGXG/I0lF+JZRzvdDbllkPx/YagydbkFyU5yT5C
 74KTgBsjZ0yhgSZM/6HEKwBTDLVmHBOUoG7X0XPRNGz5Ev9ZMhiyCQ9Ka83MdkBA
 P00dbXsCie7zQKFeIhi2bIhMfmguWi9VmaB2rVnFyPx2RnVCT8cr1RIb748fQwsO
 /OoilmarEDVpbDBRH1krTjKNPpZwg2+9/s59g0LSNi1+gCY2NiA=
 =SAWu
 -----END PGP SIGNATURE-----

Merge tag 'ti-driver-soc-for-v7.3' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux into soc/drivers

TI SoC driver updates for v7.3

Minor bug fixes and cleanups across TI SoC and firmware drivers:

- firmware: ti_sci: Fix a resource leak by undoing list publication when
  device populate fails, ensuring proper cleanup on error paths
- soc: ti: knav_qmss: Remove debugfs file on teardown to avoid stale
  entries and potential use-after-free scenarios
- soc: ti: wkup_m3_ipc: Remove redundant dev_err() call to avoid
  duplicate error reporting

* tag 'ti-driver-soc-for-v7.3' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux:
  soc: ti: wkup_m3_ipc: Remove redundant dev_err()
  soc: ti: knav_qmss: Remove debugfs file on teardown
  firmware: ti_sci: Undo list publication on populate failure

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 09:48:29 +02:00
Arnd Bergmann
373eab9eec TI K3 defconfig updates for v7.3
Board Specific Features
 AM62L BeagleBadge:
 - Enable drivers for components on BeagleBadge board
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYIAB0WIQRQBrqaOmQ441h4YbUDQj8NV+8d1wUCanF4ZQAKCRADQj8NV+8d
 11MYAQCSy2EJiWoIteJuV1YVglU7vSv9ly30bnZwqBDB7cat4QEAqhS7p3IcC7ph
 KSHhNNxKy8oxX7lgY6xuYCsgoTR4nQs=
 =TXuU
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5gZUACgkQmmx57+YA
 GNmHxA/+PUxdcMYapVTgwmZRRNRmkJ/AzgYeulxuicrE0FgeD/b20XxFeRT247UF
 SnUvsrX6v4pqlvqX9+XqXlj9nNymE7zzYEU41NHdvGr9RnbB6e8UR7JXbB2xiQ23
 KD0/uYklbP47rrfdmMuq1+ongKNtQr3bTxOTRHtM59lxrLJczXqH311iVuQkdpJQ
 oJ1GnBReRsqGkhS7SBaGTCiVkhPExRKZz0+saEPFsabitlXiIEpZ0eKLQd8b4I3N
 /d0eNPVysvkm+YRUoz99QG349bpa/E1zhSlJH+xHaVPwr3sJ1lbrtnAzIk9fOCGS
 AKhEGZvEysDaldA7nf2P7/ZbaQLTNIYrFT/ShisSooMDDOWGdtz885lEHIw7/gkI
 SyAuggKSUxJAJg8B7qit5C3uL8L1IUHiPHhwlUmFtDZucOJIlhodyxiQeeKE/Fit
 pvtUaXggejr8uyuvTrzLoWlmyLIUmQSCq3Avx0LFNHTdUrfE6OybNo1ORv2ZDBsK
 aSzDNYS4+VDnv3UmVN7ODZOXcwcS5SjtyFYgZcFweSlLPyZBkChNBX7KfiCpr5FF
 me5hrQohnbKg35BaYN39kvo7oxqHlOHUlV4l1yX5zRWsOrG7BmZBOhQAJ2+S3Wnx
 rmnX1a06dyeZpoAiDhfmlZeERn/11hL+FsI6hmte6heeknpJglE=
 =fRTZ
 -----END PGP SIGNATURE-----

Merge tag 'ti-k3-config-for-v7.3' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux into soc/defconfig

TI K3 defconfig updates for v7.3

Board Specific Features
AM62L BeagleBadge:
- Enable drivers for components on BeagleBadge board

* tag 'ti-k3-config-for-v7.3' of https://git.kernel.org/pub/scm/linux/kernel/git/ti/linux:
  arm64: defconfig: Enable drivers for BeagleBadge

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 09:44:40 +02:00
Arnd Bergmann
e36c0670d5 arm64: tegra: Device tree fixes for v7.2
This contains a single fix adding an interrupt to the architected
 timer's device tree node for the EL2 virtual timer. This prevents
 a warning from the driver at boot time.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEiOrDCAFJzPfAjcif3SOs138+s6EFAmpvcnsACgkQ3SOs138+
 s6H0mA/+PLBXfv6YDjYEOvAA/YnX7AqjtdogO6Xi1ghWDWtzt40ZgTYIiFlsYTbH
 W3f/Pzf1wUS7wo4x6kDebPmRgxxrcHcs33AUXQj79GXVVyLVf5NWh8irDrzWCQLb
 VTAtWCnR4PlSUMEDcSDpTqrwMQTy70aQ5A0AOFQSOmPtTsCmB7JW6WvY+iqHjt/m
 bBuDe3aJ5lO5bVqJ8RwXnFmjq4ESWB+DKsveoMcrMvsGhXAuLOLZfuPqsxKZvF3Y
 KIZJ4+zljZdXn7yQZhvqnUbLVYTispfftKHVKnrhcuk6FQBtUidgt7cXu5OyJBKH
 BuskaDbI5U7+E6sgXpWjfAGnDC+wOglK8agDHZm3E6f2nVo9s3j/4WWdzWvAUWah
 2KHWyKo+LH3TuYmxeUCx+UJhh7kBSWQA+yKQIDsEqZ93T3enMaXJmphDM3Z7p8eA
 AMOQCr5jo0SVPZhgGvl2klCX2u7/HsemGnxuhdj7E6e8xyQwI0kIxmlq6NVIQILK
 ysaAZIeLfbiTd/FKqwNXMr6ijJ9H+u0A7jaO2OPACOCs7gVGAjNNl0L+z4CZG/xb
 jkq8k56fhKNw+t2YCYuSYszjBk19cfyilpR2EBNaFcRGp8GIqCYcfMieNhRgAs++
 dCCic9080g+Zz/WFD2zw+hnYu2+0HSqtsamJxj9oYqj/5WjRHn4=
 =GtgQ
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5gAQACgkQmmx57+YA
 GNkfehAAk4obG7FUjOzL/dwLr0wegQfFlGY6BJ7CgJnmhXPcYSv/VVdjC+PIl/LG
 2PSLPOFJRoaGKS1X6u60unMxLxxJSZE3y1raWaBKvOj/5NMtfsLNmCU2Vnrb0dXW
 KG+jgG2z8Ll/+EAHrUa676/janG3PE94djx27jnDEIFWqpx0BDOHkCE7unLZBJtm
 XD3POp6tsbGaIvwQUJT1V607RxBP4jd7MuPtxdCkKY5Q8jpVVC+4nT6qObX3Y/XG
 8uL4RBtWXqq92WP7CkNcNh03WPOGOxu24Vcdyg6bZdyyWp8sop6A6RbX6EUZirTq
 tyERUlREshjJvP0EhXiIhrtqrolSpf8q5yTsduX766J+REST7IeVpS3puyd493cc
 ojYcYU3Lqs+IVBUw8dQzK9JzFkj/jPbK7aDRKmdfYsUvHDhIA+0uCr6STosiNF5C
 LOnt5toOl1hqOrg4S+sECyYO7xU7VcSOhj2yrcVIEm0LtiVfLA09ZeC7zOZqCEFh
 JVtyBdF5yghenZBfOnui8cXlV6BrHVo18uWSnRxwsnu33eaOANdj9agMZxqBts0x
 v4GOaA+cmUTlIpivw52ii71wiKe9b8CdV3il9eGxoRFGqSZT7qkdXUeyYmaZ5can
 r6ra7OPUU0cpJ4CP/szbcofvu2g0gBY+IP3BHpNCxP9wn8uIqe0=
 =R3yw
 -----END PGP SIGNATURE-----

Merge tag 'tegra-for-7.2-arm64-dt-fixes-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into arm/fixes

arm64: tegra: Device tree fixes for v7.2

This contains a single fix adding an interrupt to the architected
timer's device tree node for the EL2 virtual timer. This prevents
a warning from the driver at boot time.

* tag 'tegra-for-7.2-arm64-dt-fixes-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux:
  arm64: tegra: Add EL2 virtual timer interrupt for Tegra194

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 09:38:36 +02:00
Niels Pressel
ada54c2ba6 rseq: Prevent hard lockup on granted time slice extension
__exit_to_user_mode_loop() invokes rseq_grant_timeslice_extension() with
interrupts enabled. If the extension is granted it invokes
hrtimer_rearm_deferred_tif() to ensure that a pending deferred hrtimer
rearm is handled before exiting to user space.

Though this invokes __hrtimer_rearm_deferred() which expects to be invoked
with interrupts disabled as it takes hrtimer_cpu_base::lock with
raw_spin_lock(). That's a livelock waiting to happen and caught by lockdep:

    WARNING: ./include/linux/hrtimer_rearm.h:17 at irqentry_exit, CPU#1: slice_test
    WARNING: inconsistent lock state
    inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage.

Prevent this by disabling interrupts around the invocation of
hrtimer_rearm_deferred_tif() in rseq_grant_timeslice_extension().

[ tglx: Massaged change log ]

Fixes: 15dd3a9488 ("hrtimer: Push reprogramming timers into the interrupt return path")
Signed-off-by: Niels Pressel <npressel@ethz.ch>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Link: https://patch.msgid.link/20260802124423.51616-1-npressel@ethz.ch
2026-08-10 09:37:54 +02:00
Christian Brauner
86bcfe2e37
Merge patch series "fs: don't warn when a mount is completed from another user namespace"
Christian Brauner <brauner@kernel.org> says:

fsopen() records the caller's user namespace in fc->user_ns and hands back
an ordinary file descriptor. The task that calls fsconfig(CMD_CREATE)
doesn't have to be the one that created the context, and mount_capable()
lets it through as long as the caller has CAP_SYS_ADMIN over fc->user_ns,
which anyone in an ancestor namespace does. So fc->user_ns !=
current_user_ns() is something an unprivileged user can arrange.

Both overlayfs and binfmt_misc WARN_ON() that. They're plain WARN_ON()s, so
it can be done in a loop to taint the kernel and flood the log, and it
panics a machine booted with panic_on_warn. Keep refusing the mount, just
stop warning about it. Overlayfs already spells the same check as a plain
error return in ovl_parse_param() for Opt_override_creds.

And add a selftest for both cases.

* patches from https://patch.msgid.link/20260802-work-fill_super-warn-v1-0-4e987911a39a@kernel.org:
  selftests/filesystems: test completing a context from another user namespace
  binfmt_misc: don't warn when the mount is completed from another user namespace
  ovl: don't warn when the mount is completed from another user namespace

Link: https://patch.msgid.link/20260802-work-fill_super-warn-v1-0-4e987911a39a@kernel.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
2026-08-10 09:36:06 +02:00
Christian Brauner
d64ba78b74
selftests/filesystems: test completing a context from another user namespace
fsopen() records the caller's user namespace in fc->user_ns and hands
back an ordinary file descriptor, so the task that issues
FSCONFIG_CMD_CREATE need not be the one that created the context.
mount_capable() authorizes that for a caller holding CAP_SYS_ADMIN in an
ancestor of fc->user_ns, which any unprivileged user has over a user
namespace it just created.

binfmt_misc and overlayfs used to WARN_ON() the mismatch. Add a test for
both. Also cover the handover within one user namespace. That is a
supported thing to do and has to keep working.

Link: https://patch.msgid.link/20260802-work-fill_super-warn-v1-3-4e987911a39a@kernel.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
2026-08-10 09:35:54 +02:00
Christian Brauner
79fdf39f1a
binfmt_misc: don't warn when the mount is completed from another user namespace
fsopen() records the caller's user namespace in fc->user_ns and hands
back an ordinary file descriptor. Nothing ties the task that calls
fsconfig(FSCONFIG_CMD_CREATE) to the task that created the context. The
fd is inherited across fork() and exec() and it can be passed over a
unix socket.

Completing a context from another user namespace is allowed on purpose.
vfs_cmd_create() authorizes the create with mount_capable(), which for
FS_USERNS_MOUNT checks ns_capable(fc->user_ns, CAP_SYS_ADMIN), and that
succeeds for a task holding CAP_SYS_ADMIN in an ancestor of fc->user_ns.
So an unprivileged task can reach the WARN_ON() in bm_fill_super():
create a user and a mount namespace in a child, call
fsopen("binfmt_misc") there, send the fscontext fd to the parent and let
the parent issue FSCONFIG_CMD_CREATE. Both namespaces come from a plain
unshare(1) and no capability is needed anywhere:

  WARNING: fs/binfmt_misc.c:938 at bm_fill_super+0xa2/0xc0 [binfmt_misc]
  CPU: 15 UID: 1000 PID: 3243382 Comm: fswarn
  Call Trace:
   get_tree_keyed+0x7d/0xb0
   bm_get_tree+0x34/0x90 [binfmt_misc]
   vfs_get_tree+0x2a/0x100
   vfs_cmd_create+0x60/0xf0
   __do_sys_fsconfig+0x4b2/0x500

The child needs the mount namespace because fsopen() itself gates on
may_mount(), which asks for CAP_SYS_ADMIN in the user namespace owning
the caller's mount namespace. fsconfig() doesn't repeat that check.

It is a WARN_ON() and not a WARN_ON_ONCE(), so the condition can be
raised in a loop to taint the kernel and flood the log, and it panics a
kernel booted with panic_on_warn.

Keep refusing the mount and stop warning about it. Nothing in
bm_fill_super() depends on the two namespaces matching, it derives
everything from sb->s_user_ns.

Fixes: 21ca59b365 ("binfmt_misc: enable sandboxed mounts")
Cc: stable@vger.kernel.org # v6.7+
Link: https://patch.msgid.link/20260802-work-fill_super-warn-v1-2-4e987911a39a@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
2026-08-10 09:35:54 +02:00
Christian Brauner
63981fc786
ovl: don't warn when the mount is completed from another user namespace
fsopen() records the caller's user namespace in fc->user_ns and hands
back an ordinary file descriptor. Nothing ties the task that calls
fsconfig(FSCONFIG_CMD_CREATE) to the task that created the context. The
fd is inherited across fork() and exec() and it can be passed over a
unix socket.

Completing a context from another user namespace is allowed on purpose.
vfs_cmd_create() authorizes the create with mount_capable(), which for
FS_USERNS_MOUNT checks ns_capable(fc->user_ns, CAP_SYS_ADMIN), and that
succeeds for a task holding CAP_SYS_ADMIN in an ancestor of fc->user_ns.
So an unprivileged task can reach the WARN_ON() in ovl_fill_super():
create a user and a mount namespace in a child, call fsopen("overlay")
there, send the fscontext fd to the parent and let the parent issue
FSCONFIG_CMD_CREATE. Both namespaces come from a plain unshare(1) and no
capability is needed anywhere:

  WARNING: fs/overlayfs/super.c:1551 at ovl_fill_super+0x7b9/0x1e20 [overlay]
  CPU: 3 UID: 1000 PID: 3243376 Comm: fswarn
  Call Trace:
   get_tree_nodev+0x71/0xa0
   ovl_get_tree+0x15/0x20 [overlay]
   vfs_get_tree+0x2a/0x100
   vfs_cmd_create+0x60/0xf0
   __do_sys_fsconfig+0x4b2/0x500

The child needs the mount namespace because fsopen() itself gates on
may_mount(), which asks for CAP_SYS_ADMIN in the user namespace owning
the caller's mount namespace. fsconfig() doesn't repeat that check.

It is a WARN_ON() and not a WARN_ON_ONCE(), so the condition can be
raised in a loop to taint the kernel and flood the log, and it panics a
kernel booted with panic_on_warn.

Keep refusing the mount and stop warning about it. ovl_parse_param()
already spells a user namespace check this way for Opt_override_creds.

Fixes: 1784fbc2ed ("ovl: port to new mount api")
Cc: stable@vger.kernel.org # v6.5+
Link: https://patch.msgid.link/20260802-work-fill_super-warn-v1-1-4e987911a39a@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
2026-08-10 09:35:54 +02:00
Jay Buddhabhatti
0e8860367d firmware: xilinx: Clear firmware notifiers across kexec transitions
During a kexec restart, only the kernel is reloaded but notifier callbacks
in firmware persist, causing state mismatches between kernel and firmware.

To address this, introduce PM_ALL_NOTIFIERS node ID to unregister all
notifier callbacks during kexec. On a graceful kexec restart, this occurs
in zynqmp_firmware_shutdown(). On a crash kernel restart, it happens in
zynqmp_firmware_probe() in the reloaded kernel.

Unregistering all notifiers depends on firmware support for the
PM_ALL_NOTIFIERS node ID. On firmware that does not implement it (the
feature check reports a version below PM_API_VERSION_3) the step is
skipped and a warning such as "Firmware doesn't support unregister all
notifiers at once" is logged, e.g. on Versal NET firmware that predates
this API.

Signed-off-by: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Reviewed-by: Prasanna Kumar T S M <ptsm@linux.microsoft.com>
Link: https://patch.msgid.link/20260729122522.3732875-4-jay.buddhabhatti@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
2026-08-10 09:30:44 +02:00
Jay Buddhabhatti
84dbfa5519 firmware: xilinx: Release all peripheral devices from firmware
During a kexec restart, only the kernel is reloaded while devices
allocated in firmware persist, causing state mismatches between the
kernel and firmware.

Introduce PM_DEV_ALL_PERIPH node ID (0x18224FFFU) to release all
peripheral devices during kexec. On graceful restarts, this happens in
zynqmp_firmware_shutdown(). On crash kernel restarts, it happens in
zynqmp_firmware_probe() of the reloaded kernel.

Releasing all peripherals depends on firmware support for the
PM_DEV_ALL_PERIPH node ID. On firmware that does not implement it (the
feature check reports a version below PM_API_VERSION_3) the release is
skipped and a warning such as "Bulk device release is not supported by
firmware" is logged, e.g. on Versal NET firmware that predates this API.

Signed-off-by: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Reviewed-by: Prasanna Kumar T S M <ptsm@linux.microsoft.com>
Link: https://patch.msgid.link/20260729122522.3732875-3-jay.buddhabhatti@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
2026-08-10 09:30:44 +02:00
Jay Buddhabhatti
00bee072c8 firmware: xilinx: Add support to clear EL3 PM state
Currently, during a kexec restart, only the kernel is reloaded, while
EL3-specific data remain unchanged. This leads to a mismatch between the
kernel state and secure firmware state like SGI number and shutdown scope
variable.

For example, the kernel registers an SGI number with EL3 firmware so that
secure firmware can notify the kernel of events via that SGI. EL3 stores
this SGI number in its internal state. After a kexec, the newly loaded
kernel re-registers and may request a different SGI number, but the stale
value programmed in EL3 remains, so event notifications are delivered on
the old SGI and are missed by the new kernel. The shutdown scope variable
has a similar stale state problem.

To resolve this, the TF_A_CLEAR_PM_STATE PM API is introduced to clear
EL3 PM subsystem state during kexec. On a graceful reboot, this API is
triggered by zynqmp_firmware_shutdown(), while in a crash kernel scenario,
it is invoked by zynqmp_firmware_probe() in the reloaded kernel.

Signed-off-by: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Reviewed-by: Prasanna Kumar T S M <ptsm@linux.microsoft.com>
Link: https://patch.msgid.link/20260729122522.3732875-2-jay.buddhabhatti@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
2026-08-10 09:30:44 +02:00
Jay Buddhabhatti
5b8c4b238b firmware: xilinx: Propagate actual error from feature check
When do_fw_call() fails in __do_feature_check_call(), propagate the
actual errno from zynqmp_pm_ret_code() instead of always returning
-EOPNOTSUPP. This gives callers more precise error information. Existing
callers only test ret < 0 and are unchanged by this.

Signed-off-by: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Reviewed-by: Prasanna Kumar T S M <ptsm@linux.microsoft.com>
Link: https://patch.msgid.link/20260724095352.2890326-3-jay.buddhabhatti@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
2026-08-10 09:30:44 +02:00
Jay Buddhabhatti
1689ca12dd firmware: xilinx: Use TF-A feature check for TF-A-specific APIs
Currently, TF-A-specific APIs are validated using the firmware
PM_FEATURE_CHECK API, even though TF-A provides a dedicated mechanism
via PM_API_FEATURES API. Update the feature check logic for TF-A-specific
API calls to use PM_API_FEATURES. If this check fails, fall back to the
legacy PM_FEATURE_CHECK to support backward compatibility.

Signed-off-by: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Reviewed-by: Prasanna Kumar T S M <ptsm@linux.microsoft.com>
Link: https://patch.msgid.link/20260724095352.2890326-2-jay.buddhabhatti@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
2026-08-10 09:30:44 +02:00
Arnd Bergmann
37397cf956 Apple SoC fixes for 7.2
Just a single commit that fixes the i2c IRQ and MMIO ranges for the M3
 SoC.
 
 Signed-off-by: Sven Peter <sven@kernel.org>
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQS3vz815OHsEaWy0u9EEX0kKnUe6QUCanYCGgAKCRBEEX0kKnUe
 6XCtAQCUJFZiqsus7g3hq7PpUyAmiEWfdOWrC5qnEqbhFiWdGAD+LWxX7b5bIq0M
 es49MlApDpwzaFijCsz4KnNBsqjC1gk=
 =CAwK
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5fEoACgkQmmx57+YA
 GNlk4w/9HEYyM5nLoc5bMWNAdZDzfz8gTnxkSd7ZYhd4SWAdb1p0UlPk1rAyTS00
 +piMiSOSZExH+8gq0+Gbr14Yj7GuXJ32etR+Kmreg+cRYf9TC1tu2DMFxt2IsADn
 rObDHpkzNI3+9eMGQ50hLSo8vGDKmIeczSRy1MhCujYyjH1PLMMqXwZ8+20vWC/q
 xL42k+MHHsYIBO6TuCx79uDfBBOG7yjjq55WXOGq+qTK28PP0fHXdOfo2Ds5Tp7o
 NxhM5BTuwVutjGKcDj/nfRdU+kUDJVZZAXk7BoPZ14wk+7lAnqQpqM9d86dUKvHJ
 meVm+ugtdMyPPeYCvMhDrC1dkXTgyRrkM1GMtXfR/ujR5yAgYQjJmHA2YRhwoLvg
 dX142P8rdSEzexBxxSlxSRI2CtIqQp3oY9ew6XWu7PluNcVJi9jQpuxjoER7hTRZ
 9MjusRYVoirm8h/jub9pZ4YlgCY37PjSslU6aQ5hkZgx9G1UND1hh4bDn/rnUT8m
 fh96aoE7snbN259+ecYtylgOWSRKOeVn6FoeETCu74cDKNHH9C/WyjOU4c0earQn
 CoOT1srhL506u3l4a1+b3CcCWB0XXuPxfQEaRnnj9kyrowNKXWKSEC5u1tEeupgN
 0LJfNHbiBiyqveV3yPAysoaDm5uqV8EDL2Ymnfp9WGC2qYMAoXU=
 =qGIT
 -----END PGP SIGNATURE-----

Merge tag 'apple-soc-fixes-7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/sven/linux into arm/fixes

Apple SoC fixes for 7.2

Just a single commit that fixes the i2c IRQ and MMIO ranges for the M3
SoC.

Signed-off-by: Sven Peter <sven@kernel.org>

* tag 'apple-soc-fixes-7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/sven/linux:
  arm64: dts: apple: t8122: Fix I2C resources

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 09:22:46 +02:00
Arnd Bergmann
42cf613e04 Add NULL check in optee_ffa_lend_protmem()
-----BEGIN PGP SIGNATURE-----
 
 iQJUBAABCgA+FiEE0qerISgy2SKkqO79Wr/6JGat8H4FAmp0gnogHGplbnMud2lr
 bGFuZGVyQG9zcy5xdWFsY29tbS5jb20ACgkQWr/6JGat8H7Jzg/+OoGl3nruLmxm
 6gL5W2gOdceXWNb9t22Q/2edMPphcXhM4y8s0bLGI7ks5WFm9gvRmgI8EZXKMZ2j
 lZ72HfFVpZ4060HhUexGUDcik43e+BRb0MSo7ypaiPYDB7Fsqy/a+Cc93PTRrBWt
 RPBVg3ic++aaHxBWNnjmefUlYaB0oPIXjSPJnqJMvFE4ja7Da3Mz5qHx9my8pORH
 S9nUcj0hajZOPEmL99Lh4Mk3KVJ+txjK9jsPvOUrDH75EySEIUDpo/TS+k8YrPGu
 MpN6J0aRjvH6pQpL58C64+kdz6c5otqBzCyVRsMbp2mIvSIsI6gVY1Akw5vItbCu
 fllq9Kzfb73nLawfkQ5Pqb7DwoQzGGHpFxlmGiTzULN94/T+BXQmiWxqBsxT/VsZ
 BjJkZp+GLuj+SFNfrTr4MTf6N9XPw2fUzWMXx6rV84FJdZ0GVvwCFjMxVJI3/+Dc
 /O/poYq8gRXi+hl8ZhXC5SxFuxJ+iKXIqzvaUA5/Y0jgFIM9UAIObp9e2deflNzj
 yJp4X9uayA2qovAsi+CbX7hpuyX1gYMSuXPyuwyd1tEPlH8uqT14XDpvRrp904t1
 YhUsJ+0Sn3CzqDEo+sGvfD8/mFZdUU0vPph1f2GtBYtXnhiXebtd0rXfBloRLy06
 s/XwFoZY6bxcAinNm/1RaTuEtfJ0i6k=
 =OG13
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmp5e50ACgkQmmx57+YA
 GNmAyxAAjhz/uPuYN0pM9kYbEcQIXSe+nU92UR44dmlfNpjk+1T+SMiDYVpEQazS
 nzN3H1sMIOy1kCiadHclrBARzxlQLDd4TnTq5dFCsT3xxSeEXs2NbrI4XDGrFFsV
 F9hrt7JGDpBcy2E6RBrjFotFytnaJBF7+ON+1+HLpo8tL7UEh5nY+RU6/ANiJb3Q
 7kNKcEhRbYAbbE0dN2AwqdiCm4MIDpCNKzACNTGtslUKIYWvIgrUNU1eNTsoXcAG
 +2WDP7927oJW1jgJ220NLPxFAqMX+i2i213Fd+tiEzBQw6TBxDHN034mYPuzneic
 2eyzR6MJ2r2Sj2HODcyQFR62KGml7VsRs/ZfLZfLT8SBkuMQ1akYt/UYB1r7NluT
 QMJ9TQUoNp3RsvREr35/G6KkKl9HpNm1kGYvuCndupEqmbE7nJdYy+MMI/8VW9tF
 MfTi7sYzY9jXTlT1tib3o2Zi8BIyog/XBcyh4Qz6M/jNsws5W/GUwk4FXFqx8gwQ
 nQaYliDRgw9HDUdw4320+UQRzzME4Oa7VJQngW9zYdQRGBQJ0y81GP15atpBBBc3
 pi/CF343attnY7jfUbzkgexxZCjspt+qXrGAJrj380J0be/6QUXzug6eILo1y4zA
 6srKSyKUqCT/VT4SnF5qYFe4Xn+KgsSrP0LZOkyQD15OgyY4Huc=
 =O+yV
 -----END PGP SIGNATURE-----

Merge tag 'optee-fix-for-v7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee into arm/fixes

Add NULL check in optee_ffa_lend_protmem()

* tag 'optee-fix-for-v7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/jenswi/linux-tee:
  optee: ffa: Add NULL check in optee_ffa_lend_protmem

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-08-10 09:19:09 +02:00
Hongling Zeng
b7eea80be2 xfs: validate attr entry pointer before field access
xfs_attr3_leaf_verify_entry() accesses lentry/rentry fields (namelen,
valuelen) before checking if the entry pointer itself is within bounds.
If nameidx is crafted to point near the end of the buffer, these field
accesses can read out-of-bounds before the bounds check at
name_end > buf_end is performed.

Add explicit bounds checks for entry pointers before accessing their
fields. Use offsetof() to check that the start of the flexible array
member (nameval/name) is within bounds, which ensures all preceding
fields are safe to access.

Fixes: c84760659d ("xfs: check attribute leaf block structure")
Cc: <stable@vger.kernel.org> # v5.5
Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:51:30 +02:00
Hongling Zeng
6e6a314014 xfs: check split_sectors validity before bio_split call
Change the split_sectors check from !split_sectors to split_sectors <= 0
to make the error handling explicit. While bio_split_rw_at() cannot return
a negative error code for the current GC I/O path (GC I/O doesn't use
REQ_ATOMIC/REQ_NOWAIT flags and has proper alignment), making the check
explicit improves code clarity and makes the intent clear.

This also makes the code more robust for future maintenance if different
I/O patterns are introduced.

Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:47:03 +02:00
Hongling Zeng
a94e648f03 xfs: use file target for post-log fsync fallback flush
xfs_file_fsync() has a fallback flush for the case where the log force
was a no-op, for example fdatasync/O_DSYNC writes that do not require
metadata updates. The current fallback path is expressed in terms of the
main data device and explicitly excludes realtime inodes.

Realtime files with a separate realtime device are flushed before the log
force, because their data must reach stable storage before the log commit.
For the internal realtime device used by the zoned allocator, writes are
out-of-place and update inode and bmap metadata from I/O completion, so
the overwrite-without-metadata-update case does not apply in the same way.

Even so, the current fallback condition is inconsistent because it is
expressed as "non-realtime inode on the main data device" rather than in
terms of the inode's actual file data target.

Use xfs_inode_buftarg() to obtain the target that stores this file's
data, and issue the fallback flush when the log force did not flush
anything and the log target is the same as that file target.

This preserves existing behavior for regular files while making the
fallback logic consistent for files whose data target is selected by the
inode.

Fixes: bdc03eb5f9 ("xfs: allow internal RT devices for zoned mode")
Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Suggested-by: Christoph Hellwig <hch@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:45:28 +02:00
Yun Zhou
0241ea5fb0 xfs: restore nofs context unconditionally in xfs_trans_roll
When __xfs_trans_commit() fails in xfs_trans_roll(), the NOFS context
is cleared but only restored in the success path.  This leaves the
error path without nofs protection, causing a circular lock dependency
between xfs_nondir_ilock_class and fs_reclaim:

       CPU0                    CPU1
       ----                    ----
  lock(&xfs_nondir_ilock_class);
                               lock(fs_reclaim);
                               lock(&xfs_nondir_ilock_class);
  lock(fs_reclaim);

Fix this by moving xfs_trans_set_context() before the error check so
that nofs context is always restored on the new transaction.

Reported-by: syzbot+59178abfeb0ea3f0ab20@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=59178abfeb0ea3f0ab20
Fixes: a1ca658d64 ("xfs: fix incorrect context handling in xfs_trans_roll")
Cc: stable@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Yun Zhou <yun.zhou@windriver.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:43:56 +02:00
Christoph Hellwig
00f40876f4 xfs: add lockless xfs_buf_readahead_map fast path
Readahead currently always locks the buffer, which can cause contention
with actual users of the buffer.  Add a fast path without taking any
locks if the buffer is uptodate and not stale.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:44 +02:00
Christoph Hellwig
2aedf844be xfs: move buffer locking out of xfs_find_get_buf
To prepare for buffer loookups that don't lock the buffer, move the
call to xfs_buf_find_lock from xfs_find_get_buf to its callers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
21cc7775ee xfs: merge xfs_buf_reverify into xfs_buf_read_map
xfs_buf_read_map is the only caller of xfs_buf_reverify that is left.
Merge it into that so that the comments can be moved closer to the
logic, and redundant asserts can be removed.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
819f1cc98a xfs: use goto based error unwinding in xfs_buf_read_map
This keeps the I/O error handling contained at the end of the function
and removes the indentation for it.  It also allows to reorder the
comments so that they are closer to the logic that they describe.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
3d10272743 xfs: don't reverify buffers in xfs_buf_readahead_map
xfs_buf_read_map calls xfs_buf_reverify to ensure the verifier has run
for a buffer before the data can be used when an earlier readahead read
the data before the buf_ops were assigned.

There is no point in doing this in xfs_buf_readahead_map for a buffer
already in memory as a later xfs_buf_read will do the same and can
actually propagate the error to the caller.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
b15f6520ab xfs: use WRITE_ONCE to update b_flags
Prepare for limited lockless reading of flags by using WRITE_ONCE to
prevent the compiler from doing non-standard read-modify-write
operations.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
9f224de410 xfs: hide b_flags manipulation from code outside of xfs_buf.c
Add helpers for the remaining buffer flags manipulation not done in the
core buffer cache code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
d80fe85bb2 xfs: remove _XBF_LOGRECOVERY
Adding _XBF_LOGRECOVERY to every buffer write from log recovery is error
prone.  Instead key off the behavior on log recovery being active with
indirecting that through a flag.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
7a4eae80b5 xfs: remove spurious XBF_DONE clearing on readahead validation failure
Both callers of ->verify_read already do this, so don't duplicate the
flag manipulation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
b6ba780af0 xfs: split out a lower-level xfs_buf_get_map helper from xfs_find_get_buf
xfs_buf_get_map is currently reused to implement xfs_buf_read_map and
xfs_buf_readahead_map.  This causes double accounting of buf_get stat
and leads to some ugly overload of the flags.

Split out a slightly lower-level xfs_find_get_buf helper and use that to
implement xfs_buf_get_map, xfs_buf_read_map and xfs_buf_readahead_map.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
568c8798a3 xfs: consolidate buffer locking in xfs_buf_get_map
Consolidate the code to lock the buffer based on the passed in flags
into xfs_buf_get_map instead of having two different sites for buffer
lookup vs insertation.  This requires initializing b_lock to unlocked on
allocation and doing an atomic for locking it for newly allocated buffers,
but greatly simplifies the logic.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Christoph Hellwig
45fd506c33 xfs: don't get a pag reference in xfs_buf_get_map
As of commit 497560b9ef ("xfs: switch (back) to a per-buftarg buffer
hash"), buffer lookups don't require the perag structure.  Stop looking
it up in xfs_buf_get_map, and instead only find it when allocating a new
buffer.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2026-08-10 08:34:43 +02:00
Karl Mehltretter
39dd7598fb fbdev: clps711x-fb: Remove unreachable unregister_framebuffer() call
The unregister_framebuffer() call in clps711x_fb_probe() is unreachable.
register_framebuffer() failure jumps to the unwind label, while success
returns immediately.

Remove it.

Found with Clang's -Wunreachable-code.

Fixes: 36462ac193 ("fbdev: clps711x-fb: Replace check_fb in favor of struct fb_info.lcd_dev")
Assisted-by: Claude:claude-fable-5
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-08-10 08:13:26 +02:00
Helge Deller
4c1977df69 fbdev: mb862xxfb: Silence possibly unused functions
When CONFIG_PCI=n, the kernel test robot reports that on powerpc some
functions and variables may possibly be unused. Silence those warnings.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202608081537.o23Goj8d-lkp@intel.com/
Signed-off-by: Helge Deller <deller@gmx.de>
2026-08-10 08:13:26 +02:00
Helge Deller
de508ece1d sticon/parisc: Detect default STI graphics card for console output
If a machine has multiple graphic cards, detect the graphic card which is used
to display firmware messages and use that one as the default graphic card for
sticon and fbcon.

On parisc machines the default graphic card used for BCH (boot console
handler, aka BIOS menu) is stored in the stable storage (equivalent to CMOS
storage on x86) or in the console path in page zero. Extract that path and
store it as default STI path for later comparism. Take care that the graphic
card can be a GSC or a PCI card which use different path strings.

Increase max string size for default_sti_path to 32 chars as the
print_pa_hwpath() function formats a hardware path using unbounded sprintf
calls for up to 6 bus converter components and 1 module component (e.g.,
255/255/...), which can produce a string up to 28 bytes long.

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org
2026-08-10 08:13:26 +02:00
Hui Su
9ad709afdf fbdev: ssd1307fb: defer I2C transfers from damage callbacks
The fbdev damage callbacks may run from fbcon while printk has disabled
preemption.  They currently update the display synchronously, which enters
the sleeping I2C transfer path from atomic context.

A complete report from an RK3566 system follows:

  [  258.129004] watchdog: watchdog0: watchdog did not stop!
  [  258.129067] BUG: scheduling while atomic: systemd/1/0x00000003
  [  258.129076] Modules linked in: algif_hash algif_skcipher af_alg bnep
  binfmt_misc lz4hc lz4 zram snd_soc_hdmi_codec brcmfmac_wcc hci_uart
  fb_ssd1306(C) fbtft(C) btqca btrtl btintel btsdio snd_soc_simple_card
  motorcomm pwm_fan snd_soc_simple_card_utils ssd130x_spi nls_iso8859_1
  ssd130x btbcm drm_shmem_helper display_connector brcmfmac ssd1307fb
  brcmutil bluetooth cfg80211 rfkill snd_soc_rockchip_i2s_tdm
  snd_soc_rk817 hantro_vpu snd_soc_core snd_compress snd_pcm_dmaengine
  v4l2_vp9 snd_pcm v4l2_h264 rockchip_rga snd_timer rk_crypto2
  spi_rockchip_sfc videobuf2_dma_contig snd sm3_generic v4l2_mem2mem
  videobuf2_dma_sg dwmac_rk sm3 soundcore videobuf2_memops videobuf2_v4l2
  stmmac_platform dw_hdmi_cec videodev videobuf2_common dw_hdmi_i2s_audio
  stmmac rk817_charger pcs_xpcs mc cpufreq_dt sch_fq_codel ip_tables
  x_tables autofs4
  [  258.129215] Preemption disabled at:
  [  258.129216] [<ffff80008012f96c>] vprintk_emit+0x11c/0x340
  [  258.129234] CPU: 0 PID: 1 Comm: systemd Tainted: G         C
  6.6.0-rc5-rockchip-rk356x #4
  [  258.129239] Hardware name: Rockchip RK3566 OPi 3B (DT)
  [  258.129243] Call trace:
  [  258.129245]  dump_backtrace+0xa0/0x128
  [  258.129252]  show_stack+0x20/0x38
  [  258.129256]  dump_stack_lvl+0x60/0xb0
  [  258.129265]  dump_stack+0x18/0x28
  [  258.129269]  __schedule_bug+0xa0/0xc8
  [  258.129274]  __schedule+0x9ac/0xd30
  [  258.129279]  schedule+0x60/0x100
  [  258.129282]  schedule_timeout+0x194/0x338
  [  258.129289]  rk3x_i2c_xfer_common.isra.0+0x384/0x498
  [  258.129296]  rk3x_i2c_xfer+0x20/0x60
  [  258.129300]  __i2c_transfer+0x194/0x648
  [  258.129308]  i2c_transfer+0x9c/0x130
  [  258.129313]  i2c_transfer_buffer_flags+0x64/0x98
  [  258.129318]  ssd1307fb_update_rect+0x42c/0x560 [ssd1307fb]
  [  258.129334]  ssd1307fb_defio_imageblit+0x34/0x50 [ssd1307fb]
  [  258.129343]  soft_cursor+0x13c/0x210
  [  258.129350]  bit_cursor+0x2dc/0x550
  [  258.129354]  fbcon_cursor+0xec/0x108
  [  258.129359]  hide_cursor+0x44/0xc8
  [  258.129365]  vt_console_print+0x398/0x3b0
  [  258.129370]  console_flush_all.isra.0+0x17c/0x410
  [  258.129377]  console_unlock+0x4c/0x100
  [  258.129382]  vprintk_emit+0x1c8/0x340
  [  258.129386]  vprintk_default+0x40/0x58
  [  258.129389]  vprintk+0xb8/0xd0
  [  258.129392]  _printk+0x68/0x98
  [  258.129398]  watchdog_release+0x170/0x230
  [  258.129404]  __fput+0xbc/0x288
  [  258.129409]  __fput_sync+0x58/0x70
  [  258.129413]  __arm64_sys_close+0x40/0x90
  [  258.129419]  invoke_syscall+0x4c/0x118
  [  258.129426]  el0_svc_common.constprop.0+0x48/0xf0
  [  258.129432]  do_el0_svc+0x24/0x38
  [  258.129437]  el0_svc+0x48/0x100
  [  258.129443]  el0t_64_sync_handler+0xc0/0xc8
  [  258.129448]  el0t_64_sync+0x190/0x198
  [  258.573087] ------------[ cut here ]------------
  [  258.573098] DEBUG_LOCKS_WARN_ON(val > preempt_count())
  [  258.573111] WARNING: CPU: 0 PID: 1 at kernel/sched/core.c:5871
  preempt_count_sub+0x9c/0x148
  [  258.573130] Modules linked in: algif_hash algif_skcipher af_alg bnep
  binfmt_misc lz4hc lz4 zram snd_soc_hdmi_codec brcmfmac_wcc hci_uart
  fb_ssd1306(C) fbtft(C) btqca btrtl btintel btsdio snd_soc_simple_card
  motorcomm pwm_fan snd_soc_simple_card_utils ssd130x_spi nls_iso8859_1
  ssd130x btbcm drm_shmem_helper display_connector brcmfmac ssd1307fb
  brcmutil bluetooth cfg80211 rfkill snd_soc_rockchip_i2s_tdm
  snd_soc_rk817 hantro_vpu snd_soc_core snd_compress snd_pcm_dmaengine
  v4l2_vp9 snd_pcm v4l2_h264 rockchip_rga snd_timer rk_crypto2
  spi_rockchip_sfc videobuf2_dma_contig snd sm3_generic v4l2_mem2mem
  videobuf2_dma_sg dwmac_rk sm3 soundcore videobuf2_memops videobuf2_v4l2
  stmmac_platform dw_hdmi_cec videodev videobuf2_common dw_hdmi_i2s_audio
  stmmac rk817_charger pcs_xpcs mc cpufreq_dt sch_fq_codel ip_tables
  x_tables autofs4
  [  258.573268] CPU: 0 PID: 1 Comm: systemd Tainted: G        WC
  6.6.0-rc5-rockchip-rk356x #4
  [  258.573274] Hardware name: Rockchip RK3566 OPi 3B (DT)
  ** 37 printk messages dropped **
  [  258.574064] Preemption disabled at:
  ** 42 printk messages dropped **
  [  259.190237] Preemption disabled at:

Track damage in the driver's private data under a spinlock and merge
multiple updates into a bounding rectangle.  Queue the existing
deferred-I/O work immediately for damage reported by fbdev drawing and
write helpers, so allocation and I2C transfers run from process context
without adding the configured mmap refresh delay.  Keep full-screen
updates for dirty mmap pages, for which no precise rectangle is available.

Tested on an RK3566 board with a 128x64 OLED by running five rounds of 250
KERN_EMERG messages in total while issuing framebuffer writes every 15 ms.
No atomic-sleep, preemption, or lockdep warning occurred.  Kprobe tracing
also confirmed that cursor-only damage remained an 8x16 partial update.

Fixes: a2ed00da50 ("drivers/video: add support for the Solomon SSD1307 OLED Controller")
Cc: stable@vger.kernel.org
Signed-off-by: Hui Su <sh_def@163.com>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-08-10 08:13:26 +02:00
Julia Lawall
49e4950e17 fbdev: au1100fb: drop unneeded semicolon
When a function-like macro expands to an expression, that expression
doesn't need a semicolon after it.  All uses have been verified to
have their own semicolons.

This was found using the following Coccinelle semantic patch:

@r@
identifier i : script:ocaml() { String.lowercase_ascii i = i };
expression e;
@@

*#define i(...) e;

Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-08-10 08:13:26 +02:00
Daniel Palmer
0fc41be57d fbdev: tdfxfb: Program the initial video mode
If the card does not get bound to by fbcon set_par() never happens
and the initial video mode is not setup and the display detects
no signal.

Program the video mode and also clear the framebuffer memory so
random garbage isn't displayed.

Signed-off-by: Daniel Palmer <daniel@0x0f.com>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-08-10 08:13:26 +02:00
Daniel Palmer
edfbc5d2ad fbdev: tdfxfb: Wake the VGA core before programming the CRTC
If the card was unbooted the VGA core needs to be woken up before
poking at it.

Signed-off-by: Daniel Palmer <daniel@0x0f.com>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-08-10 08:13:26 +02:00