Commit graph

1,461,726 commits

Author SHA1 Message Date
Jeremy Kerr
881a3113b7 net: mctp: usb: don't fail mctp_usb_rx_queue on a deferred submission
In the ndo_open path, a deferred queue open will report a failure, and
so the netdev will not be ndo_stop()ed, leaving us with the rx_retry
work potentially pending.

Don't report a deferred queue as an error, as we are still operational.
This means we use the ndo_stop() path for future cleanup, which handles
rx_retry_work cancellation.

Fixes: 0791c0327a ("net: mctp: Add MCTP USB transport driver")
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
Link: https://patch.msgid.link/20260608-dev-mctp-usb-rx-requeue-v2-2-29a3aa507609@codeconstruct.com.au
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 15:23:13 +02:00
Jeremy Kerr
54665dce98 net: mctp: usb: fix race between urb completion and rx_retry cancellation
It's possible that sequencing between setting ->stopped and cancelling
the rx_retry work (in ndo_stop) could leave us with an urb queued:

    T1: ndo_stop                  T2: rx_retry_work
    ------------                  ----------------
                                  LD: ->stopped => false
    ST: ->stopped <= true
    usb_kill_urb()
                                  mctp_usb_rx_queue()
                                    usb_submit_urb()
    cancel_delayed_work_sync()

That urb completion can then re-schedule rx_retry_work.

Strenghen the sequencing between the stop (preventing another requeue)
and the cancel by updating both atomically under a new rx lock. After
setting ->rx_stopped, and cancelling pending work, we know that the
requeue cannot occur, so all that's left is killing any pending urb.

Fixes: 0791c0327a ("net: mctp: Add MCTP USB transport driver")
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
Link: https://patch.msgid.link/20260608-dev-mctp-usb-rx-requeue-v2-1-29a3aa507609@codeconstruct.com.au
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 15:23:13 +02:00
Minxi Hou
9415471e01 selftests/net/openvswitch: guard command substitutions against empty output
When ip-link output is unavailable, when the upcall daemon log has not
been written yet, or when pahole does not know the OVS drop subsystem
ID, the affected command substitutions silently produce empty strings.
The caller then passes empty sha= or pid= arguments to ovs_add_flow,
or matches against wrong drop reason codes, all without a diagnostic.

Add [ -z ] guards immediately after each assignment. For test_arp_ping,
also align the MAC extraction to use awk '/link\/ether/' as in
test_pop_vlan. The drop_reason guard returns ksft_skip because an
absent subsystem ID is an environment issue, not a test failure.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Reviewed-by: Aaron Conole <aconole@redhat.com>
Link: https://patch.msgid.link/20260604163016.3929371-1-houminxi@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 15:17:51 +02:00
Namjae Jeon
5aec1efb11 ntfs: use direct pointer for inline data to avoid redundant allocation
Previously, NTFS used page allocation for IOMAP_INLINE to ensure that
the inline_data pointer was page-aligned, avoiding strict boundary checks
in the iomap core. Since the previous patch has removed the over-strict
PAGE_SIZE boundary check in iomap, NTFS can now safely point
iomap::inline_data directly to the MFT record.
This change eliminates redundant memory allocations and memcpy operations
in both read and write paths. It also simplifies the iomap_ops by removing
the need for a iomap_end callback that was previously used to free
the temporary page.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-06-09 21:51:02 +09:00
DaeMyung Kang
fcf5bf0e85 ntfs: validate resident index root values on lookup
Resident $INDEX_ROOT values carry index header fields that callers
consume after lookup. Some callers already validate parts of the layout
before walking entries, but those checks are scattered and do not cover
all root header invariants, such as entries_offset alignment and lower
bound, index_length, and allocated_size consistency.

The resident root resize paths now keep these header fields consistent
while the value size changes: ntfs_ir_truncate() lowers
index.allocated_size before shrinking the resident value, and
ntfs_ir_reparent() grows the resident value before publishing a larger
root header. Lookup-time validation can therefore cover these invariants
without tripping over the driver's own resize paths.

Add $INDEX_ROOT to the minimum resident value size table and validate the
resident index header fields before returning the attribute from lookup.
Require 8-byte aligned index header fields, a sane entries_offset, an
index_length within allocated_size, allocated_size within the resident
value, and enough entry space for at least an index entry header.

The shared validator already rejects non-resident records for
resident-only attribute types, including $INDEX_ROOT.

Cc: stable@vger.kernel.org # v7.1
Signed-off-by: DaeMyung Kang <charsyam@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-06-09 21:51:01 +09:00
DaeMyung Kang
e782ca90ce ntfs: update index root allocated size before shrink
ntfs_ir_truncate() currently shrinks the resident $INDEX_ROOT value first
and only updates index.allocated_size after re-looking up the attribute.
During that relookup, the resident value_length can already be smaller
while index.allocated_size still contains the old larger size.

That leaves a transiently inconsistent $INDEX_ROOT layout and prevents
lookup-time $INDEX_ROOT validation from being enabled: validation can
correctly reject allocated_size extending past the newly shrunk resident
value.

When shrinking, lower index.allocated_size before shrinking value_length.
If the truncate fails, restore the old allocated_size. Keep the existing
grow ordering because the old allocated_size remains within the enlarged
resident value until it is updated after the relookup. The shrink path is
safe because the new value_length still covers struct index_root, so the
index.allocated_size field remains present while it is updated first.

Cc: stable@vger.kernel.org # v7.1
Signed-off-by: DaeMyung Kang <charsyam@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-06-09 21:50:59 +09:00
DaeMyung Kang
0bb508fb3b ntfs: grow index root value before reparent header update
ntfs_ir_reparent() moves the resident index root entries into an index
block and leaves a small root stub containing the child VCN. That root
stub can be larger than the existing resident value. For example, an
empty root with value_length 48 has an index area of 32 bytes, while the
large-index root stub needs index_length and allocated_size of 40 bytes.

The current code publishes the larger index.index_length and
index.allocated_size before resizing the resident value. If the resize
returns -ENOSPC, the recovery path can call ntfs_inode_add_attrlist(),
which looks attributes up again while the root header says
allocated_size 40 but the resident value still only provides 32 bytes of
index area. Lookup-time $INDEX_ROOT validation then correctly rejects
that transient layout as corrupt.

This reproduces as a generic/013 failure under qemu. In the failing run,
the transient root had value_len=48, index_size=32, index_length=40, and
allocated_size=40, and ntfsprogs-plus ntfsck reported "Corrupt index
root in MFT record 1177".

When the root stub grows, resize the resident value before publishing the
larger root header. If the resize fails, the old root remains valid for
recovery lookups. Keep the existing header-before-resize ordering for
shrink or same-size cases so the resident value never temporarily
exposes an allocated_size beyond its bounds.

Cc: stable@vger.kernel.org # v7.1
Signed-off-by: DaeMyung Kang <charsyam@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-06-09 21:50:57 +09:00
DaeMyung Kang
097cdfd0a5 ntfs: reject non-resident records for resident-only attributes
The shared lookup-time attribute validator rejects non-resident
$FILE_NAME and $VOLUME_NAME records because their formats require
resident values and callers handle returned records as resident
attributes. Other resident-only attribute types still pass through the
generic non-resident mapping-pairs checks.

That leaves real resident/non-resident union confusion paths. Inode load
looks up $STANDARD_INFORMATION and then reads data.resident.value_offset
without checking a->non_resident. ntfs_inode_sync_standard_information()
does the same when updating the standard information value.
ntfs_write_volume_flags() also looks up $VOLUME_INFORMATION and reads
data.resident.value_offset directly. $INDEX_ROOT callers in dir.c and
index.c depend on the same lookup contract before consuming the resident
index root value.

Reject non-resident records for all resident-only attribute types in the
shared validator. Keep the existing $FILE_NAME and $VOLUME_NAME behavior,
but factor it through a helper and extend it to
$STANDARD_INFORMATION, $OBJECT_ID, $VOLUME_INFORMATION, $INDEX_ROOT, and
$EA_INFORMATION. For $OBJECT_ID and $EA_INFORMATION this is contract
hardening for resident-only formats; this patch only rejects the
non-resident form and does not add new resident value validation for
those types.

Cc: stable@vger.kernel.org # v7.1
Signed-off-by: DaeMyung Kang <charsyam@gmail.com>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2026-06-09 21:50:55 +09:00
Krzysztof Kozlowski
08fec5b1d3 aspeed: First batch of ARM devicetree changes for v7.2
New platforms:
 
 - Rainiera6 (Meta)
 - SanMiguel (Meta)
 
 Updated platforms:
 
 - Anacapa: SGPIO line names and interrupt configuration
 - Clemente: Remove TMP421 nodes
 - Kommando: Enable networking via MAC2/MDIO2
 - SanMiguel: Line names and interrupt configuration
 
 AST2600 SoC updates:
 
 - Describe PWM/Tach
 - Describe I3C controllers
 - Reorganise I2C nodes
 
 Other notes:
 
 91b9aed738 ("ARM: dts: aspeed-g6: Add nodes for i3c controllers") currently
 causes a new warning:
 
   ... /ahb/apb/bus@1e7a0000/syscon@0: failed to match any schema with compatible: ['aspeed,ast2600-i3c-global', 'syscon']
 
 The patch necessary to address it has an R-b tag from Kryzsztof[2] but as best
 I can tell is yet to be applied to the MFD tree. I've left the change in for now
 as the warning will resolve once the binding patch is applied.
 
 Lastly, as part of improving support for the Kommando card Anirudh has also
 addressed[1] the persistent pain we've had with the phy-mode property for the
 AST2600 MACs. Thanks to Andrew Lunn for being on the case for a while now, and
 for those who tested Anirudh's patch.
 
 [1]: https://lore.kernel.org/all/20260525-asus-kommando-v3-0-e6a0ca1b4a3e@gmail.com/
 [2]: https://lore.kernel.org/all/20260425-poised-accomplished-hyena-d2c1a0@quoll/
 -----BEGIN PGP SIGNATURE-----
 
 iJIEABYKADoWIQSoUT1x3bOSX/nAa8ajM9GZTrjhpgUCah+R1RwcYW5kcmV3QGNv
 ZGVjb25zdHJ1Y3QuY29tLmF1AAoJEKMz0ZlOuOGmREgA/jRNiutECMQIXr4y3K33
 +c4oHhcUvdGb+xgGCsI6aQ/zAQCrmJet9FHLCcNOnklh1Ob+jpl4U+nMow1lzUn/
 2COBCA==
 =eDXl
 -----END PGP SIGNATURE-----

Merge tag 'aspeed-7.2-devicetree-0' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/bmc/linux into soc/dt

aspeed: First batch of ARM devicetree changes for v7.2

New platforms:

- Rainiera6 (Meta)
- SanMiguel (Meta)

Updated platforms:

- Anacapa: SGPIO line names and interrupt configuration
- Clemente: Remove TMP421 nodes
- Kommando: Enable networking via MAC2/MDIO2
- SanMiguel: Line names and interrupt configuration

AST2600 SoC updates:

- Describe PWM/Tach
- Describe I3C controllers
- Reorganise I2C nodes

Other notes:

91b9aed738 ("ARM: dts: aspeed-g6: Add nodes for i3c controllers") currently
causes a new warning:

  ... /ahb/apb/bus@1e7a0000/syscon@0: failed to match any schema with compatible: ['aspeed,ast2600-i3c-global', 'syscon']

The patch necessary to address it has an R-b tag from Kryzsztof[2] but as best
I can tell is yet to be applied to the MFD tree. I've left the change in for now
as the warning will resolve once the binding patch is applied.

Lastly, as part of improving support for the Kommando card Anirudh has also
addressed[1] the persistent pain we've had with the phy-mode property for the
AST2600 MACs. Thanks to Andrew Lunn for being on the case for a while now, and
for those who tested Anirudh's patch.

[1]: https://lore.kernel.org/all/20260525-asus-kommando-v3-0-e6a0ca1b4a3e@gmail.com/
[2]: https://lore.kernel.org/all/20260425-poised-accomplished-hyena-d2c1a0@quoll/

* tag 'aspeed-7.2-devicetree-0' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/bmc/linux:
  ARM: dts: aspeed: sanmiguel: Fix the CPU_CHIPTHROT linename
  ARM: dts: aspeed: sanmiguel: Add IOEXP interrupt pin settings
  ARM: dts: aspeed: clemente: Remove IOB NIC TMP421 nodes
  ARM: dts: aspeed: Enable networking for Asus Kommando IPMI Card
  ARM: dts: aspeed: rainiera6: Add Meta Rainiera6 BMC
  dt-bindings: arm: aspeed: Add Meta Rainiera6 board
  ARM: dts: aspeed: anacapa: Correct SGPIO names for monitoring
  ARM: dts: aspeed: Add Meta SanMiguel BMC
  dt-bindings: arm: aspeed: add Meta SanMiguel BMC
  ARM: dts: aspeed: g6: Add PWM/Tach controller node
  ARM: dts: aspeed: yosemite5: Add MP5998 power monitor
  ARM: dts: aspeed: anacapa: Add interrupt properties for PDB PCA9555
  ARM: dts: aspeed: msx4: enable BMC networking via MAC0
  ARM: dts: aspeed: anacapa: Add JTAG CPLD TRST pin to SGPIO map
  ARM: dts: aspeed-g6: Add nodes for i3c controllers
  ARM: dts: aspeed-g6: move i2c controllers directly into apb node

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 14:17:51 +02:00
Krzysztof Kozlowski
9cf333de20 RISC-V Devicetrees for v7.2
Sophgo:
 
 For CV18xx serials:
 - Add bindings for Milk-V "Duo S" board.
 
 For SG2042:
 - The CPU unit address incorrectly used decimal numbers,
   especially for those nodes which value >= 10. Now
   corrected to use hexadecimal.
 - The MSI controller actually only supports 16 interrupts;
   corrected to match the actual situation.
 - PCIe RCs are cache-coherent with the CPU. Marked it out
   for RC nodes.
 
 For SG2044:
 - The same as SG2042, use hex for CPU unit address.
 
 In additional, update Chen Wang's email address for Sopgho
 SoC maintainer.
 
 Signed-off-by: Chen Wang <unicorn_wang@outlook.com>
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQTYPcWJ6By3aFu8IuKHG95Quc97dgUCah/FnAAKCRCHG95Quc97
 dhWzAQDU0rJDliEvffHvt4MBpMe5MuK5vgwxEun3YPCjCTzkpQEA6HT6IgHjlibB
 SLUn4X8cbJpupgI3czvkxogPNWeZYgE=
 =kAeE
 -----END PGP SIGNATURE-----

Merge tag 'riscv-sophgo-dt-for-v7.2' of https://github.com/sophgo/linux into soc/dt

RISC-V Devicetrees for v7.2

Sophgo:

For CV18xx serials:
- Add bindings for Milk-V "Duo S" board.

For SG2042:
- The CPU unit address incorrectly used decimal numbers,
  especially for those nodes which value >= 10. Now
  corrected to use hexadecimal.
- The MSI controller actually only supports 16 interrupts;
  corrected to match the actual situation.
- PCIe RCs are cache-coherent with the CPU. Marked it out
  for RC nodes.

For SG2044:
- The same as SG2042, use hex for CPU unit address.

In additional, update Chen Wang's email address for Sopgho
SoC maintainer.

Signed-off-by: Chen Wang <unicorn_wang@outlook.com>

* tag 'riscv-sophgo-dt-for-v7.2' of https://github.com/sophgo/linux:
  riscv: dts: sophgo: reduce SG2042 MSI count to 16
  riscv: dts: sophgo: sg2042: use hex for CPU unit address
  riscv: dts: sophgo: sg2044: use hex for CPU unit address
  riscv: dts: sophgo: Add dma-coherent to SG2042 PCIe controllers
  dt-bindings: soc: sophgo: add sg2000 plic and clint documentation
  dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
  MAINTAINERS: update Chen Wang's email address

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 14:15:31 +02:00
Andi Shyti
233644f6d4
Merge remote-tracking branch 'wsa/i2c/fix-registration' into i2c/i2c-host
Merge Johan Hovold's adapter registration fixes from Wolfram's
branch, addressing races, cleanup paths and resource management
issues.
2026-06-09 14:08:00 +02:00
Krzysztof Kozlowski
d1d7310e2b nuvoton: First batch of arm64 devicetree changes for v7.2
Just the one patch adding ethernet nodes for the MA35D1 development board.
 -----BEGIN PGP SIGNATURE-----
 
 iJIEABYKADoWIQSoUT1x3bOSX/nAa8ajM9GZTrjhpgUCah+JDxwcYW5kcmV3QGNv
 ZGVjb25zdHJ1Y3QuY29tLmF1AAoJEKMz0ZlOuOGmi5AA/1c36yXTxYoAmQWjYv5u
 l0sAc8TZfUoxQ33/4GvO0NUfAQCrgXgOrTTQ3RdYwb10rgF60nPwZALITRfllMZU
 ozixAw==
 =t4B5
 -----END PGP SIGNATURE-----

Merge tag 'nuvoton-7.2-devicetree-0' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/bmc/linux into soc/dt

nuvoton: First batch of arm64 devicetree changes for v7.2

Just the one patch adding ethernet nodes for the MA35D1 development board.

* tag 'nuvoton-7.2-devicetree-0' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/bmc/linux:
  arm64: dts: nuvoton: Add Ethernet nodes

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 14:07:26 +02:00
Krzysztof Kozlowski
9f2f61e336 aspeed: First batch of driver changes for v7.2
While bc13f14f5c ("soc: aspeed: cleanup dead default for
 ASPEED_SOCINFO") was committed just now it has been in -next for a while as
 b333a0f1c857411d83a02aa6f1d9ecc7666d6179. The commit is fresh as I moved it
 between branches.
 
 Other than that it's just the one other patch from Krzysztof tidying up the
 location of MODULE_DEVICE_TABLE().
 -----BEGIN PGP SIGNATURE-----
 
 iJIEABYKADoWIQSoUT1x3bOSX/nAa8ajM9GZTrjhpgUCah+GbhwcYW5kcmV3QGNv
 ZGVjb25zdHJ1Y3QuY29tLmF1AAoJEKMz0ZlOuOGmMwoBAISxLClOnFAZT7MmKB2b
 ixwjF31YoixIG45zDwC0t+8EAP9dMNq0apbHh19RHqDrfFsrYTGjs/FoAUG/J/sG
 TwXKBg==
 =QHRt
 -----END PGP SIGNATURE-----

Merge tag 'aspeed-7.2-drivers-0' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/bmc/linux into soc/drivers

aspeed: First batch of driver changes for v7.2

While bc13f14f5c ("soc: aspeed: cleanup dead default for
ASPEED_SOCINFO") was committed just now it has been in -next for a while as
b333a0f1c857411d83a02aa6f1d9ecc7666d6179. The commit is fresh as I moved it
between branches.

Other than that it's just the one other patch from Krzysztof tidying up the
location of MODULE_DEVICE_TABLE().

* tag 'aspeed-7.2-drivers-0' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/bmc/linux:
  soc: aspeed: cleanup dead default for ASPEED_SOCINFO
  soc: aspeed: Move MODULE_DEVICE_TABLE next to the table itself

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 14:05:28 +02:00
Krzysztof Kozlowski
a577cc3a46 Amlogic ARM64 DT for v7.2 v2 take 1:
- Khadas VIM4 (T7 SoC) features:
  - Memory layout fixup
  - GIC register range
  - Model name fixup
  - PWM, eMMC, SD card and SDIO support
  - PWM LED
  - I2C pinctrl node
 - Khadas VIM1s Features
  - Bluetooth
  - PWM LED
  - Power Key
  - Function Key via SARADC
  - RTC
  - Remote control keymap
 - Bluetooth node for Phicomm N1
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEPVPGJshWBf4d9CyLd9zb2sjISdEFAmoei2YACgkQd9zb2sjI
 SdGsKw//V2+z5oF3MvOeKq3zGg+/eozh8vTcz/OSzUQmDSM8k+0XN2Iohue/m6FG
 0QDaaUJj0gyiGU9jKI/c9FcI9+gsQ4yKEGJz9rcHnY8FCTBJ/YnP5DrkG3DVQJ3N
 4H/bexBbIgyrF6upDZA8hia5ZMpLY8ps3geQSX9k19gymRC/WYCiZI/HOFVH0gAx
 1/5oemCbSGInjm7ai6KdDhlgGlPuShlq18csj23EXqH0BGjQzxVBn+fP4U9BTOnZ
 +2meiuUNHSyLBieGGyZE2/O0U13B5WQy4IcCucdlc7M8zEH7FsDZm9jwSpOSKlL7
 rQguW4Ezgi/EfUDoiSB5ScvStBGIyDqEUR1FP08WcnO0yRFouJdSiu/L6tn9KzIg
 uEdy8Vf+lsUZClsTAZU9RRNUEZkcKnWtahaN4AIKW+x3aye5qlaBTdGkTNcALMC6
 vrVr5LY9a0jCvkWzTbFsqHgPS8eqE2go7Merc3GRP8JQNg4A7qS+a9HVc8wXX7jm
 vZrUl1We3uSCe4Q8zSbFfm4bLPkwXu41Im2/tSTe+72xFRGgL1OBsXVOGJ0ZJ89d
 QKycsiOEYrS3dCunqjkpqoKuf4065tf56aelbqrUznYau6pxKZeNmU8cVBKsefO+
 C/gYVu/Us38+XrrA/iPEPAeWu/+Txw85PDb0cu/Rl9xkqQDXEZs=
 =8Trw
 -----END PGP SIGNATURE-----

Merge tag 'amlogic-arm64-dt-for-v7.2-v2' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/amlogic/linux into soc/dt

Amlogic ARM64 DT for v7.2 v2 take 1:
- Khadas VIM4 (T7 SoC) features:
 - Memory layout fixup
 - GIC register range
 - Model name fixup
 - PWM, eMMC, SD card and SDIO support
 - PWM LED
 - I2C pinctrl node
- Khadas VIM1s Features
 - Bluetooth
 - PWM LED
 - Power Key
 - Function Key via SARADC
 - RTC
 - Remote control keymap
- Bluetooth node for Phicomm N1

* tag 'amlogic-arm64-dt-for-v7.2-v2' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/amlogic/linux: (22 commits)
  arm64: dts: amlogic: t7: Add i2c pinctrl node
  arm64: dts: amlogic: t7: khadas-vim4: add PWM-driven status LED
  arm64: dts: amlogic: t7: khadas-vim4: reorder root node
  arm64: dts: amlogic: t7: Fix missing required reset property
  arm64: dts: amlogic: t7: khadas-vim4: Add MMC nodes
  arm64: dts: amlogic: t7: khadas-vim4: Add SDIO power sequence and WiFi clock
  arm64: dts: amlogic: t7: Add PWM controller nodes
  arm64: dts: amlogic: t7: Add MMC controller nodes
  arm64: dts: amlogic: t7: Add clock controller nodes
  arm64: dts: amlogic: meson-s4-s905y4-khadas-vim1s: use rc-khadas keymap
  arm64: dts: amlogic: meson-s4-s905y4-khadas-vim1s: enable HYM8563 RTC
  arm64: dts: amlogic: meson-s4: add VRTC node
  arm64: dts: amlogic: meson-s4-s905y4-khadas-vim1s: add Function key support
  arm64: dts: amlogic: meson-s4: add internal SARADC controller
  arm64: dts: amlogic: t7: khadas-vim4: Add power regulators
  arm64: dts: amlogic: t7: Add PWM pinctrl nodes
  arm64: dts: amlogic: t7: Add eMMC, SD card and SDIO pinctrl nodes
  arm64: dts: amlogic: meson-s4-s905y4-khadas-vim1s: add POWER key support
  arm64: dts: amlogic: meson-s4-s905y4-khadas-vim1s: add PWM LED support
  arm64: dts: amlogic: meson-s4-s905y4-khadas-vim1s: enable bluetooth
  ...

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 14:02:23 +02:00
Krzysztof Kozlowski
77510b39ee RISC-V SpacemiT DT changes for 7.2
For K3 SoC
 - Add Ziccrse extension
 - Add PWM support
 - Add PDMA support
 - Add USB2.0 support
 - Add CoM260-IFX board
 - Add DeepComputing FML13V05 board
 - Fix I/O power of pinctrl
 
 For K1 SoC
 - Add Micro SD card support
 - Add baudrate to console
 - Add SPI support
 - Enable thermal sensor
 - Fix 32K clock
 
 For boards of K1
 - Milk-V Jupiter
   - Enable eMMC
 - MusePi-Pro
   - Enable EEPROM/PCIe/QSPI/USB
 - OrangePi R2S
   - Enable PMIC/USB3
 - OrangePi RV2
   - Enable eMMC/I2C/PCIe/PMIC/QSPI/USB
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQKvBAABCgCZFiEEtbq4ycMbcRVnAiPcMarqR1lNu+0FAmoefQAbFIAAAAAABAAO
 bWFudTIsMi41KzEuMTIsMiwyXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25z
 Lm9wZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRCNUJBQjhDOUMzMUI3MTE1NjcwMjIz
 REMzMUFBRUE0NzU5NERCQkVEAAoJEDGq6kdZTbvt6ckP/jCv7or+dzs2Pjcaa9/Z
 HaMnbriUS3u83KFRJ4Gf7O55fUzWq7Tl+fejoWrh5UF5lkSe9f5TT6sv/l9XOetE
 CB6slypX4Qzv1FNP9owMo646GeyUrOKQz8dxSsUtcZf5UpFWHfgvgz2NW5gr+s6m
 6jf+TGOsK1ge9haIKmxp3Zzhlh3j/p0pvc8WprNg9EV+wTFmn7QHRNn6Y3tkpHLM
 x4dms3oOLOHp8JXQ29cJZp3Jqkgpjx8mxUnH2zkGdW4R9xvDgN9qG48qPmKgT1eE
 JnilE3wGMjVHW5JtFDFT2PWzb6A4ZijKsHVGZ7T+YoOrsE8imY7EQxQkZwl7e8bc
 cnKPbx6/RN1Kj3ifCEDXbulQtorxMsE4wMkUeJ1BmMvlHiZ9NUMHLRjMnnVlWlpN
 ltCx/qdxwEmFLcajMf8vBxPDlETHjE+w8U66vJwb4TKXnOLfs8b7bZA5HOQMc7ZB
 EWbkxYLBtEj1R4Q32kFvlQGjPVt7vdTtBeG9ZAJWq9FqU1vVH97+lERw7/v16fHp
 SZqP7z+aApWgxa3Xxr+eUHjgTRyJEeOW/RGrIXOPU1188SWqxpejf68skASpMGoa
 kgjqnS7fN3TXHtkGFGYOGiqTKOuuCnmr1QPmOOd9ALZnFUgr37CCY5BQMH0m5ci7
 5odjSub1Wu0VTW4vwnohlXQU
 =lNAs
 -----END PGP SIGNATURE-----

Merge tag 'spacemit-dt-for-7.2-1' of https://github.com/spacemit-com/linux into soc/dt

RISC-V SpacemiT DT changes for 7.2

For K3 SoC
- Add Ziccrse extension
- Add PWM support
- Add PDMA support
- Add USB2.0 support
- Add CoM260-IFX board
- Add DeepComputing FML13V05 board
- Fix I/O power of pinctrl

For K1 SoC
- Add Micro SD card support
- Add baudrate to console
- Add SPI support
- Enable thermal sensor
- Fix 32K clock

For boards of K1
- Milk-V Jupiter
  - Enable eMMC
- MusePi-Pro
  - Enable EEPROM/PCIe/QSPI/USB
- OrangePi R2S
  - Enable PMIC/USB3
- OrangePi RV2
  - Enable eMMC/I2C/PCIe/PMIC/QSPI/USB

* tag 'spacemit-dt-for-7.2-1' of https://github.com/spacemit-com/linux: (35 commits)
  riscv: dts: spacemit: enable PMIC on OrangePi R2S
  dts: riscv: spacemit: k3: Fix I/O power settings
  riscv: dts: spacemit: k3: Add Ziccrse extension for X100 cores
  riscv: dts: spacemit: k3: Initial support for CoM260-IFX board
  dt-bindings: riscv: spacemit: Add K3 CoM260-IFX board
  riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes
  riscv: dts: spacemit: k3: Add pwm support
  riscv: dts: spacemit: fix uboot partition offset on Milk-V Jupiter
  riscv: dts: spacemit: enable SD card support on Milk-V Jupiter
  riscv: dts: spacemit: enable eMMC on Milk-V Jupiter
  riscv: dts: spacemit: sort aliases on Milk-V Jupiter
  riscv: dts: spacemit: set console baud rate on Milk-V Jupiter
  riscv: dts: spacemit: enable USB3 on OrangePi R2S
  riscv: dts: spacemit: Add thermal sensor for K1 SoC
  riscv: dts: spacemit: Add PDMA controller node for K3 SoC
  riscv: dts: spacemit: enable QSPI for OrangePi RV2
  riscv: dts: spacemit: k1-musepi-pro: set default console baud rate
  riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports
  riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports
  riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR
  ...

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 13:59:50 +02:00
ZhaoJinming
6736b18019
platform/x86/intel/tpmi: convert mutex in mem_write() to guard
Convert the explicit mutex_lock/mutex_unlock pair in mem_write() into
a cleanup.h guard(mutex)() scope-based lock acquisition. This removes
the remaining goto-based cleanup path and keeps the lock held until
the end of the mem_write() scope.

Suggested-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: ZhaoJinming <zhaojinming@uniontech.com>
Link: https://patch.msgid.link/20260521130848.2860219-2-zhaojinming@uniontech.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
2026-06-09 14:54:34 +03:00
Krzysztof Kozlowski
d7f82a3fd1 T-HEAD Devicetrees for 7.2
Enable wifi on two TH1520 boards: BeagleV Ahead and Lichee Pi 4a.
 
 The BeagleV Ahead board uses an AP6203BM WiFi module connected to SDIO1.
 The Lichee Pi 4A has an RTL8723DS WiFi module also connected to SDIO1.
 The module reset line is driven through a PCA9557 GPIO expander on the
 I2C1 bus.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYIAB0WIQSy8G7QpEpV9aCf6Lbb7CzD2SixDAUCah4clQAKCRDb7CzD2Six
 DF2AAQDknKUINZIFy4xuYA9J45iwjHOXxwo0YAWKKX5QFu5avgEAyQN+P31Vgjyi
 dzh1ilkH+nSO/blbeh8p8kaR3T8+AQ4=
 =ovaG
 -----END PGP SIGNATURE-----

Merge tag 'thead-dt-for-v7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux into soc/dt

T-HEAD Devicetrees for 7.2

Enable wifi on two TH1520 boards: BeagleV Ahead and Lichee Pi 4a.

The BeagleV Ahead board uses an AP6203BM WiFi module connected to SDIO1.
The Lichee Pi 4A has an RTL8723DS WiFi module also connected to SDIO1.
The module reset line is driven through a PCA9557 GPIO expander on the
I2C1 bus.

* tag 'thead-dt-for-v7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux:
  riscv: dts: thead: Enable wifi on the BeagleV-Ahead
  riscv: dts: thead: Enable WiFi on Lichee Pi 4A
  riscv: dts: thead: Add TH1520 I2C1 controller

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 13:54:31 +02:00
Krzysztof Kozlowski
6b2b89b1bc Tenstorrent device tree for v7.2
Add a riscv,pmu node to the Tenstorrent Blackhole SoC device tree. This
 enables OpenSBI to expose the SBI PMU extension, allowing Linux perf to
 use the 4 programmable counters (mhpmcounter3-6) across 3 event classes:
 instruction commit, microarchitectural, and memory system events.
 
 Extend the RISC-V IOMMU device tree bindings to document the Tenstorrent
 IOMMU used in the Tenstorrent Atlantis SoC. A second register range is
 added which contains M-mode only registers like PMAs and PMPs. The
 binding will be used by OpenSBI and potentially other M-mode software.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYIAB0WIQSy8G7QpEpV9aCf6Lbb7CzD2SixDAUCah4MhgAKCRDb7CzD2Six
 DKgDAP93cm8LE7eQTxSWGdgcgWG+tQrb+E/5qcjt8oN4vqOHkQEAw2+Fk1hxvxIz
 LvM2xAg+1REKuW3tYJjVfB/m6e9LagE=
 =bY/J
 -----END PGP SIGNATURE-----

Merge tag 'tenstorrent-dt-for-v7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/tenstorrent/linux into soc/dt

Tenstorrent device tree for v7.2

Add a riscv,pmu node to the Tenstorrent Blackhole SoC device tree. This
enables OpenSBI to expose the SBI PMU extension, allowing Linux perf to
use the 4 programmable counters (mhpmcounter3-6) across 3 event classes:
instruction commit, microarchitectural, and memory system events.

Extend the RISC-V IOMMU device tree bindings to document the Tenstorrent
IOMMU used in the Tenstorrent Atlantis SoC. A second register range is
added which contains M-mode only registers like PMAs and PMPs. The
binding will be used by OpenSBI and potentially other M-mode software.

* tag 'tenstorrent-dt-for-v7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/tenstorrent/linux:
  dt-bindings: iommu: riscv: Add bindings for Tenstorrent RISC-V IOMMU
  riscv: dts: tenstorrent: Add PMU node to blackhole for Linux perf support

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 13:46:11 +02:00
Krzysztof Kozlowski
a68c459ac6 Allwinner driver changes for 7.2
Mostly changes to the SRAM driver to allow for one SRAM region to be
 "claimed" by multiple changes. When a region is "claimed" it is removed
 or disconnected from the CPU's view. This is needed on the H6 and H616,
 which have one alias region seemingly shared between the video codec
 engine and the display engine.
 
 One minor fix for the RSB driver is also included.
 -----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCgAuFiEE2nN1m/hhnkhOWjtHOJpUIZwPJDAFAmod2AsQHHdlbnNAa2Vy
 bmVsLm9yZwAKCRA4mlQhnA8kMCUND/4h+xocrSMz4T+gHAvffsGItDQrtyLreXem
 GNIdY7whCRo+6KgipnTgXtvqRCzBhiQx9PYM3BTLNLUCURdM0NAcooE/f1kidVOI
 BHOTvfX1cy9eoGVJpZnfMAdMT/MlIw6LC7C1n1y8H14q1ERWkAOeO+k1VE9lMbIj
 jI9YWCFPvq29F+gEZAlCZXZnMWkgrJiLixnVYyi32P1k/u3ykqoNx7TKHWPsWaj5
 /lS22YJUkcf0ARAJhcTElxYLytuhUCE68KKYVD7cN8uojebbcTAJLSkO7INtEdD/
 USkY5sdq1cmDQ42ejgSPkcaL3etwBAha1NceKFLEAYVto6GUziOmXaGw8TLJVMD7
 8ILjzOVj28iUADqy43tvwkqzDNDgn1xy+wmZSiSb6b9N+htDNKHh37R8NeJd0EwY
 8YC/r5H5JqwBFQ0PWXHnjeFNlp6lBZ3G/QWU9ztnsCaDKp8P4jtl8wCF843lACtj
 BKPFCQ/+dkAlxExClaUo1JewJqhjyghpLmoWRMy/azbkdx7B100hH3DabAicN7JH
 1lJ+rvIgTmmlwmGYceQ6sdg//M1b+3emTQ2kX3cgPCra8srKnp5ZkJzwtK0J9OHv
 XEFzB9rtvBPYvKt0dk/eaQAKAZIq82j9vdrtMzI1A5LeUF3VMEr7BxXxplBdwAH6
 TSIElm0ktA==
 =n5X7
 -----END PGP SIGNATURE-----

Merge tag 'sunxi-drivers-for-7.2' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/sunxi/linux into soc/drivers

Allwinner driver changes for 7.2

Mostly changes to the SRAM driver to allow for one SRAM region to be
"claimed" by multiple changes. When a region is "claimed" it is removed
or disconnected from the CPU's view. This is needed on the H6 and H616,
which have one alias region seemingly shared between the video codec
engine and the display engine.

One minor fix for the RSB driver is also included.

* tag 'sunxi-drivers-for-7.2' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/sunxi/linux:
  bus: sunxi-rsb: Always check register address validity
  soc: sunxi: sram: Add H616 SRAM regions
  soc: sunxi: sram: Support claiming multiple regions per device
  soc: sunxi: sram: Allow SRAM to be claimed multiple times
  soc: sunxi: sram: Const-ify sunxi_sram_func data and references
  dt-bindings: sram: sunxi-sram: Add H616 SRAM regions
  dt-bindings: sram: Document Allwinner H616 VE SRAM

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 13:38:15 +02:00
Sergio Paracuellos
a46f2e5720 gpio: mt7621: fix interrupt banks mapping on gpio chips
The GPIO controller's registers are organized as sets of eight 32-bit
registers with each set controlling a bank of up to 32 pins. A single
interrupt is shared for all of the banks handled by the controller.
The driver implements this using three gpio chip instances every one
with its own irq chip. Every single pin can generate interrupts having
a total of 96 possible interrupts here. It looks like there is a problem
with interrupts being properly mapped to the gpio bank using this solution.
This problem report is in the following lore's link [0].

Device tree is using two cells for this, so only the interrupt pin and the
interrupt type are described there. Changing to have three cells to setup
also the bank and implement 'of_node_instance_match()' would also work but
this would be an ABI breakage and also a bit incoherent since gpios itself
are also using two cells and properly mapped in desired bank using through
its pin number on 'of_xlate()'.

That said, register a linear IRQ domain of the total of 96 interrupts shared
with the three gpio chip instances so the bank and the interrupt is properly
decoded and devices using gpio IRQs properly work.

[0]: https://lore.kernel.org/linux-gpio/CAAMcf8C_A9dJ_v4QRKtb9eGNOpJ7BZNOGsFP4i2WFOZxOVBPnQ@mail.gmail.com/T/#u

Fixes: 4ba9c3afda ("gpio: mt7621: Add a driver for MT7621")
Co-developed-by: Vicente Bergas <vicencb@gmail.com>
Signed-off-by: Vicente Bergas <vicencb@gmail.com>
Tested-by: Vicente Bergas <vicencb@gmail.com>
Signed-off-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Link: https://patch.msgid.link/20260609031118.2275735-1-sergio.paracuellos@gmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
2026-06-09 13:36:22 +02:00
Arnd Bergmann
e9282defad ARM: soc: updates for v7.2
Minor update for omap_device core code.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEe4dGDhaSf6n1v/EMWTcYmtP7xmUFAmom3ToACgkQWTcYmtP7
 xmW/9xAAmyL8ao7ODL7GxLl2ft5fkyqziiYvH12b/qVuPOiegQ3f3NqgI7GHCIUJ
 lrUdeRwv7NHD0brB2EAHZRwNhfx2tZhmtq5OCru6+IgJlUrtkDJXr/t/26H90EvW
 6iOCBR0aN9X0lRjW6f4DDiVWfDufYZgQFmMgsSskgl7q+0bdQ6G8pmwCBygFbRJp
 L+QqifolihspsghYvPTT7B02QCnjTFcutFY5KPcClh1Aac1SJQGQJrMsfPzWz5os
 dUuVtduGlLJB5KQnSQ5a4Wd9fT+9mSwYjV/v7iMJSqF565O9SQ61ek2FyUDYWtsU
 fpNxzhQZTCmD78jUM270C/VMwPGnVMFYOCqkwH5M50OMcpw3aCdf7eUL4Pt7fIMv
 e8BzJt2BryJdtx4EwjiNTN7OLq+OW/ZFqBoO7oq4nlxL9EUic+5oWgA9VJHbk2v1
 o0rFMmHTcJdul12Eb3/rA1+LzFpE2cUGdkvH8cpsT1JMUEmDPiBDmE6iVyTgfShz
 FrQ+KWMCs/niAa4G4ff1OiktEzpXVZd+1t/KVpkHh1wJm4TrMymlkIbYSLwvpnu+
 PrUFNWyqNtErFLIlonC+/mqLNWHoRIL3Rd6cHbAQbRE3pKs51Lh+hq5Jjh9TkCF9
 DoxfcVLYxJ6XP3FVsfhv7xDnjS9o9g5H7M6IqLwddcdtmPsxzVo=
 =7DRL
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmon+qEACgkQmmx57+YA
 GNk5lw/+L5GrJLTwOZhH3Cw/l0VhIIptgem+EQ9Jg7aewLHNgepLR73jSqbUS0px
 nmzqhPhZGaTbAS+79UWe8r7wrFwCmeKFW1SmrVos2PCYk9mH1V0f3fDH8rhTCDU8
 2UjqSztwy4HYougURwb2JddOwXLdIui4WGBudnWNvp/Zf6fsgMgGv3Fiy7Csd8g+
 jfWnZOTZNeRD90Ii8qc6n2o0vMUF5gxNUVtDqlbyIUTRtGskLoX/NifGpRTgoHBT
 bjJBmjoQrWCbEUtzEGz/8NTgKqlHqvKdFGz1Kn1rvNZ+Yd5D+apwgPBjjO58rOBh
 1jiZJHF/w6teBNCCoaOIFYQqLswt40rm/8LfdCZB0agQrh2ySF0EVJB298KusXo+
 jQCj1kEBCiNSh7rjZ28H/VcWvfwCM4zTRSgnT7Tl9QvO7IU8ykARE76PK7UXCbcI
 kaY/HgikuW5SkdrTB+X2MTvrbtgLiGRiapzwemae+7ZXm3R1MAiidUVqSUD9EtTO
 gBzmxHk2IbyqDLPFE227p5DBfzbrcMYupXT14GGjbtTVGnzOu6fIgIZqt2Ks6LxK
 bBC14hZtEWeWmNyL+9mfEbop1qrpTsfw5hspHfBITFYvH2XwaxSOwE9unTjsAyM1
 wKtyV7u01cC+9vuKmvIxhkH5YO2y/1B491bcs028ktJ4KQzSa5Y=
 =Vqea
 -----END PGP SIGNATURE-----

Merge tag 'omap-for-v7.2/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap into soc/arm

ARM: soc: updates for v7.2

Minor update for omap_device core code.

* tag 'omap-for-v7.2/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap:
  ARM: omap2: simplify allocation for omap_device

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-06-09 13:35:58 +02:00
Arnd Bergmann
f044d8021c i.MX arm64 defconfig for v7.2
- Enable DP83822 PHY driver.
 -----BEGIN PGP SIGNATURE-----
 
 iQHFBAABCgAvFiEEJS45w2QNr0ezLVaoNF3oRQ23YkwFAmom3vURHGZyYW5rLmxp
 QG54cC5jb20ACgkQNF3oRQ23YkxiLQwAm/MxXPx6T7uEOljEdCmnrTSrkh7/tiy3
 i1ALY1CP2oozIhifHoFRVVM10tNAVJdXrD+OnEWYx7TVvgjO7XeFMSV6utiqX38I
 UDJSYDjKgDfx1Ck5yRK6AVKRk7PWtuA5HgSr7NB17kT8mOd/dlayXA1t1KcQeGQK
 qk1kNJ95TyR8z4Rq5z7E2V9Hc0Ze+IuvOYy2nfGrXMbMRc+hi/fn5FDinAuManiS
 xaTrQVdaZ4yFOnjJvBfbMyGyLJqK1qAYKMvtTfVCdTQEdBtqGv0xSy67srRSz0/d
 WXQWiAw5dEsc0YRD91ZBa/NEtmI+Wu3JADP7V6LJ6fgPkSYM7nFj8CJx9bqq/5SW
 1FBkKCwrwQaY7LmdGDdG5c/GQa3hrtoGlf7lmZox26VoSv04qCY1PpVCA+bfuLXY
 44LXLr060ORNdV43SKJPlOlBgvmz7kABmpl3GPi34qf6ciFXXZmn4dEAsr8D8pF7
 0RI6hSPUbkspsU0jMinHkeyqXLSi3QVh
 =4Dez
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmon+lQACgkQmmx57+YA
 GNn+Ag/9F8282hm3F9zJ+vMvChPG2GQmcZ8njO5AiNNOqPr+QI1JJ0gmXFddnBxQ
 25TKSXRfg1ldvnUYu7UnHas6qjuFfww4gVM4n0yib2GEz/PTsiiwJ7QqwyHyhtjN
 S5DB5TAGQa6fGSUuKhKCTxjG1NFnSdcf853F3kUSIFgd5bAkJBgFQ5lNZ7x9VGaO
 T8VyGrxNmkrSeU462diomJayll2gmnMy2APqEODijqODA6TxRm7SzJGhVjpIMsOu
 Xl+lHZf6A+ux0ksle9Tp9NQWOTwWzZD/HL/ue8DEBMVV4Y8g1E+Nw3uqbyYAsbeD
 CYr2sg/r0WwxOHLVxVUstvFgAcACQoDZDbhekBO28wnh0jH1TMrvlAmCqrJOiEl2
 otGv3KRxUm90eYOqQb3osR44OPiQTaYxss4BXXE0hC4Zy4BHJpdWy5giuZKg7V1Q
 z6Ilo20EW8oE6qs7pBKTWR3D8nelfLdm5tjJNwIf0o+XsDVENWFoZ+BLDqJUjaI/
 siB9Uc69dLENAKTpGrrOE5Qd93IWNdfEm5roq03b07LIV+iW1YW6XCVTRz+Eiz3i
 IyiH4UmeoEiS04nR7LEaZhIU7BtX1UlslRkJxF0NOAutAWstSIJiB64Ei5mbkQ+f
 Vctn+cFSqqllRhfhL+iNV2hVaRLVn/+Ns91yrtwrk0Oo7MlMo/s=
 =6t3B
 -----END PGP SIGNATURE-----

Merge tag 'imx-defconfig-7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/frank.li/linux into soc/defconfig

i.MX arm64 defconfig for v7.2

- Enable DP83822 PHY driver.

* tag 'imx-defconfig-7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/frank.li/linux:
  arm64: defconfig: Enable DP83822 PHY driver

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-06-09 13:34:42 +02:00
Arnd Bergmann
5087338ea4 Microchip AT91 defconfig updates for v7.2
This update includes:
 - I3C flags for the SAMA7 family of SoCs
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQTsZ8eserC1pmhwqDmejrg/N2X7/QUCaifCAAAKCRCejrg/N2X7
 /Z9+AP4jb/pJAw/ugM1claAU2kWpip+1k5CHUYGXtpl1yEa9LQEAogpbrBZjjM0Y
 NytsKYBAnZzs/0idR+EqEpXoEIc8Cgw=
 =TCNX
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmon+ecACgkQmmx57+YA
 GNmkrw//eUogiUud0IifoiW5Ev+GECHQZF9QfnpwseKWhS52dbovbkfoW6rUWg3z
 EAGWUO3ZUPh733ZmnSc3fSo3oKbHSwd1Tc0XA8avztM2JsVqo85xu1FH11FHNUq+
 FCJk8SmFyouewK6hyOLITrP84uuvMUY8S+aPO6kcFBcrRuwU+MxZ+kwd/EzbJUF/
 hhHVwbpbWtZHA+lDc6GCXTunz2xHkK3+Wcicm2spQQbEPkLLfis9mVYYfQioPYQd
 La5fNO3BSyBYJfqDu+L0YzYxNo5FPsgezQzbNS+Qg4jJZQEXEyHee4Orkt7k8m3x
 zY63bdMvs7eIj5XwRNZNVo0Cc+JvXc7LvvtRylN3plvNdOWvhcckgJhPDMr3uc79
 OCWsm7a7ph5OB0tK5UL2kGZZfL0EZfbfjIeeOPxWGLHHLviB+HeyoC/YOW2i0cZF
 hzNDvdRVGLadBazEUbMDHPZiVEy0dSVIelUAF+5XPKT/1j8Zibn4ll+/MZq60B/W
 NtVSCeUBUXPTRqWosX/8qmx9R960x02LBxbktB23UvEtvLN/Em4S9YGqdieDsN0H
 ApJ27utDK1bkGThZu6mAw/ab/eWBg/DJupShI3XKIiPbcJ1e+Hl2B6D84f+Pj5lE
 p190yNu+SoRP5xOqb7wgFCt8l3O6+c+VePgBgHefa7f/X4YmY8c=
 =IFRh
 -----END PGP SIGNATURE-----

Merge tag 'at91-defconfig-7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux into soc/defconfig

Microchip AT91 defconfig updates for v7.2

This update includes:
- I3C flags for the SAMA7 family of SoCs

* tag 'at91-defconfig-7.2' of https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux:
  ARM: configs: at91: sama7: add sama7d65 i3c-hci

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2026-06-09 13:32:53 +02:00
Marco Scardovi
1c1e0fc88d gpio: rockchip: fix generic IRQ chip leak on remove
The driver allocates domain generic chips using
irq_alloc_domain_generic_chips() during probe. However, on driver
remove/teardown, the generic chips are not automatically freed when the
IRQ domain is removed because the domain flags do not include
IRQ_DOMAIN_FLAG_DESTROY_GC.

This causes both the domain generic chips structure and the associated
generic chips to be leaked. Additionally, the generic chips remain on
the global gc_list and may later be visited by generic IRQ chip suspend,
resume, or shutdown callbacks after the GPIO bank has been removed,
potentially resulting in a use-after-free and kernel crash.

Fix the resource leak by explicitly calling
irq_domain_remove_generic_chips() before removing the IRQ domain in
rockchip_gpio_remove().

Fixes: 936ee2675e ("gpio/rockchip: add driver for rockchip gpio")
Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Marco Scardovi <scardracs@disroot.org>
Link: https://patch.msgid.link/20260607230504.35392-2-scardracs@disroot.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
2026-06-09 13:24:20 +02:00
Samuel Moelius
446e8c31d0 gpio: mockup: reject invalid gpio_mockup_ranges widths
gpio-mockup validates only that each second gpio_mockup_ranges value is
non-negative before creating the mock chips.  The fixed-base form uses
the second value as the first GPIO number after the range, while the
dynamic-base form uses it as the number of GPIOs.

gpio_mockup_register_chip() stores the resulting number of GPIOs in a
u16 and passes it through a PROPERTY_ENTRY_U16("nr-gpios", ...).  Values
greater than U16_MAX therefore truncate silently.  For example,
gpio_mockup_ranges=-1,65537 creates a one-line mock GPIO chip instead of
rejecting the invalid request.

Reject zero-width, reversed, and over-U16 ranges before registering any
mock chip.

Assisted-by: Codex:gpt-5.5-cyber-preview
Signed-off-by: Samuel Moelius <sam.moelius@trailofbits.com>
Link: https://patch.msgid.link/20260609004538.1240091.3fba33a20b88.gpio-mockup-ngpio-u16-truncation@trailofbits.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
2026-06-09 13:19:56 +02:00
Paolo Abeni
db7a16556f Merge branch 'ipv4-igmp-annotate-diagnostic-procfs-data-races'
Yuyang Huang says:

====================
ipv4: igmp: annotate diagnostic procfs data races

This patch series addresses several unannotated data races between lockless
RCU-protected diagnostic reads in /proc/net/igmp (igmp_mc_seq_show())
and concurrent writes in serialized paths (RTNL and group spinlocks).

Following the precedent in commit 061c0aa740 ("ipv4: igmp: annotate
data-races around im->users"), we annotate these intentional data races
using READ_ONCE() and WRITE_ONCE() macros.

- Patch 1 annotates races around `in_dev->mc_count` (interface-level joins).
- Patch 2 annotates races around active timer-related state tracking fields
  (`tm_running`, `reporter`, `expires`) on individual multicast groups.
====================

Link: https://patch.msgid.link/20260605014318.3890804-1-yuyanghuang@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 13:19:34 +02:00
Yuyang Huang
3289d17b7a ipv4: igmp: annotate data-races around timer-related fields
/proc/net/igmp walks the multicast list locklessly under RCU and reads
timer-related fields (im->tm_running, im->reporter, im->timer.expires)
to print the timer state of multicast memberships. Concurrently, these
fields are modified under im->lock spinlock in timer management paths
(igmp_stop_timer(), igmp_start_timer(), and igmp_timer_expire()). Fix this
intentional lockless snapshot by annotating the lockless reads with
READ_ONCE() and the updates with WRITE_ONCE().

Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20260605014318.3890804-3-yuyanghuang@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 13:19:33 +02:00
Yuyang Huang
1719841cab ipv4: igmp: annotate data-races around in_dev->mc_count
/proc/net/igmp walks the multicast list for IPv4 interfaces locklessly
under RCU and prints state->in_dev->mc_count. Concurrently, device
init/destruction and multicast join/leave paths update the count
under the RTNL lock. Fix this intentional lockless snapshot by
annotating the read with READ_ONCE() and the updates with WRITE_ONCE().

Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20260605014318.3890804-2-yuyanghuang@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 13:19:33 +02:00
Ruoyu Wang
6edb934de9 gpio: zynq: fix runtime PM leak on remove
pm_runtime_get_sync() increments the runtime PM usage counter even when it
returns an error. zynq_gpio_remove() uses it to keep the controller active
while removing the GPIO chip, but never drops the usage counter again.

Balance the get with pm_runtime_put_noidle() after disabling runtime PM.

Fixes: 3242ba117e ("gpio: Add driver for Zynq GPIO controller")
Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
Link: https://patch.msgid.link/20260609073313.5-1-ruoyuw560@gmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
2026-06-09 13:19:13 +02:00
Anton Leontev
004e9ecfe6 hv_netvsc: use kmap_local_page in netvsc_copy_to_send_buf
netvsc_copy_to_send_buf() copies page buffer entries into the VMBus
send buffer using phys_to_virt() on the entry PFN. Entries for the
RNDIS header and the skb linear data come from kmalloc'd memory and
are always in the kernel direct map, but entries for skb fragments
reference page cache or user pages, which on 32-bit x86 with
CONFIG_HIGHMEM=y can live above the LOWMEM boundary. For such a page
phys_to_virt() returns an address outside the direct map and the
subsequent memcpy() faults on the transmit softirq path, which is
fatal.

Map the pages with kmap_local_page() instead, handling two properties
of the page buffer entries:

 - pb[i].pfn is a Hyper-V PFN at HV_HYP_PAGE_SIZE (4K) granularity,
   not a native PFN. Reconstruct the physical address first and derive
   the native page from it, so the mapping stays correct where
   PAGE_SIZE > HV_HYP_PAGE_SIZE (e.g. arm64 with 64K pages).

 - Since commit 41a6328b2c ("hv_netvsc: Preserve contiguous PFN
   grouping in the page buffer array"), an entry describes a full
   physically contiguous fragment and pb[i].len can exceed PAGE_SIZE,
   while kmap_local_page() maps a single page. Copy page by page,
   splitting at native page boundaries.

The copy path only handles packets smaller than the send section size
(6144 bytes by default); larger packets take the cp_partial path where
only the RNDIS header is copied. So entries here are bounded by the
section size and a copy is split at most once on 4K-page systems. On
!CONFIG_HIGHMEM configs kmap_local_page() folds to page_address() and
no mapping work is added.

Fixes: c25aaf814a ("hyperv: Enable sendbuf mechanism on the send path")
Cc: stable@vger.kernel.org
Signed-off-by: Anton Leontev <leontyevantony@gmail.com>
Link: https://patch.msgid.link/20260604165938.32033-1-leontyevantony@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-06-09 13:16:30 +02:00
Nihal Kumar Gupta
7c9474bd4a
dt-bindings: i2c: qcom-cci: Document Glymur compatible
Add Glymur compatible consistent with CAMSS CCI interfaces.

Signed-off-by: Nihal Kumar Gupta <nihal.gupta@oss.qualcomm.com>
Signed-off-by: Vikram Sharma <vikram.sharma@oss.qualcomm.com>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
2026-06-09 13:00:34 +02:00
Nihal Kumar Gupta
e3a8f83293
dt-bindings: i2c: qcom-cci: Document Shikra compatible
Add Shikra compatible consistent with CAMSS CCI interfaces.
It requires only two clocks.

Signed-off-by: Nihal Kumar Gupta <nihal.gupta@oss.qualcomm.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
2026-06-09 13:00:34 +02:00
Abdurrahman Hussain
3279986bfe
i2c: mux: reg: use device property accessors
Convert the device-tree parsing path to the generic fwnode/device
property accessors so the driver can be probed on ACPI and swnode
platforms as well as OF. The helper is renamed from
i2c_mux_reg_probe_dt() to i2c_mux_reg_probe_fw() to reflect that.

Accessor translation:

  of_parse_phandle("i2c-parent") +
    of_find_i2c_adapter_by_node()    -> fwnode_find_reference() +
                                         i2c_find_adapter_by_fwnode()
  of_get_child_count()               -> device_get_child_node_count()
  of_property_read_bool()            -> device_property_read_bool()
  for_each_child_of_node()           -> device_for_each_child_node()
    of_property_read_u32("reg")        on ACPI device nodes:
                                         acpi_get_local_address()
                                       everything else (OF, swnode,
                                       ACPI data nodes):
                                         fwnode_property_read_u32()
  of_property_read_u32("idle-state") -> device_property_read_u32()

The child-node branch uses is_acpi_device_node() rather than
is_acpi_node(): the latter also matches ACPI data nodes (the
_DSD hierarchical-property children used by PRP0001-style
firmware), which have no ACPI handle and would make
acpi_get_local_address() fall back to evaluating _ADR against the
root namespace and return -ENODATA.  Routing data nodes through
fwnode_property_read_u32() instead lets them resolve the "reg"
property the same way OF and swnode children do.

Behavioural preservations (deliberate, to avoid regressing existing
users):

  - The three-way endian fallback is kept verbatim: an explicit
    "little-endian" property wins, then "big-endian", and otherwise
    the host's compile-time byte order. device_is_big_endian() is
    not used here because it ignores "little-endian" and introduces
    "native-endian" semantics, which would diverge from the binding.

  - The "if (!mux->data.reg)" guard around
    devm_platform_get_and_ioremap_resource() in probe() is kept.
    drivers/platform/mellanox/mlx-platform.c registers i2c-mux-reg
    platform_devices with no memory resource and supplies a
    pre-set .reg / .reg_size through struct
    i2c_mux_reg_platform_data; without the guard those
    registrations would fail in probe().

  - The "if (!mux->data.reg)" ioremap block (and the paired
    reg_size validation that depends on it) is hoisted above
    i2c_get_adapter(mux->data.parent), so the fwnode path
    preserves master's ordering of "ioremap before parent-adapter
    get".  For platdata users the validation runs from a slightly
    earlier position, but mux->data.reg_size is already set from
    platdata by then, so the order is functionally neutral.

The OF-only of_address_to_resource() translation in the old
probe_dt() is dropped because the same address is available from
the platform_device resource table on OF as well as ACPI, and the
existing fallback in probe() ioremaps it.

Acked-by: Peter Rosin <peda@lysator.liu.se>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Assisted-by: Claude-Code:claude-opus-4-7
Assisted-by: sashiko:gemini-3.1-pro-preview
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
2026-06-09 13:00:33 +02:00
Andy Shevchenko
5351cf8e96
i2c: acpi: Return -ENOENT when no resources found in i2c_acpi_client_count()
Some users want to return an error to the upper layers when
i2c_acpi_client_count() returns 0. Follow the common pattern
in such cases, i.e. return -ENOENT instead of 0.

While at it, fix the kernel-doc warning about missing return value
description.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
2026-06-09 13:00:32 +02:00
Herve Codina
f105c7a1be
i2c: at91: Add MCHP_LAN966X_PCI dependency
The AT91 I2C driver depends on ARCH_MICROCHIP.

This I2C controller can be used by the LAN966x PCI device and so
it needs to be available when the LAN966x PCI device is enabled.

Signed-off-by: Herve Codina <herve.codina@bootlin.com>
Acked-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
2026-06-09 13:00:31 +02:00
Krzysztof Kozlowski
91ee0f80cf Renesas DTS updates for v7.2 (take two)
- Add timer (MTU3) and xSPI FLASH support for the RZ/T2H and RZ/N2H
     SoCs and their EVK boards,
   - Add PCIe support for the RZ/V2N SoC and the RZ/V2N EVK board,
   - Add support for the R-Car M3Le SoC and the Geist development board,
   - Specify ethernet PHY reset timings on various R-Car boards,
   - Add (more) serial, I2C, DMA, and sound support for the RZ/G3L SoC,
   - Add PSCI, Multifunctional Interface (MFIS), and SCMI support for the
     R-Car X5H SoC and Ironhide development board,
   - Add serial DMA support for the RZ/G2L SoC,
   - Add keyboard, I2C, Versa clock, and audio support for the RZ/G3L
     SMARC SoM and EVK boards,
   - Miscellaneous fixes and improvements.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCah1IuAAKCRCKwlD9ZEnx
 cBZlAQC5g/OyC8m5v5ukI2/nNkQVE2AhvxJ19g11ZNGnnulTXwEAk6aw4+Pu793+
 6Sq3KyVKlbtIK24sap/tVFCaqaxK0wI=
 =BK85
 -----END PGP SIGNATURE-----

Merge tag 'renesas-dts-for-v7.2-tag2' of https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel into soc/dt

Renesas DTS updates for v7.2 (take two)

  - Add timer (MTU3) and xSPI FLASH support for the RZ/T2H and RZ/N2H
    SoCs and their EVK boards,
  - Add PCIe support for the RZ/V2N SoC and the RZ/V2N EVK board,
  - Add support for the R-Car M3Le SoC and the Geist development board,
  - Specify ethernet PHY reset timings on various R-Car boards,
  - Add (more) serial, I2C, DMA, and sound support for the RZ/G3L SoC,
  - Add PSCI, Multifunctional Interface (MFIS), and SCMI support for the
    R-Car X5H SoC and Ironhide development board,
  - Add serial DMA support for the RZ/G2L SoC,
  - Add keyboard, I2C, Versa clock, and audio support for the RZ/G3L
    SMARC SoM and EVK boards,
  - Miscellaneous fixes and improvements.

* tag 'renesas-dts-for-v7.2-tag2' of https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel: (56 commits)
  arm64: dts: renesas: r9a08g046l48-smarc: Enable audio
  arm64: dts: renesas: rzg3l-smarc-som: Enable Versa clock generator
  arm64: dts: renesas: r9a08g046l48-smarc: Enable I2C{2,3} devices
  arm64: dts: renesas: r9a08g046l48-smarc: Add gpio keys
  arm64: dts: renesas: rzt2h-n2h-evk: Enable xSPI nodes
  arm64: dts: renesas: r9a09g087: Add xSPI nodes
  arm64: dts: renesas: r9a09g077: Add xSPI nodes
  arm64: dts: renesas: rzg3e-smarc-som: Sort GMAC pinmux entries
  arm64: dts: renesas: r8a779md: Add support for R-Car M3Le R8A779MD Geist
  arm64: dts: renesas: r9a07g044: Add DMA properties to serial nodes
  arm64: dts: renesas: r9a07g054: Add max-frequency to SDHI nodes
  arm64: dts: renesas: r9a07g044: Add max-frequency to SDHI nodes
  arm64: dts: renesas: r9a07g043: Add max-frequency to SDHI nodes
  arm64: dts: renesas: r9a08g046: Add rsci{0..3} device nodes
  arm64: dts: renesas: ironhide: Enable to use SCMI
  arm64: dts: renesas: r8a78000: Add MFIS, MFIS-SCP, and transport nodes
  arm64: dts: renesas: ironhide: Describe all reserved memory
  arm64: dts: renesas: rzt2h-n2h-evk: Configure eMMC/SDHI pins
  arm64: dts: renesas: r8a78000: Fix GIC-720AE View 1 Redistributor description
  arm64: dts: renesas: r8a78000: Add PSCI node
  ...

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 12:55:38 +02:00
Krzysztof Kozlowski
a451dd4b43 Renesas driver updates for v7.2 (take two)
- Identify the R-Car M3Le SoC,
   - Add Multifunctional Interface (MFIS) support for R-Car V4H and V4M.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCah1FOwAKCRCKwlD9ZEnx
 cAwKAQCHcFEsNEOFt1Tx6EnK1sACrdjqMlb0hR/rNuwIGz2sZQD/X2tqhSP4cpYA
 QPfA/+mo0RcJStl34No1weBgWJOB2QM=
 =zOyF
 -----END PGP SIGNATURE-----

Merge tag 'renesas-drivers-for-v7.2-tag2' of https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel into soc/drivers

Renesas driver updates for v7.2 (take two)

  - Identify the R-Car M3Le SoC,
  - Add Multifunctional Interface (MFIS) support for R-Car V4H and V4M.

* tag 'renesas-drivers-for-v7.2-tag2' of https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel:
  soc: renesas: rcar-mfis: Add R-Car V4H/V4M support
  dt-bindings: soc: renesas: mfis: Add R-Car V4H/V4M support
  soc: renesas: Identify R-Car R8A779MD M3Le SoC

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
2026-06-09 12:51:41 +02:00
Takashi Iwai
123fd13f35 ALSA: aloop: Drop superfluous break
At converting the spinlock to guard(), a break statement was put in
the scoped_guard block in loopback_jiffies_timer_function(), but it's
obviously superfluous (although it's harmless).  Better to drop it for
avoiding confusion.

Fixes: 1ef2cb6b29 ("ALSA: aloop: Use guard() for spin locks")
Link: https://patch.msgid.link/20260609074907.726593-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2026-06-09 12:50:06 +02:00
Johannes Thumshirn
5b65452756 btrfs: zoned: decode 'RECLAIM_ZONES' state in tracepoints
Decode the 'RECLAIM_ZONES' state in tracepoints, as of now only the
numerical state is shown in the tracepoints.

Reviewed-by: Boris Burkov <boris@bur.io>
Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:26 +01:00
Johannes Thumshirn
967c1716eb btrfs: zoned: document RECLAIM_ZONES flush state
Document the purpose of the RECLAIM_ZONES flush state.

Reviewed-by: Boris Burkov <boris@bur.io>
Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:26 +01:00
Qu Wenruo
0eded739d8 btrfs: introduce support for huge folios
With all the previous preparations, it's finally time to enable the
huge folio support.

- The max folio size
  Here we define BTRFS_MAX_FOLIO_SIZE, which is fixed at 2MiB.

  This will ensure we have a large enough but not too large folio for
  btrfs.  This limit applies to all systems regardless of page size.

  Then we also define BTRFS_MAX_BLOCKS_PER_FOLIO, which depends on
  CONFIG_BTRFS_EXPERIMENTAL.

  If it's an experimental build, BTRFS_MAX_BLOCKS_PER_FOLIO is 512,
  otherwise it's BITS_PER_LONG.

  The filemap max order will be calculated using both
  BTRFS_MAX_FOLIO_SIZE and BTRFS_MAX_BLOCKS_PER_FOLIO.

  E.g. for 64K page size with 64K fs block size, the limit will be
  BTRFS_MAX_FOLIO_SIZE (2M), which limits the filemap max order to 5.
  This will be lower than the old order (6), but folios larger than 2M
  are rarely any better for IO performance. Meanwhile excessively large
  folios can cause other problems like stalling the IO pipeline for too
  long.

  For 4K page size and 4K fs block size, the limit will be increased to
  2M from the old 256K.
  This new size is constrained by both BTRFS_MAX_FOLIO_SIZE (2M) and
  BTRFS_MAX_BLOCKS_PER_FOLIO (512 * 4K), allowing x86_64 to achieve huge
  folio support, and the filemap max order will be 9.

- btrfs_bio_ctrl::submit_bitmap
  This will be enlarged to contain BTRFS_MAX_BLOCKS_PER_FOLIO bits, and
  this will be on-stack memory.
  This will increase on-stack memory usage by 56 bytes compared to the
  baseline (before the first patch in the series).

- Local @delalloc_bitmap inside writepage_delalloc()
  Unfortunately we cannot afford to handle an allocation error here, thus
  again we use on-stack memory.
  Thus this will increase on-stack memory usage by 56 bytes again.

So unfortunately this means during the delalloc window, the writeback path
will have +112 bytes on-stack memory usage, and for other cases the
writeback path will have +56 bytes on-stack memory usage.

The +56 bytes (btrfs_bio_ctrl::submit_bitmap) can be removed
after we have reworked the compression submission, so the current
on-stack submit_bitmap is mostly a workaround until then.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:26 +01:00
Qu Wenruo
ea1ab09df9 btrfs: migrate btrfs_bio_ctrl::submit_bitmap to support larger bitmaps
[CURRENT LIMIT]
Btrfs currently only supports sub-bitmaps (e.g. dirty bitmap) no larger
than BITS_PER_LONG.

One call site that utilizes this limit is btrfs_bio_ctrl::submit_bitmap,
which makes it very simple and straightforward to just grab an unsigned
long value and assign it to submit_bitmap.

Unfortunately that limit prevents us from supporting huge folios.
For 4K page size and block size, a huge folio (order 9) means 512 blocks
inside a 2M folio.

[ENHANCEMENT]
Instead of using a fixed unsigned long value, change
btrfs_bio_ctrl::submit_bitmap to an unsigned long pointer.

And for cases where an unsigned long can hold the whole bitmap,
introduce @submit_bitmap_value, and just point that pointer to that
unsigned long.

Then update all direct users of bio_ctrl->submit_bitmap to use the
pointer version.

There are several call sites that get extra changes:

- @range_bitmap inside extent_writepage_io()
  Which is only utilized to truncate the bitmap.
  Since we do not want to allocate new memory just for such temporary
  usage, change the original bitmap_set() and bitmap_and() into
  bitmap_clear() for the ranges outside of the target range.

- Getting dirty subpage bitmap inside writepage_delalloc()
  Since we're passing an unsigned long pointer now, we need to go with
  different handling (bs == ps, blocks_per_folio <= BITS_PER_LONG,
  blocks_per_folio > BITS_PER_LONG).

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:26 +01:00
Qu Wenruo
eb6915bb86 btrfs: prepare subpage operations to support more than BITS_PER_LONG sub-bitmaps
[CURRENT LIMIT]
Btrfs currently only supports sub-bitmaps (e.g. dirty bitmap) no larger
than BITS_PER_LONG.

That limit allows us to easily grab an unsigned long without the need to
properly allocate memory for a larger bitmap.

Unfortunately that limit prevents us from supporting huge folios.
For 4K page size and block size, a huge folio (order 9) means 512 blocks
inside a 2M folio.

[ENHANCEMENT]
To allow direct bitmap operations without allocating new memory,
introduce two different ways to access the subpage bitmaps:

- Return an unsigned long value
  This only happens if blocks_per_folio <= BITS_PER_LONG.

  We read out the sub-bitmap into an unsigned long, and return the
  value.
  This is the old existing method.

  This involves get_bitmap_value_##name() helper functions.
  And this time the helper functions are defined as inline functions
  instead of macros to provide better type checks.

- Return a pointer where the sub-bitmap starts
  This only happens if blocks_per_folio >= BITS_PER_LONG.

  This is the new method for sub-bitmaps larger than BITS_PER_LONG.
  Since the sizes of sub-bitmaps are all aligned to BITS_PER_LONG, we
  can directly access the start word of the sub-bitmap.

  This involves get_bitmap_pointer_##name() helper functions.

Then change the existing sub-bitmaps users to use the new helpers:

- Bitmap dumping
  Switch between get_bitmap_value_##name() and
  get_bitmap_pointer_##name() depending on the sub-bitmap size.

- btrfs_get_subpage_dirty_bitmap()
  Rename it to btrfs_get_subpage_dirty_bitmap_value() to follow the new
  value/pointer naming.
  Since we do not support huge folios yet, there is no pointer version
  for the dirty bitmap.

  Furthermore, add the support for block size == page size cases for
  btrfs_get_subpage_dirty_bitmap_value(), so that the caller no longer
  needs to check if the folio needs subpage handling.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:26 +01:00
Qu Wenruo
a93a87780d btrfs: update the out-of-date comments on subpage
The comments at the beginning of subpage.c are out-of-date, a lot of the
limitations have been already resolved.

Update them to reflect the latest status.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00
David Sterba
513528a286 btrfs: simplify how first hit is passed to __btrfs_abort_transaction()
Optimize the btrfs_abort_transaction() for size as it (by our
convention) must be put right after the error condition is detected.
The exact file:line is reported so there's a portion that must be
inlined. As this is cold code it bloats functions. In previous patch
"btrfs: move transaction abort message to __btrfs_abort_transaction()"
the error message was moved to the common helper, saving like 20KiB of
btrfs.ko and several instructions per call site and some stack space.

There's little left to be optimized, we need to keep the atomic
test_and_set_bit() and to convey that as 'first hit' to
__btrfs_abort_transaction().

Right now it's a bool, which takes 8 bytes on stack for each call but
it's 1 bit of information. We can encode that to some of the other
parameters.

For that let's use the 'error' parameter, by convention it's negative
errno so we can reliably detect if it's the first hit or a later error.
Also the negation is usually implemented by a single instruction (NEG on
x86_64) so the resulting object code is kept short.

This reduces btrfs.ko by 8K and stack in several functions by 8 bytes.

Cumulative effect with the other commit is -30K of btrfs.ko. While the
encoding is an implementation detail, it's contained within the API.
Making the transaction abort calls very light is desired.

Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00
David Sterba
e6c249adb7 btrfs: validate negative error number passed to btrfs_abort_transaction()
In preparation to encode more information to the error value add a step
that verifies if the value is valid (i.e. < 0). This works for
compile-time and runtime (in debugging mode).

The compile-time check recognizes direct constants and defines an array
type. An invalid condition leads to negative array size which is caught
by compiler.

The runtime check constructs the array type from the condition and only
verifies the correct size, as we don't need to tweak the size to be
negative.

The sizeof() expressions do not generate any code. In the debugging
config the warning adds about 9KiB of btrfs.ko code size.

The array size trick is needed as we can't use static_array(), not even
with __builtin_constant_p().

Sample error message:

In file included from inode.c:40:
inode.c: In function ‘__cow_file_range_inline’:
transaction.h:261:26: error: size of unnamed array is negative
  261 |         (void)sizeof(char[-!(__builtin_constant_p(error) ? (error) < 0 : 1)]);  \
      |                          ^
transaction.h:275:9: note: in expansion of macro ‘VERIFY_NEGATIVE_ERROR’
  275 |         VERIFY_NEGATIVE_ERROR(error);                           \
      |         ^~~~~~~~~~~~~~~~~~~~~
inode.c:665:17: note: in expansion of macro ‘btrfs_abort_transaction’
  665 |                 btrfs_abort_transaction(trans, 17);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00
Filipe Manana
486f8298b6 btrfs: fix invalid pointer dereference in __btrfs_run_delayed_refs()
In the beginning of the loop, we try to obtain a locked delayed ref head,
if 'locked_ref' is currently NULL, by calling btrfs_select_ref_head(),
which can return an error pointer. If the error pointer is -EAGAIN we do
a continue and go back to the beginning of the loop, which will not try
again to call btrfs_select_ref_head() since 'locked_ref' is no longer
NULL but it's ERR_PTR(-EAGAIN), and then we do:

   spin_lock(&locked_ref->lock);

against a ERR_PTR(-EAGAIN) value, generating an invalid pointer
dereference.

Fix this by ensuring that 'locked_ref' is set to NULL when
btrfs_select_ref_head() returns ERR_PTR(-EAGAIN) and incrementing 'count'
as well, to prevent infinite looping. We do this by doing a goto to the
bottom of the loop that already sets 'locked_ref' to NULL and does a
cond_resched(), with an increment to 'count' right before the goto.
These measures were in place before the refactoring in commit 0110a4c434
("btrfs: refactor __btrfs_run_delayed_refs loop") but were unintentionally
lost afterwards.

Reported-by: Dan Carpenter <error27@gmail.com>
Link: https://lore.kernel.org/linux-btrfs/ag8ARRwykv8bpJ87@stanley.mountain/
Fixes: 0110a4c434 ("btrfs: refactor __btrfs_run_delayed_refs loop")
Reviewed-by: Boris Burkov <boris@bur.io>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00
KangNing Liao
123b9a545f btrfs: protect sb_write_pointer() with invalidate lock
sb_write_pointer() reads the super block from the block device page cache
using read_cache_page_gfp(). This has the same race with BLKBSZSET as the
one fixed by commit 3f29d661e5 ("btrfs: sync read disk super and set
block size").

Take the mapping invalidate lock around read_cache_page_gfp() to
serialize the read against block size changes.

Signed-off-by: KangNing Liao <lkangn.kernel@gmail.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00
Filipe Manana
d8576024fa btrfs: tracepoints: show inode type in btrfs_sync_file_enter() event
Print the type of the inode (directory, regular file, symlink, etc) to
facilitate debugging.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00
Filipe Manana
375336c17e btrfs: tracepoints: add trace event for btrfs_sync_log()
btrfs_sync_log() is one of the main functions called during a fsync.
Add trace events for when entering and exiting that function.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2026-06-09 11:49:25 +01:00