[GIT PULL] Driver core changes for 7.3-rc1

"Danilo Krummrich" <[email protected]>
Newsgroups dev.linux.lists.driver-core,org.kernel.vger.linux-kernel,org.kernel.vger.rust-for-linux
Message-ID <[email protected]>
Hi Linus,

Please pull these driver-core changes.

All commits have been in linux-next; two signed tags for "software node
fw_devlink support" and "Rust I/O type generalization and projection" have been
shared with other trees.

Expect a few minor conflicts with other trees (DRM, PM, PWM), and a minor
semantic one with the Rust tree [1].

Thanks,
Danilo

[1] https://lore.kernel.org/linux-next/[email protected]/

The following changes since commit db2ddb87143519e20a95aa36c60b36107b736a58:

  Linux 7.2-rc7 (2026-08-09 14:54:50 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core.git tags/driver-core-7.3-rc1

for you to fetch changes up to 3b5ea0f078e1b72276e99c237f3dfc2fd72938bb:

  rust: pci: expose the allocated interrupt type (2026-08-17 01:43:31 +0200)

----------------------------------------------------------------
Driver core changes for 7.3-rc1

- container_of:

  - Apply typeof_member(), remove the local __mptr variable to eliminate
    variable shadowing warnings on nested container_of() calls, and remove
    unnecessary parentheses.

- core:

  - Add driver name to probe debug print for initcall_debug.

  - Avoid repeatedly printing the same 'Fixed dependency cycle' log.

  - Unwind device_add() on attribute creation failure in
    attribute_container_add_class_device().

  - Remove statistics group if encryption group creation fails in
    transport_add_class_device().

- debugfs:

  - Fix lockdown check for mmap_prepare().

  - Warn if file creation failed due to uninitialized debugfs.

- device property:

  - Implement fw_devlink support for software nodes by adding
    software_node_add_links(), which creates fwnode links from DEV_PROP_REF
    properties to enable automatic probe ordering. Add kunit-managed fwnode
    helpers and test coverage.

  - Fix infinite loop in fwnode_for_each_child_node() when the secondary fwnode
    has more than one child. Add test cases.

  - Fix out-of-bounds access in software_node_get_reference_args() when called
    with index -1 (UINT_MAX).

  - Refactor to use RAII approach with __free().

  - Add Bartosz Golaszewski as software node reviewer.

- firmware loader:

  - Fix race where a sysfs fallback request can complete before being queued as
    pending, leading to a use-after-free on the next fallback request.

  - Reject 0-size built-in firmware and fail the build on empty firmware files
    in CONFIG_EXTRA_FIRMWARE.

- kobject:

  - Provide __KOBJ_ATTR() and __KOBJ_ATTR_RO/WO() initialization macros and
    allow the constification of kobject attributes, enabling them to reside in
    read-only memory.

- platform:

  - Provide platform_device_set_of_node(), platform_device_set_fwnode(), and
    platform_device_set_of_node_from_dev() helpers that encapsulate firmware
    node reference counting for dynamically allocated platform devices. Convert
    all in-tree users that manually assigned dev.of_node or dev.fwnode, fixing a
    pre-existing refcount bug in powermac.  Switch to counting references of all
    firmware node types, not only OF nodes.

  - Unify the release path for dynamically allocated platform devices by
    removing platform_device_release_full(). Amend the fwnode setter API
    contract to warn if a primary software node is overwritten. Add KUnit tests
    for correct software node removal on device unregistration.

- Rust:

  - Auxiliary:

    - Add registration_data_with() closure-based API for invariant ForLt types.

  - Debugfs:

    - Migrate BinaryWriter and BinaryReaderMut trait requirements from
      kernel::transmute traits to zerocopy traits.

  - Device:

    - Add BoundInternal device context and InternalBoundContext trait for bus
      abstractions that need internal access to a bound device.

    - Make the lifetime on Core and CoreInternal invariant to prevent coercion
      to shorter lifetimes.

  - Devres:

    - Fix race between concurrent revokers where the losing revoker could return
      before the winning revoker finished dropping the inner data, causing
      use-after-free.

    - Ensure revocation is complete before the device finishes unbinding by
      making the synchronization bidirectional.

    - Add DevresLt<F: ForLt>, a wrapper around Devres that shortens 'static back
      to the caller's borrow scope. Implement ForLt and CovariantForLt for Bar,
      IoMem, and ExclusiveIoMem.

  - Driver:

    - Switch from index-based to pointer-based device ID info lookup, storing
      static references in driver_data. Centralize device ID handling in
      device_id.rs, removing the open-coded ACPI/OF matching logic and duplicate
      ID table from driver.rs.

  - I/O:

    - Make I/O regions typed (with a dynamically-sized Region type for the
      existing untyped case), create view types representing subregions of a
      mapped I/O region, and add io_project!() for safely creating subviews.

    - Split Io into a base trait (IoBase) and an extension trait (Io) with a
      blanket implementation, preventing implementers from overriding provided
      methods that unsafe code relies on.

    - Add a SysMem backend for shared system memory with volatile access, and
      make Coherent implement Io via an I/O view type.  Add IoSysMap as sum type
      of Mmio and SysMem. Add copying methods (memcpy_{from,to}io()) and
      read_val()/write_val() for typed access.

    - Replace dma_read!()/dma_write!() with io_read!()/io_write!() for
      primitives and copying methods for aggregates; drop the old macros.
      Convert nova-core to use I/O projection.

    - Fix internal shortcut rule dispatch in the register!() macro, remove
      unused rule arguments, and use path fragments for alias destinations.

  - IRQ:

    - Make irq::Registration compatible with lifetime-bound drivers by
      removing the 'static bound on Handler/ThreadedHandler and
      replacing Devres<RegistrationInner> with direct
      request_irq()/free_irq() calls.  Handlers can now directly own
      lifetime-bound device resources.

  - PCI:

    - Convert IrqVectorRegistration to a lifetime-annotated owning type,
      giving drivers explicit control over the allocation lifetime.
      IrqVector embeds a resolved IrqRequest, making the conversion
      infallible. Remove the redundant
      request_irq()/request_threaded_irq() wrappers from pci::Device.

    - Add pci_irq_type() C helper and expose it via irq_type() on
      IrqVectorRegistration and IrqVector, returning PCI_IRQ_MSIX, PCI_IRQ_MSI,
      or PCI_IRQ_INTX.

    - Mark pci::Device refcount methods inline.

  - Serdev:

    - Add Rust abstractions for the serial device bus, including serdev::Driver
      trait, serdev::Device wrapping struct serdev_device, and serdev::Adapter
      implementing RegistrationOps.  Includes a sample driver. Markus Probst
      takes over as serdev maintainer for both C and Rust code.

  - Misc:

    - Split ForLt into a base trait (providing the Of<'a> GAT) and an unsafe
      CovariantForLt subtrait guaranteeing covariance, enabling invariant types
      (e.g. those containing Mutex<&'bound T>) to participate in the ForLt
      abstraction.

    - Fix Coherent read past EOF returning -ERANGE instead of zero.

    - Fix firmware example UB by avoiding null-pointer ARef.

- misc:

  - Avoid iattr allocation in kernfs listxattr by using kernfs_iattrs_noalloc().
  - Unregister SoC bus on early device registration failure.
  - Remove unused DMA_FENCE_TRACE Kconfig symbol.
  - Fix /sys/module path in comment.
  - Refactor ISA bus init to remove nested blocks.
  - Remove redundant nodemask clears in numa_init().
  - Add kernel-doc for fwnode_operations and sys_soc.h, mark internal property
    data as private for kernel-doc, and add property.h/fwnode.h to driver-api
    infrastructure docs.
  - Add MAINTAINERS entry for sys_soc.h.

----------------------------------------------------------------
Alban Bedel (1):
      software node: Fix software_node_get_reference_args() with index -1

Alexandre Courbot (3):
      rust: io: register: dispatch shortcut rules internally
      rust: io: register: remove unused rule arguments
      rust: io: register: use path fragment for alias destination

Andy Shevchenko (1):
      device property: Refactor to use RAII approach

Bartosz Golaszewski (32):
      powerpc/powermac: fix OF node refcount
      driver core: platform: provide platform_device_set_of_node()
      driver core: platform: provide platform_device_set_fwnode()
      driver core: platform: provide platform_device_set_of_node_from_dev()
      driver core: update kerneldoc for platform_device_alloc()
      of: platform: use platform_device_set_of_node()
      powerpc/powermac: use platform_device_set_of_node()
      i2c: pxa-pci: use platform_device_set_of_node()
      iommu/fsl: use platform_device_set_of_node()
      net: bcmgenet: use platform_device_set_of_node()
      pmdomain: imx: use platform_device_set_of_node()
      mfd: tps6586: use platform_device_set_of_node()
      slimbus: qcom-ngd-ctrl: use platform_device_set_of_node()
      net: mv643xx: use platform_device_set_of_node()
      drm/xe/i2c: use platform_device_set_fwnode()
      platform/surface: gpe: use platform_device_set_fwnode()
      usb: chipidea: use platform_device_set_of_node_from_dev()
      usb: musb: use platform_device_set_of_node_from_dev()
      reset: rzg2l: use platform_device_set_of_node_from_dev()
      driver core: platform: count references to all kinds of firmware nodes
      kunit: provide a set of fwnode-oriented helpers
      software node: add fw_devlink support
      software node: add kunit tests for fw_devlink support
      MAINTAINERS: add myself as reviewer of software node support
      driver core: platform: amend the API contract for fwnode setters
      platform/surface: gpe: use platform_device_register_full()
      drm/xe/i2c: use device_create_managed_software_node()
      driver core: platform: unify release path
      driver core: platform: tests: add test cases for correct swnode removal
      platform/surface: gpe: add missing err.h include
      ACPI/APMT: use platform_device_set_fwnode()
      ACPI/IORT: use platform_device_set_fwnode()

Chun-Yi Lee (1):
      debugfs: Fix lockdown check for mmap_prepare

Danilo Krummrich (24):
      rust: types: rename ForLt to CovariantForLt
      rust: types: introduce ForLt base trait for CovariantForLt
      rust: auxiliary: add registration_data_with() for ForLt types
      rust: auxiliary: sample: demonstrate ForLt with invariant Mutex type
      rust: devres: add DevresLt for ForLt-aware device resource access
      rust: pci: return DevresLt from Bar::into_devres()
      rust: io: mem: return DevresLt from IoMem/ExclusiveIoMem::into_devres()
      Merge patch series "ForLt/CovariantForLt split, auxiliary closure API and DevresLt"
      Merge patch series "rust: I/O type generalization and projection"
      rust: devres: fix race between concurrent revokers
      rust: devres: ensure revocation is complete before device finishes unbinding
      Merge patch series "software node: provide support for fw_devlink"
      rust: device: add BoundInternal device context and InternalBoundContext trait
      rust: device: move drvdata_borrow() to InternalBoundContext
      fwnode: add missing kernel-doc for struct fwnode_operations members
      MAINTAINERS: add sys_soc.h to DRIVER CORE
      rust: irq: make Registration compatible with lifetime-bound drivers
      Merge tag 'v7.2-rc7' into driver-core-next
      rust: serdev: use ThisModule::as_ptr() instead of field access
      rust: pci: convert IrqVectorRegistration to a lifetime-managed owning type
      rust: pci: resolve IRQ in index() and embed IrqRequest in IrqVector
      rust: pci: remove request_irq() and request_threaded_irq() from Device
      PCI: Add pci_irq_type() to query the allocated interrupt type
      rust: pci: expose the allocated interrupt type

David Laight (1):
      kernfs: Replace strcpy(s, "../") with memcpy(s, "../", 4)

Dmitry Antipov (1):
      kernfs: simplify kernfs_name_hash()

Dmitry Torokhov (2):
      firmware_loader: builtin: ignore 0-size firmware
      firmware_loader: builtin: fail build on empty firmware

Ethan Plant (1):
      rust: pci: Mark Device refcount methods inline

Ewan D. Milne (1):
      drivers: base: Remove statistics group if encryption group not created

Francesco Valla (1):
      driver core: add driver name to probe debug print

Gary Guo (33):
      rust: io: add dynamically-sized `Region` type
      rust: io: add missing safety requirement in `IoCapable` methods
      rust: io: restrict untyped IO access and `register!` to `Region`
      rust: io: implement `Io` on reference types instead
      rust: io: generalize `MmioRaw` to pointer to arbitrary type
      rust: io: rename `Mmio` to `MmioOwned`
      rust: io: implement `Mmio` as view type
      rust: pci: io: make `ConfigSpace` a view
      rust: io: use view types instead of addresses for `Io`
      pwm: th1520: remove unnecessary `deref`
      rust: io: remove `MmioOwned`
      rust: io: move `Io` methods to extension trait
      rust: io: add projection macro and methods
      rust: io: implement a view type for `Coherent`
      rust: io: add `read_val` and `write_val` functions on `Io`
      gpu: nova-core: use I/O projection for cleaner encapsulation
      rust: dma: drop `dma_read!` and `dma_write!` API
      rust: io: add copying methods
      rust: io: implement `IoSysMap`
      rust: device: make lifetime on `Core` and `CoreInternal` invariant
      rust: io: document const-offset requirement for infallible accessors
      samples: rust: debugfs: fix excessive stack use
      rust: devres: use `cast_pin_init` instead of manual reimplementation
      rust: driver: remove `IdTable::id`
      rust: driver: simplify `IdArray::new_without_index`
      rust: pci: use `Option<&IdInfo>` for device ID info
      rust: usb: use `Option<&IdInfo>` for device ID info
      rust: driver: centralize device ID handling
      rust: driver: remove `$module_table_name` from `module_device_table`
      rust: driver: store pointers in `DeviceId`
      rust: driver: remove open-coded matching logic
      rust: driver: remove duplicate ID table
      rust: net/phy: remove expansion from doc

Geert Uytterhoeven (1):
      base: Remove unused DMA_FENCE_TRACE Kconfig symbol

Guru Das Srinagesh (1):
      samples: rust_dma: use vertical import style

Josef Ippisch (2):
      rust: debugfs: migrate debugfs traits requirements to zerocopy
      rust: debugfs: remove unsafe blocks from traits impl for Vec

Laura Nao (1):
      rust: io: add I/O backend for system memory with volatile access

Link Mauve (1):
      rust: io: fix example in `register!` macro

Manuel Ebner (1):
      docs: ABI: sysfs-uevent: add missing bracket

Markus Probst (3):
      rust: add basic serial device bus abstractions
      samples: rust: add Rust serial device bus sample device driver
      MAINTAINERS: serdev: Add self for serdev

Miguel Ojeda (1):
      rust: firmware: avoid UB in example by passing parameter

Mukesh Ojha (1):
      firmware_loader: do not queue completed sysfs fallback requests

Randy Dunlap (3):
      device property: mark internal data as private for kernel-doc
      base: soc: fixup sys_soc.h kernel-doc warnings
      docs/driver-api: infrastructure: add property.h and fwnode.h

Sang-Heon Jeon (1):
      arch_numa: remove redundant nodemask clears in numa_init()

Syed Nayyar Waris (1):
      isa: refactor code to remove nested blocks

Thomas Weißschuh (4):
      kobject: Provide macros to initialize 'struct kobj_attribute'
      samples/kobject: Switch to the new __KOBJ_ATTR() macro
      kobject: Allow the constification of kobject attributes
      samples/kobject: Constify kobject attributes

Vincent Mailhol (3):
      container_of: apply typeof_member() to container_of()
      container_of: remove useless pair of parentheses
      container_of: remove local __mptr variable

Xu Yang (4):
      driver core: avoid repeatedly printing the same 'Fixed dependency' log
      device property: fix infinite loop in fwnode_for_each_child_node()
      of: kobj: export of_node_ktype for use by modules
      device property: add test cases for fwnode_for_each_child_node()

Yichong Chen (1):
      kernfs: avoid iattr allocation in listxattr

Yohei Kojima (1):
      debugfs: warn if file creation failed due to uninitialized debugfs

Younes Akhouayri (2):
      rust: irq: fix C header path in module docs
      rust: dma: return zero for Coherent reads past EOF

Yuho Choi (2):
      driver core: attribute_container: Unwind device_add() on attr failure
      driver core: soc: Unregister bus on early device registration failure

Zenghui Yu (1):
      driver core: fix path of /sys/module in comment

 Documentation/ABI/testing/sysfs-uevent        |    2 +-
 Documentation/driver-api/infrastructure.rst   |    4 +
 MAINTAINERS                                   |    9 +-
 arch/powerpc/platforms/powermac/low_i2c.c     |    2 +-
 drivers/acpi/arm64/apmt.c                     |    2 +-
 drivers/acpi/arm64/iort.c                     |    2 +-
 drivers/acpi/bus.c                            |    6 +-
 drivers/base/Kconfig                          |    9 -
 drivers/base/arch_numa.c                      |    4 -
 drivers/base/attribute_container.c            |    7 +-
 drivers/base/core.c                           |    8 +-
 drivers/base/dd.c                             |    4 +-
 drivers/base/firmware_loader/builtin/Makefile |   32 ++-
 drivers/base/firmware_loader/builtin/main.c   |    2 +
 drivers/base/firmware_loader/fallback.c       |   10 +
 drivers/base/isa.c                            |   16 +-
 drivers/base/module.c                         |    2 +-
 drivers/base/platform.c                       |   90 ++++++-
 drivers/base/property.c                       |   41 +--
 drivers/base/soc.c                            |   15 +-
 drivers/base/swnode.c                         |   81 +++++-
 drivers/base/test/Kconfig                     |    6 +
 drivers/base/test/Makefile                    |    2 +
 drivers/base/test/platform-device-test.c      |  180 +++++++++++++
 drivers/base/test/property-entry-test.c       |  137 ++++++++++
 drivers/base/test/swnode-devlink-test.c       |  337 +++++++++++++++++++++++
 drivers/base/transport_class.c                |    5 +-
 drivers/cpufreq/rcpufreq_dt.rs                |    1 -
 drivers/gpu/drm/nova/driver.rs                |    1 -
 drivers/gpu/drm/tyr/driver.rs                 |    1 -
 drivers/gpu/drm/xe/xe_i2c.c                   |   22 +-
 drivers/gpu/drm/xe/xe_i2c.h                   |    1 -
 drivers/gpu/nova-core/driver.rs               |    7 +-
 drivers/gpu/nova-core/gpu.rs                  |    6 +-
 drivers/gpu/nova-core/gsp.rs                  |   53 ++--
 drivers/gpu/nova-core/gsp/cmdq.rs             |   66 +++--
 drivers/gpu/nova-core/gsp/fw.rs               |   82 ++----
 drivers/i2c/busses/i2c-pxa-pci.c              |    3 +-
 drivers/iommu/fsl_pamu.c                      |   16 +-
 drivers/mfd/tps6586x.c                        |    2 +-
 drivers/net/ethernet/broadcom/genet/bcmmii.c  |    3 +-
 drivers/net/ethernet/marvell/mv643xx_eth.c    |    2 +-
 drivers/of/kobj.c                             |    3 +
 drivers/of/platform.c                         |    2 +-
 drivers/platform/surface/surface_gpe.c        |   40 +--
 drivers/pmdomain/imx/gpc.c                    |    3 +-
 drivers/pwm/pwm_th1520.rs                     |   13 +-
 drivers/reset/reset-rzg2l-usbphy-ctrl.c       |    2 +-
 drivers/slimbus/qcom-ngd-ctrl.c               |    2 +-
 drivers/tty/serdev/Kconfig                    |    7 +
 drivers/usb/chipidea/core.c                   |    2 +-
 drivers/usb/musb/jz4740.c                     |    2 +-
 fs/debugfs/file.c                             |    3 +-
 fs/debugfs/inode.c                            |    5 +-
 fs/kernfs/dir.c                               |    4 +-
 fs/kernfs/inode.c                             |    4 +-
 fs/kernfs/symlink.c                           |    2 +-
 include/acpi/acpi_bus.h                       |   11 -
 include/kunit/fwnode.h                        |   29 ++
 include/linux/container_of.h                  |    5 +-
 include/linux/fwnode.h                        |    4 +
 include/linux/kobject.h                       |   75 +++++-
 include/linux/pci.h                           |   30 +++
 include/linux/platform_device.h               |    8 +
 include/linux/property.h                      |    2 +
 include/linux/sys_soc.h                       |    9 +-
 lib/kobject.c                                 |    8 +-
 lib/kunit/Makefile                            |    1 +
 lib/kunit/fwnode.c                            |  146 ++++++++++
 rust/bindings/bindings_helper.h               |    1 +
 rust/helpers/acpi.c                           |   16 --
 rust/helpers/helpers.c                        |    2 +-
 rust/helpers/io.c                             |   13 +
 rust/helpers/pci.c                            |    5 +
 rust/helpers/serdev.c                         |   22 ++
 rust/kernel/acpi.rs                           |   14 +-
 rust/kernel/auxiliary.rs                      |   96 ++++---
 rust/kernel/debugfs/traits.rs                 |   41 +--
 rust/kernel/device.rs                         |   71 +++--
 rust/kernel/device_id.rs                      |  196 +++++++-------
 rust/kernel/devres.rs                         |  151 ++++++++++-
 rust/kernel/dma.rs                            |  287 +++++++++++---------
 rust/kernel/driver.rs                         |  137 +---------
 rust/kernel/firmware.rs                       |    8 +-
 rust/kernel/i2c.rs                            |   26 +-
 rust/kernel/io.rs                             | 1519 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
 rust/kernel/io/mem.rs                         |   94 ++++---
 rust/kernel/io/poll.rs                        |    6 +-
 rust/kernel/io/register.rs                    |   86 +++---
 rust/kernel/irq.rs                            |    2 +-
 rust/kernel/irq/request.rs                    |  432 ++++++++++++++----------------
 rust/kernel/lib.rs                            |    5 +
 rust/kernel/net/phy.rs                        |   66 +----
 rust/kernel/of.rs                             |   14 +-
 rust/kernel/pci.rs                            |   32 +--
 rust/kernel/pci/io.rs                         |  203 ++++++++------
 rust/kernel/pci/irq.rs                        |  210 +++++++--------
 rust/kernel/platform.rs                       |   53 ++--
 rust/kernel/ptr.rs                            |   12 +
 rust/kernel/serdev.rs                         |  604 +++++++++++++++++++++++++++++++++++++++++
 rust/kernel/types.rs                          |    5 +-
 rust/kernel/types/for_lt.rs                   |  103 +++++--
 rust/kernel/usb.rs                            |   24 +-
 rust/macros/for_lt.rs                         |   41 ++-
 rust/macros/lib.rs                            |   18 +-
 samples/kobject/kobject-example.c             |   24 +-
 samples/rust/Kconfig                          |   11 +
 samples/rust/Makefile                         |    1 +
 samples/rust/rust_debugfs.rs                  |    5 +-
 samples/rust/rust_debugfs_scoped.rs           |    5 +-
 samples/rust/rust_dma.rs                      |   25 +-
 samples/rust/rust_driver_auxiliary.rs         |  100 ++++---
 samples/rust/rust_driver_i2c.rs               |    3 -
 samples/rust/rust_driver_pci.rs               |    4 +-
 samples/rust/rust_driver_platform.rs          |    2 -
 samples/rust/rust_driver_serdev.rs            |   88 ++++++
 samples/rust/rust_driver_usb.rs               |    3 +-
 samples/rust/rust_i2c_client.rs               |    2 -
 samples/rust/rust_soc.rs                      |    2 -
 119 files changed, 4751 insertions(+), 1842 deletions(-)
 create mode 100644 drivers/base/test/swnode-devlink-test.c
 create mode 100644 include/kunit/fwnode.h
 create mode 100644 lib/kunit/fwnode.c
 delete mode 100644 rust/helpers/acpi.c
 create mode 100644 rust/helpers/serdev.c
 create mode 100644 rust/kernel/serdev.rs
 create mode 100644 samples/rust/rust_driver_serdev.rs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.