projects/linux·commit 36808d5e

Merge tag 'driver-core-7.2-rc1' of gitolite.kernel.org:pub/scm/linux/kernel/git/driver-core/driver-core

36808d5e · Linus Torvalds <[email protected]> · 2026-06-15 12:41:17 +05:30

Pull driver core updates from Danilo Krummrich:
 "Deferred probe:
   - Fix race where deferred probe timeout work could be permanently
     canceled by using mod_delayed_work()
   - Fix missing jiffies conversion in deferred_probe_extend_timeout()
   - Guard timeout extension with delayed_work_pending() to prevent
     premature firing
   - Use system_percpu_wq instead of the deprecated system_wq
   - Update deferred_probe_timeout documentation

  device:
   - Replace direct struct device bitfield access (can_match, dma_iommu,
     dma_skip_sync, dma_ops_bypass, state_synced, dma_coherent,
     of_node_reused, offline, offline_disabled) with flag-based
     accessors using bit operations
   - Reject devices with unregistered buses
   - Delete unused DEVICE_ATTR_PREALLOC()
   - Add low-level device attribute macros with const show/store
     callbacks, allowing device attributes to reside in read-only memory
   - Move core device attributes to read-only memory
   - Constify group array pointers in driver_add_groups() /
     driver_remove_groups(), struct bus_type, and struct device_driver

  device property:
   - Fix fwnode reference leak in fwnode_graph_get_endpoint_by_id()
   - Initialize all fields of fwnode_handle in fwnode_init()
   - Provide swnode_get()/swnode_put() wrappers around kobject_get/put()
   - Allow passing struct software_node_ref_args pointers directly to
     PROPERTY_ENTRY_REF()

  driver_override:
   - Migrate amba, cdx, vmbus, and rpmsg to the generic driver_override
     infrastructure, fixing a UAF from unsynchronized access to
     driver_override in bus match() callbacks
   - Remove the now-unused driver_set_override()

  firmware loader:
   - Fix recursive lock deadlock in device_cache_fw_images() when async
     work falls back to synchronous execution
   - Fix device reference leak in firmware_upload_register()

  platform:
   - Pass KBUILD_MODNAME through the platform driver registration macro
     to create module symlinks in sysfs for built-in drivers; move
     module_kset initialization to a pure_initcall and tegra cbb
     registration to core_initcall to ensure correct ordering
   - Pass THIS_MODULE implicitly through a coresight_init_driver() macro

  sysfs:
   - Upgrade OOB write detection in sysfs_kf_seq_show() from printk to
     WARN
   - Add return value clamping to sysfs_kf_read()

  Rust:
   - ACPI:

     Fix missing match data for PRP0001 by exporting
     acpi_of_match_device()

   - Auxiliary:

     Replace drvdata() with dedicated registration data on
     auxiliary_device. drvdata() exposed the driver's bus device private
     data beyond the driver's own scope, creating ordering constraints
     and forcing the data to outlive all registrations that access it.
     Registration data is instead scoped structurally to the
     Registration object, making lifecycle ordering enforced by
     construction rather than convention.

   - Rust-native device driver lifetimes (HRT):

     Allow Rust device drivers to carry a lifetime parameter on their
     bus device private data, tied to the device binding scope -- the
     interval during which a bus device is bound to a driver. Device
     resources like pci::Bar<'a> and IoMem<'a> can be stored directly in
     the driver's bus device private data with a lifetime bounded by the
     binding scope, so the compiler enforces at build time that they do
     not outlive the binding. This removes Devres indirection from every
     access site and eliminates try_access() failure paths in
     destructors.

     Bus driver traits use a Generic Associated Type (GAT) Data<'bound>
     to introduce the lifetime on the private data, rather than
     parameterizing the Driver trait itself. Auxiliary registration
     data, where the lifetime is not introduced by a trait callback but
     must be threaded through Registration, uses the ForLt trait (a
     type-level abstraction for types generic over a lifetime).

  Misc:
   - Fix DT overlayed devices not probing by reverting the broken
     treewide overlay fix and re-running fw_devlink consumer pickup when
     an overlay is applied to a bound device
   - Use root_device_register() for faux bus root device; add sanity
     check for failed bus init
   - Fix dev_has_sync_state() data race with READ_ONCE() and move it to
     base.h
   - Avoid spurious device_links warning when removing a device while
     its supplier is unbinding
   - Switch ISA bus to dynamic root device
   - Fix suspicious RCU usage in kernfs_put()
   - Remove devcoredump exit callback
   - Constify devfreq_event_class"

* tag 'driver-core-7.2-rc1' of gitolite.kernel.org:pub/scm/linux/kernel/git/driver-core/driver-core: (81 commits)
  software node: allow passing reference args to PROPERTY_ENTRY_REF()
  driver core: platform: set mod_name in driver registration
  coresight: pass THIS_MODULE implicitly through a macro
  kernel: param: initialize module_kset in a pure_initcall
  soc/tegra: cbb: Move driver registration from pure_initcall to core_initcall
  firmware_loader: Fix recursive lock in device_cache_fw_images()
  driver core: Use system_percpu_wq instead of system_wq
  driver core: remove driver_set_override()
  rpmsg: use generic driver_override infrastructure
  Drivers: hv: vmbus: use generic driver_override infrastructure
  cdx: use generic driver_override infrastructure
  amba: use generic driver_override infrastructure
  rust: devres: add 'static bound to Devres<T>
  samples: rust: rust_driver_auxiliary: showcase lifetime-bound registration data
  rust: auxiliary: generalize Registration over ForLt
  rust: types: add `ForLt` trait for higher-ranked lifetime support
  gpu: nova-core: separate driver type from driver data
  samples: rust: rust_driver_pci: use HRT lifetime for Bar
  rust: io: make IoMem and ExclusiveIoMem lifetime-parameterized
  rust: pci: make Bar lifetime-parameterized
  ...
Commit
36808d5e983985bbda87e01059cccc071fe3ec8d
Parents
5504ce03 · fe221742

Merge commit. Changes below are compared with the first parent: 5504ce03.

Changes

128 files changed · +1814 −1134

FileStatusAddDelContent
Documentation/admin-guide/kernel-parameters.txtmodified+3−2View file
Documentation/driver-api/driver-model/platform.rstmodified+2−1View file
MAINTAINERSmodified+1−0View file
arch/arc/mm/dma.cmodified+2−2View file
arch/arm/mach-highbank/highbank.cmodified+1−1View file
arch/arm/mach-mvebu/coherency.cmodified+1−1View file
arch/arm/mm/dma-mapping-nommu.cmodified+2−2View file
arch/arm/mm/dma-mapping.cmodified+14−14View file
arch/arm64/kernel/cpufeature.cmodified+1−1View file
arch/arm64/mm/dma-mapping.cmodified+1−1View file
arch/mips/include/asm/mips_mt.hmodified+0−1View file
arch/mips/mm/dma-noncoherent.cmodified+1−1View file
arch/powerpc/kernel/dma-iommu.cmodified+4−4View file
arch/powerpc/platforms/pseries/hotplug-memory.cmodified+2−2View file
arch/riscv/mm/dma-noncoherent.cmodified+1−1View file
drivers/acpi/bus.cmodified+3−3View file
drivers/acpi/scan.cmodified+1−1View file
drivers/amba/bus.cmodified+6−31View file
drivers/base/base.hmodified+18−18View file
drivers/base/bus.cmodified+9−2View file
drivers/base/core.cmodified+125−59View file
drivers/base/cpu.cmodified+2−2View file
drivers/base/dd.cmodified+12−15View file
drivers/base/devcoredump.cmodified+0−7View file
drivers/base/driver.cmodified+2−77View file
drivers/base/faux.cmodified+15−17View file
drivers/base/firmware_loader/main.cmodified+2−1View file
drivers/base/firmware_loader/sysfs_upload.cmodified+3−5View file
drivers/base/isa.cmodified+6−6View file
drivers/base/memory.cmodified+1−1View file
drivers/base/pinctrl.cmodified+1−1View file
drivers/base/platform.cmodified+15−8View file
drivers/base/property.cmodified+3−1View file
drivers/base/swnode.cmodified+24−16View file
drivers/bus/imx-weim.cmodified+0−6View file
drivers/cdx/cdx.cmodified+5−35View file
drivers/cpufreq/rcpufreq_dt.rsmodified+5−4View file
drivers/devfreq/devfreq-event.cmodified+13−10View file
drivers/dma/ti/k3-udma-glue.cmodified+3−3View file
drivers/dma/ti/k3-udma.cmodified+3−3View file
drivers/gpu/drm/nova/driver.rsmodified+5−1View file
drivers/gpu/drm/tyr/driver.rsmodified+7−6View file
drivers/gpu/nova-core/driver.rsmodified+23−15View file
drivers/gpu/nova-core/gpu.rsmodified+1−1View file
drivers/gpu/nova-core/nova_core.rsmodified+1−1View file
drivers/hv/vmbus_drv.cmodified+10−33View file
drivers/hwtracing/coresight/coresight-catu.cmodified+1−1View file
drivers/hwtracing/coresight/coresight-core.cmodified+5−4View file
drivers/hwtracing/coresight/coresight-cpu-debug.cmodified+1−2View file
drivers/hwtracing/coresight/coresight-funnel.cmodified+1−2View file
drivers/hwtracing/coresight/coresight-replicator.cmodified+1−2View file
drivers/hwtracing/coresight/coresight-stm.cmodified+1−1View file
drivers/hwtracing/coresight/coresight-tmc-core.cmodified+1−1View file
drivers/hwtracing/coresight/coresight-tnoc.cmodified+1−1View file
drivers/hwtracing/coresight/coresight-tpdm.cmodified+1−2View file
drivers/hwtracing/coresight/coresight-tpiu.cmodified+1−1View file
drivers/i2c/i2c-core-of.cmodified+0−5View file
drivers/iommu/dma-iommu.cmodified+6−3View file
drivers/iommu/iommu.cmodified+2−3View file
drivers/net/pcs/pcs-xpcs-plat.cmodified+1−1View file
drivers/of/device.cmodified+3−3View file
drivers/of/dynamic.cmodified+0−1View file
drivers/of/overlay.cmodified+15−0View file
drivers/of/platform.cmodified+0−5View file
drivers/pci/of.cmodified+1−1View file
drivers/pci/pwrctrl/core.cmodified+1−1View file
drivers/pwm/pwm_th1520.rsmodified+7−6View file
drivers/rpmsg/qcom_glink_native.cmodified+0−2View file
drivers/rpmsg/rpmsg_core.cmodified+7−36View file
drivers/rpmsg/virtio_rpmsg_bus.cmodified+0−1View file
drivers/soc/tegra/cbb/tegra194-cbb.cmodified+1−1View file
drivers/soc/tegra/cbb/tegra234-cbb.cmodified+1−1View file
drivers/spi/spi.cmodified+0−5View file
drivers/tty/serial/serial_base_bus.cmodified+1−1View file
drivers/usb/gadget/udc/aspeed-vhub/dev.cmodified+1−1View file
fs/kernfs/dir.cmodified+7−4View file
fs/sysfs/file.cmodified+6−3View file
include/acpi/acpi_bus.hmodified+11−0View file
include/linux/amba/bus.hmodified+0−5View file
include/linux/auxiliary_bus.hmodified+4−0View file
include/linux/cdx/cdx_bus.hmodified+0−4View file
include/linux/coresight.hmodified+5−2View file
include/linux/device.hmodified+136−85View file
include/linux/device/bus.hmodified+3−3View file
include/linux/device/class.hmodified+1−1View file
include/linux/device/driver.hmodified+4−6View file
include/linux/dma-map-ops.hmodified+3−3View file
include/linux/dma-mapping.hmodified+1−1View file
include/linux/fwnode.hmodified+3−0View file
include/linux/hyperv.hmodified+0−5View file
include/linux/iommu-dma.hmodified+2−1View file
include/linux/platform_device.hmodified+9−8View file
include/linux/property.hmodified+7−1View file
include/linux/rpmsg.hmodified+0−4View file
kernel/cpu.cmodified+2−2View file
kernel/dma/mapping.cmodified+5−7View file
kernel/params.cmodified+4−4View file
mm/hmm.cmodified+1−1View file
rust/Makefilemodified+1−0View file
rust/helpers/acpi.cadded+16−0View file
rust/helpers/helpers.cmodified+1−0View file
rust/kernel/alloc/kbox.rsmodified+39−6View file
rust/kernel/auxiliary.rsmodified+213−72View file
rust/kernel/cpufreq.rsmodified+5−4View file
rust/kernel/device.rsmodified+46−75View file
rust/kernel/devres.rsmodified+4−4View file
rust/kernel/dma.rsmodified+1−1View file
rust/kernel/driver.rsmodified+88−27View file
rust/kernel/i2c.rsmodified+34−27View file
rust/kernel/io/mem.rsmodified+62−59View file
rust/kernel/pci.rsmodified+31−20View file
rust/kernel/pci/id.rsmodified+1−1View file
rust/kernel/pci/io.rsmodified+31−23View file
rust/kernel/platform.rsmodified+33−23View file
rust/kernel/types.rsmodified+10−2View file
rust/kernel/types/for_lt.rsadded+122−0View file
rust/kernel/usb.rsmodified+36−21View file
rust/macros/for_lt.rsadded+248−0View file
rust/macros/lib.rsmodified+13−0View file
samples/rust/rust_debugfs.rsmodified+6−5View file
samples/rust/rust_dma.rsmodified+5−1View file
samples/rust/rust_driver_auxiliary.rsmodified+56−23View file
samples/rust/rust_driver_i2c.rsmodified+7−6View file
samples/rust/rust_driver_pci.rsmodified+43−47View file
samples/rust/rust_driver_platform.rsmodified+5−4View file
samples/rust/rust_driver_usb.rsmodified+8−7View file
samples/rust/rust_i2c_client.rsmodified+9−5View file
samples/rust/rust_soc.rsmodified+5−4View file

Only the first 600 diff lines are shown. Download the complete patch.

Documentation/admin-guide/kernel-parameters.txt

View file
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index b69482b..f68bf1c 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1228,8 +1228,9 @@ Kernel parameters
deferred probe to give up waiting on dependencies to
probe. Only specific dependencies (subsystems or
drivers) that have opted in will be ignored. A timeout
- of 0 will timeout at the end of initcalls. If the time
- out hasn't expired, it'll be restarted by each
+ of 0 will timeout at the end of initcalls; a negative
+ value is treated as an infinite timeout value. If the
+ timeout hasn't expired, it'll be restarted by each
successful driver registration. This option will also
dump out devices still on the deferred probe list after
retrying.

Documentation/driver-api/driver-model/platform.rst

View file
diff --git a/Documentation/driver-api/driver-model/platform.rst b/Documentation/driver-api/driver-model/platform.rst
index cf5ff48..9673470 100644
--- a/Documentation/driver-api/driver-model/platform.rst
+++ b/Documentation/driver-api/driver-model/platform.rst
@@ -70,7 +70,8 @@ Kernel modules can be composed of several platform drivers. The platform core
provides helpers to register and unregister an array of drivers::
int __platform_register_drivers(struct platform_driver * const *drivers,
- unsigned int count, struct module *owner);
+ unsigned int count, struct module *owner,
+ const char *mod_name);
void platform_unregister_drivers(struct platform_driver * const *drivers,
unsigned int count);

MAINTAINERS

View file
diff --git a/MAINTAINERS b/MAINTAINERS
index 8c07f13..8b84724 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -297,6 +297,7 @@ F: include/linux/acpi.h
F: include/linux/fwnode.h
F: include/linux/fw_table.h
F: lib/fw_table.c
+F: rust/helpers/acpi.c
F: rust/kernel/acpi.rs
F: tools/power/acpi/

arch/arc/mm/dma.c

View file
diff --git a/arch/arc/mm/dma.c b/arch/arc/mm/dma.c
index 6b85e94..9b9adb0 100644
--- a/arch/arc/mm/dma.c
+++ b/arch/arc/mm/dma.c
@@ -98,8 +98,8 @@ void arch_setup_dma_ops(struct device *dev, bool coherent)
* DMA buffers.
*/
if (is_isa_arcv2() && ioc_enable && coherent)
- dev->dma_coherent = true;
+ dev_set_dma_coherent(dev);
dev_info(dev, "use %scoherent DMA ops\n",
- dev->dma_coherent ? "" : "non");
+ dev_dma_coherent(dev) ? "" : "non");
}

arch/arm/mach-highbank/highbank.c

View file
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c
index 47335c7..8b7d092 100644
--- a/arch/arm/mach-highbank/highbank.c
+++ b/arch/arm/mach-highbank/highbank.c
@@ -98,7 +98,7 @@ static int highbank_platform_notifier(struct notifier_block *nb,
if (of_property_read_bool(dev->of_node, "dma-coherent")) {
val = readl(sregs_base + reg);
writel(val | 0xff01, sregs_base + reg);
- dev->dma_coherent = true;
+ dev_set_dma_coherent(dev);
}
return NOTIFY_OK;

arch/arm/mach-mvebu/coherency.c

View file
diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
index fa2c1e1..7234d48 100644
--- a/arch/arm/mach-mvebu/coherency.c
+++ b/arch/arm/mach-mvebu/coherency.c
@@ -95,7 +95,7 @@ static int mvebu_hwcc_notifier(struct notifier_block *nb,
if (event != BUS_NOTIFY_ADD_DEVICE)
return NOTIFY_DONE;
- dev->dma_coherent = true;
+ dev_set_dma_coherent(dev);
return NOTIFY_OK;
}

arch/arm/mm/dma-mapping-nommu.c

View file
diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c
index fecac10..c6a7068 100644
--- a/arch/arm/mm/dma-mapping-nommu.c
+++ b/arch/arm/mm/dma-mapping-nommu.c
@@ -42,11 +42,11 @@ void arch_setup_dma_ops(struct device *dev, bool coherent)
* enough to check if MPU is in use or not since in absence of
* MPU system memory map is used.
*/
- dev->dma_coherent = cacheid ? coherent : true;
+ dev_assign_dma_coherent(dev, cacheid ? coherent : true);
} else {
/*
* Assume coherent DMA in case MMU/MPU has not been set up.
*/
- dev->dma_coherent = (get_cr() & CR_M) ? coherent : true;
+ dev_assign_dma_coherent(dev, (get_cr() & CR_M) ? coherent : true);
}
}

arch/arm/mm/dma-mapping.c

View file
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index f304037..f9bc53b 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -1076,7 +1076,7 @@ static void *arm_iommu_alloc_attrs(struct device *dev, size_t size,
pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL);
struct page **pages;
void *addr = NULL;
- int coherent_flag = dev->dma_coherent ? COHERENT : NORMAL;
+ int coherent_flag = dev_dma_coherent(dev) ? COHERENT : NORMAL;
*handle = DMA_MAPPING_ERROR;
size = PAGE_ALIGN(size);
@@ -1124,7 +1124,7 @@ static int arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
if (vma->vm_pgoff >= nr_pages)
return -ENXIO;
- if (!dev->dma_coherent)
+ if (!dev_dma_coherent(dev))
vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot);
err = vm_map_pages(vma, pages, nr_pages);
@@ -1141,7 +1141,7 @@ static int arm_iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
static void arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr,
dma_addr_t handle, unsigned long attrs)
{
- int coherent_flag = dev->dma_coherent ? COHERENT : NORMAL;
+ int coherent_flag = dev_dma_coherent(dev) ? COHERENT : NORMAL;
struct page **pages;
size = PAGE_ALIGN(size);
@@ -1202,7 +1202,7 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
phys_addr_t phys = page_to_phys(sg_page(s));
unsigned int len = PAGE_ALIGN(s->offset + s->length);
- if (!dev->dma_coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC))
+ if (!dev_dma_coherent(dev) && !(attrs & DMA_ATTR_SKIP_CPU_SYNC))
arch_sync_dma_for_device(sg_phys(s), s->length, dir);
prot = __dma_info_to_prot(dir, attrs);
@@ -1304,7 +1304,7 @@ static void arm_iommu_unmap_sg(struct device *dev,
if (sg_dma_len(s))
__iommu_remove_mapping(dev, sg_dma_address(s),
sg_dma_len(s));
- if (!dev->dma_coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC))
+ if (!dev_dma_coherent(dev) && !(attrs & DMA_ATTR_SKIP_CPU_SYNC))
arch_sync_dma_for_cpu(sg_phys(s), s->length, dir);
}
}
@@ -1323,7 +1323,7 @@ static void arm_iommu_sync_sg_for_cpu(struct device *dev,
struct scatterlist *s;
int i;
- if (dev->dma_coherent)
+ if (dev_dma_coherent(dev))
return;
for_each_sg(sg, s, nents, i)
@@ -1345,7 +1345,7 @@ static void arm_iommu_sync_sg_for_device(struct device *dev,
struct scatterlist *s;
int i;
- if (dev->dma_coherent)
+ if (dev_dma_coherent(dev))
return;
for_each_sg(sg, s, nents, i)
@@ -1371,7 +1371,7 @@ static dma_addr_t arm_iommu_map_phys(struct device *dev, phys_addr_t phys,
dma_addr_t dma_addr;
int ret, prot;
- if (!dev->dma_coherent &&
+ if (!dev_dma_coherent(dev) &&
!(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO)))
arch_sync_dma_for_device(phys, size, dir);
@@ -1412,7 +1412,7 @@ static void arm_iommu_unmap_phys(struct device *dev, dma_addr_t handle,
if (!iova)
return;
- if (!dev->dma_coherent &&
+ if (!dev_dma_coherent(dev) &&
!(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) {
phys_addr_t phys = iommu_iova_to_phys(mapping->domain, iova);
@@ -1431,7 +1431,7 @@ static void arm_iommu_sync_single_for_cpu(struct device *dev,
unsigned int offset = handle & ~PAGE_MASK;
phys_addr_t phys;
- if (dev->dma_coherent || !iova)
+ if (dev_dma_coherent(dev) || !iova)
return;
phys = iommu_iova_to_phys(mapping->domain, iova);
@@ -1446,7 +1446,7 @@ static void arm_iommu_sync_single_for_device(struct device *dev,
unsigned int offset = handle & ~PAGE_MASK;
phys_addr_t phys;
- if (dev->dma_coherent || !iova)
+ if (dev_dma_coherent(dev) || !iova)
return;
phys = iommu_iova_to_phys(mapping->domain, iova);
@@ -1701,13 +1701,13 @@ static void arm_teardown_iommu_dma_ops(struct device *dev) { }
void arch_setup_dma_ops(struct device *dev, bool coherent)
{
/*
- * Due to legacy code that sets the ->dma_coherent flag from a bus
- * notifier we can't just assign coherent to the ->dma_coherent flag
+ * Due to legacy code that sets the dma_coherent flag from a bus
+ * notifier we can't just assign coherent to the dma_coherent flag
* here, but instead have to make sure we only set but never clear it
* for now.
*/
if (coherent)
- dev->dma_coherent = true;
+ dev_set_dma_coherent(dev);
/*
* Don't override the dma_ops if they have already been set. Ideally

arch/arm64/kernel/cpufeature.c

View file
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index 6d53bb1..e592520 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -4052,7 +4052,7 @@ static int enable_mismatched_32bit_el0(unsigned int cpu)
*/
lucky_winner = cpu_32bit ? cpu : cpumask_any_and(cpu_32bit_el0_mask,
cpu_active_mask);
- get_cpu_device(lucky_winner)->offline_disabled = true;
+ dev_set_offline_disabled(get_cpu_device(lucky_winner));
setup_elf_hwcaps(compat_elf_hwcaps);
elf_hwcap_fixup();
pr_info("Asymmetric 32-bit EL0 support detected on CPU %u; CPU hot-unplug disabled on CPU %u\n",

arch/arm64/mm/dma-mapping.c

View file
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index ae1ae02..994b7b3 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -48,7 +48,7 @@ void arch_setup_dma_ops(struct device *dev, bool coherent)
dev_driver_string(dev), dev_name(dev),
ARCH_DMA_MINALIGN, cls);
- dev->dma_coherent = coherent;
+ dev_assign_dma_coherent(dev, coherent);
xen_setup_dma_ops(dev);
}

arch/mips/include/asm/mips_mt.h

View file
diff --git a/arch/mips/include/asm/mips_mt.h b/arch/mips/include/asm/mips_mt.h
index 6ea02af..0358489 100644
--- a/arch/mips/include/asm/mips_mt.h
+++ b/arch/mips/include/asm/mips_mt.h
@@ -23,7 +23,6 @@ extern void mips_mt_set_cpuoptions(void);
static inline void mips_mt_set_cpuoptions(void) { }
#endif
-struct class;
extern const struct class mt_class;
#endif /* __ASM_MIPS_MT_H */

arch/mips/mm/dma-noncoherent.c

View file
diff --git a/arch/mips/mm/dma-noncoherent.c b/arch/mips/mm/dma-noncoherent.c
index ab4f2a7..30ef3e2 100644
--- a/arch/mips/mm/dma-noncoherent.c
+++ b/arch/mips/mm/dma-noncoherent.c
@@ -139,6 +139,6 @@ void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size,
#ifdef CONFIG_ARCH_HAS_SETUP_DMA_OPS
void arch_setup_dma_ops(struct device *dev, bool coherent)
{
- dev->dma_coherent = coherent;
+ dev_assign_dma_coherent(dev, coherent);
}
#endif

arch/powerpc/kernel/dma-iommu.c

View file
diff --git a/arch/powerpc/kernel/dma-iommu.c b/arch/powerpc/kernel/dma-iommu.c
index 8b4de50..1f8b5a0 100644
--- a/arch/powerpc/kernel/dma-iommu.c
+++ b/arch/powerpc/kernel/dma-iommu.c
@@ -67,7 +67,7 @@ bool arch_dma_unmap_sg_direct(struct device *dev, struct scatterlist *sg,
}
bool arch_dma_alloc_direct(struct device *dev)
{
- if (dev->dma_ops_bypass && dev->bus_dma_limit)
+ if (dev_dma_ops_bypass(dev) && dev->bus_dma_limit)
return true;
return false;
@@ -75,7 +75,7 @@ bool arch_dma_alloc_direct(struct device *dev)
bool arch_dma_free_direct(struct device *dev, dma_addr_t dma_handle)
{
- if (!dev->dma_ops_bypass || !dev->bus_dma_limit)
+ if (!dev_dma_ops_bypass(dev) || !dev->bus_dma_limit)
return false;
return is_direct_handle(dev, dma_handle);
@@ -164,7 +164,7 @@ int dma_iommu_dma_supported(struct device *dev, u64 mask)
* fixed ops will be used for RAM. This is limited by
* bus_dma_limit which is set when RAM is pre-mapped.
*/
- dev->dma_ops_bypass = true;
+ dev_set_dma_ops_bypass(dev);
dev_info(dev, "iommu: 64-bit OK but direct DMA is limited by %llx\n",
dev->bus_dma_limit);
return 1;
@@ -185,7 +185,7 @@ int dma_iommu_dma_supported(struct device *dev, u64 mask)
}
dev_dbg(dev, "iommu: not 64-bit, using default ops\n");
- dev->dma_ops_bypass = false;
+ dev_clear_dma_ops_bypass(dev);
return 1;
}

arch/powerpc/platforms/pseries/hotplug-memory.c

View file
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index b2f14db..75f85a5 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -213,9 +213,9 @@ static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online)
return -EINVAL;
}
- if (online && mem_block->dev.offline)
+ if (online && dev_offline(&mem_block->dev))
rc = device_online(&mem_block->dev);
- else if (!online && !mem_block->dev.offline)
+ else if (!online && !dev_offline(&mem_block->dev))
rc = device_offline(&mem_block->dev);
else
rc = 0;

arch/riscv/mm/dma-noncoherent.c

View file
diff --git a/arch/riscv/mm/dma-noncoherent.c b/arch/riscv/mm/dma-noncoherent.c
index cb89d7e..a1ec2d7 100644
--- a/arch/riscv/mm/dma-noncoherent.c
+++ b/arch/riscv/mm/dma-noncoherent.c
@@ -140,7 +140,7 @@ void arch_setup_dma_ops(struct device *dev, bool coherent)
"%s %s: device non-coherent but no non-coherent operations supported",
dev_driver_string(dev), dev_name(dev));
- dev->dma_coherent = coherent;
+ dev_assign_dma_coherent(dev, coherent);
}
void riscv_noncoherent_supported(void)

drivers/acpi/bus.c

View file
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index b0e7181..3b7db94 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -898,9 +898,9 @@ const struct acpi_device *acpi_companion_match(const struct device *dev)
* identifiers and a _DSD object with the "compatible" property, use that
* property to match against the given list of identifiers.
*/
-static bool acpi_of_match_device(const struct acpi_device *adev,
- const struct of_device_id *of_match_table,
- const struct of_device_id **of_id)
+bool acpi_of_match_device(const struct acpi_device *adev,
+ const struct of_device_id *of_match_table,
+ const struct of_device_id **of_id)
{
const union acpi_object *of_compatible, *obj;
int i, nval;

drivers/acpi/scan.c

View file
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 075798d..9a7ac2e 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -122,7 +122,7 @@ bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent)
mutex_lock_nested(&adev->physical_node_lock, SINGLE_DEPTH_NESTING);
list_for_each_entry(pn, &adev->physical_node_list, node)
- if (device_supports_offline(pn->dev) && !pn->dev->offline) {
+ if (device_supports_offline(pn->dev) && !dev_offline(pn->dev)) {
if (uevent)
kobject_uevent_env(&pn->dev->kobj, KOBJ_CHANGE, envp);

drivers/amba/bus.c

View file
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 6d479ca..d721d64 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -82,33 +82,6 @@ static void amba_put_disable_pclk(struct amba_device *pcdev)
}
-static ssize_t driver_override_show(struct device *_dev,
- struct device_attribute *attr, char *buf)
-{
- struct amba_device *dev = to_amba_device(_dev);
- ssize_t len;
-
- device_lock(_dev);
- len = sprintf(buf, "%s\n", dev->driver_override);
- device_unlock(_dev);
- return len;
-}
-
-static ssize_t driver_override_store(struct device *_dev,
- struct device_attribute *attr,
- const char *buf, size_t count)
-{
- struct amba_device *dev = to_amba_device(_dev);
- int ret;
-
- ret = driver_set_override(_dev, &dev->driver_override, buf, count);
- if (ret)
- return ret;
-
- return count;
-}
-static DEVICE_ATTR_RW(driver_override);
-
#define amba_attr_func(name,fmt,arg...) \
static ssize_t name##_show(struct device *_dev, \
struct device_attribute *attr, char *buf) \
@@ -126,7 +99,6 @@ amba_attr_func(resource, "\t%016llx\t%016llx\t%016lx\n",
static struct attribute *amba_dev_attrs[] = {
&dev_attr_id.attr,
&dev_attr_resource.attr,
- &dev_attr_driver_override.attr,
NULL,
};
ATTRIBUTE_GROUPS(amba_dev);
@@ -209,10 +181,11 @@ static int amba_match(struct device *dev, const struct device_driver *drv)
{
struct amba_device *pcdev = to_amba_device(dev);
const struct amba_driver *pcdrv = to_amba_driver(drv);
+ int ret;
mutex_lock(&pcdev->periphid_lock);
if (!pcdev->periphid) {
- int ret = amba_read_periphid(pcdev);
+ ret = amba_read_periphid(pcdev);
/*
* Returning any error other than -EPROBE_DEFER from bus match
@@ -230,8 +203,9 @@ static int amba_match(struct device *dev, const struct device_driver *drv)
mutex_unlock(&pcdev->periphid_lock);
/* When driver_override is set, only bind to the matching driver */
- if (pcdev->driver_override)
- return !strcmp(pcdev->driver_override, drv->name);
+ ret = device_match_driver_override(dev, drv);
+ if (ret >= 0)
+ return ret;
return amba_lookup(pcdrv->id_table, pcdev) != NULL;
}
@@ -436,6 +410,7 @@ static const struct dev_pm_ops amba_pm = {
const struct bus_type amba_bustype = {
.name = "amba",
.dev_groups = amba_dev_groups,
+ .driver_override = true,
.match = amba_match,
.uevent = amba_uevent,
.probe = amba_probe,

drivers/base/base.h

View file
diff --git a/drivers/base/base.h b/drivers/base/base.h
index 30b4165..a5b7abc 100644
--- a/drivers/base/base.h
+++ b/drivers/base/base.h
@@ -86,18 +86,6 @@ struct driver_private {
};
#define to_driver(obj) container_of(obj, struct driver_private, kobj)
-#ifdef CONFIG_RUST
-/**
- * struct driver_type - Representation of a Rust driver type.
- */
-struct driver_type {
- /**
- * @id: Representation of core::any::TypeId.
- */
- u8 id[16];
-} __packed;
-#endif
-
/**
* struct device_private - structure to hold the private to the driver core
* portions of the device structure.
@@ -115,7 +103,6 @@ struct driver_type {
* dev_err_probe() for later retrieval via debugfs
* @device: pointer back to the struct device that this structure is
* associated with.
- * @driver_type: The type of the bound Rust driver.
* @dead: This device is currently either in the process of or has been
* removed from the system. Any asynchronous events scheduled for this
* device should exit without taking any action.
@@ -132,9 +119,6 @@ struct device_private {
const struct device_driver *async_driver;
char *deferred_probe_reason;
struct device *device;
-#ifdef CONFIG_RUST
- struct driver_type driver_type;
-#endif
u8 dead:1;
};
#define to_device_private_parent(obj) \
@@ -188,6 +172,20 @@ static inline int driver_match_device(const struct device_driver *drv,
return drv->bus->match ? drv->bus->match(dev, drv) : 1;
}
+static inline bool dev_has_sync_state(struct device *dev)
+{
+ struct device_driver *drv;
+
+ if (!dev)
+ return false;
+ drv = READ_ONCE(dev->driver);
+ if (drv && drv->sync_state)
+ return true;
+ if (dev->bus && dev->bus->sync_state)
+ return true;
+ return false;
+}
+
static inline void dev_sync_state(struct device *dev)
{
if (dev->bus->sync_state)
@@ -196,8 +194,10 @@ static inline void dev_sync_state(struct device *dev)
dev->driver->sync_state(dev);
}
-int driver_add_groups(const struct device_driver *drv, const struct attribute_group **groups);
-void driver_remove_groups(const struct device_driver *drv, const struct attribute_group **groups);
+int driver_add_groups(const struct device_driver *drv,
+ const struct attribute_group *const *groups);
+void driver_remove_groups(const struct device_driver *drv,
+ const struct attribute_group *const *groups);
void device_driver_detach(struct device *dev);
static inline void device_set_driver(struct device *dev, const struct device_driver *drv)

drivers/base/bus.c

View file
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 8b6722f..d17bd91 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -544,10 +544,10 @@ static const struct attribute_group driver_override_dev_group = {
*/
int bus_add_device(struct device *dev)
{
- struct subsys_private *sp = bus_to_subsys(dev->bus);
+ struct subsys_private *sp;
int error;
- if (!sp) {
+ if (!dev->bus) {
/*
* This is a normal operation for many devices that do not
* have a bus assigned to them, just say that all went
@@ -556,6 +556,13 @@ int bus_add_device(struct device *dev)
return 0;
}
+ sp = bus_to_subsys(dev->bus);
+ if (!sp) {
+ pr_err("%s: cannot add device '%s' to unregistered bus '%s'\n",
+ __func__, dev_name(dev), dev->bus->name);
+ return -EINVAL;
+ }
+
/*
* Reference in sp is now incremented and will be dropped when
* the device is removed from the bus

drivers/base/core.c

View file
diff --git a/drivers/base/core.c b/drivers/base/core.c
index bd2ddf2..4d02668 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -235,6 +235,79 @@ static void __fw_devlink_pickup_dangling_consumers(struct fwnode_handle *fwnode,
__fw_devlink_pickup_dangling_consumers(child, new_sup);
}
+static void fw_devlink_pickup_dangling_consumers(struct device *dev)
+{
+ struct fwnode_handle *child;
+
+ guard(mutex)(&fwnode_link_lock);
+
+ fwnode_for_each_available_child_node(dev->fwnode, child)
+ __fw_devlink_pickup_dangling_consumers(child, dev->fwnode);
+ __fw_devlink_link_to_consumers(dev);
+}
+
+/**
+ * fw_devlink_refresh_fwnode - Recheck the tree under this firmware node
+ * @fwnode: The fwnode under which the fwnode tree has changed
+ *
+ * This function is mainly meant to adjust the supplier/consumer dependencies
+ * after a fwnode tree overlay has occurred.
+ */
+void fw_devlink_refresh_fwnode(struct fwnode_handle *fwnode)
+{
+ struct device *dev;
+
+ /*
+ * Find the closest ancestor fwnode that has been converted to a device
+ * that can bind to a driver (bus device).
+ */
+ fwnode_handle_get(fwnode);
+ do {
+ if (fwnode_test_flag(fwnode, FWNODE_FLAG_NOT_DEVICE))
+ continue;
+
+ dev = get_dev_from_fwnode(fwnode);
+ if (!dev)
+ continue;
+
+ if (dev->bus)
+ break;

This diff is incomplete. Download the complete patch.

drivers/base/cpu.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/dd.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/devcoredump.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/driver.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/faux.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/firmware_loader/main.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/firmware_loader/sysfs_upload.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/isa.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/memory.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/pinctrl.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/platform.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/property.c

View file

This diff is incomplete. Download the complete patch.

drivers/base/swnode.c

View file

This diff is incomplete. Download the complete patch.

drivers/bus/imx-weim.c

View file

This diff is incomplete. Download the complete patch.

drivers/cdx/cdx.c

View file

This diff is incomplete. Download the complete patch.

drivers/cpufreq/rcpufreq_dt.rs

View file

This diff is incomplete. Download the complete patch.

drivers/devfreq/devfreq-event.c

View file

This diff is incomplete. Download the complete patch.

drivers/dma/ti/k3-udma-glue.c

View file

This diff is incomplete. Download the complete patch.

drivers/dma/ti/k3-udma.c

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/nova/driver.rs

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/drm/tyr/driver.rs

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/nova-core/driver.rs

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/nova-core/gpu.rs

View file

This diff is incomplete. Download the complete patch.

drivers/gpu/nova-core/nova_core.rs

View file

This diff is incomplete. Download the complete patch.

drivers/hv/vmbus_drv.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-catu.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-core.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-cpu-debug.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-funnel.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-replicator.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-stm.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-tmc-core.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-tnoc.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-tpdm.c

View file

This diff is incomplete. Download the complete patch.

drivers/hwtracing/coresight/coresight-tpiu.c

View file

This diff is incomplete. Download the complete patch.

drivers/i2c/i2c-core-of.c

View file

This diff is incomplete. Download the complete patch.

drivers/iommu/dma-iommu.c

View file

This diff is incomplete. Download the complete patch.

drivers/iommu/iommu.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/pcs/pcs-xpcs-plat.c

View file

This diff is incomplete. Download the complete patch.

drivers/of/device.c

View file

This diff is incomplete. Download the complete patch.

drivers/of/dynamic.c

View file

This diff is incomplete. Download the complete patch.

drivers/of/overlay.c

View file

This diff is incomplete. Download the complete patch.

drivers/of/platform.c

View file

This diff is incomplete. Download the complete patch.

drivers/pci/of.c

View file

This diff is incomplete. Download the complete patch.

drivers/pci/pwrctrl/core.c

View file

This diff is incomplete. Download the complete patch.

drivers/pwm/pwm_th1520.rs

View file

This diff is incomplete. Download the complete patch.

drivers/rpmsg/qcom_glink_native.c

View file

This diff is incomplete. Download the complete patch.

drivers/rpmsg/rpmsg_core.c

View file

This diff is incomplete. Download the complete patch.

drivers/rpmsg/virtio_rpmsg_bus.c

View file

This diff is incomplete. Download the complete patch.

drivers/soc/tegra/cbb/tegra194-cbb.c

View file

This diff is incomplete. Download the complete patch.

drivers/soc/tegra/cbb/tegra234-cbb.c

View file

This diff is incomplete. Download the complete patch.

drivers/spi/spi.c

View file

This diff is incomplete. Download the complete patch.

drivers/tty/serial/serial_base_bus.c

View file

This diff is incomplete. Download the complete patch.

drivers/usb/gadget/udc/aspeed-vhub/dev.c

View file

This diff is incomplete. Download the complete patch.

fs/kernfs/dir.c

View file

This diff is incomplete. Download the complete patch.

fs/sysfs/file.c

View file

This diff is incomplete. Download the complete patch.

include/acpi/acpi_bus.h

View file

This diff is incomplete. Download the complete patch.

include/linux/amba/bus.h

View file

This diff is incomplete. Download the complete patch.

include/linux/auxiliary_bus.h

View file

This diff is incomplete. Download the complete patch.

include/linux/cdx/cdx_bus.h

View file

This diff is incomplete. Download the complete patch.

include/linux/coresight.h

View file

This diff is incomplete. Download the complete patch.

include/linux/device.h

View file

This diff is incomplete. Download the complete patch.

include/linux/device/bus.h

View file

This diff is incomplete. Download the complete patch.

include/linux/device/class.h

View file

This diff is incomplete. Download the complete patch.

include/linux/device/driver.h

View file

This diff is incomplete. Download the complete patch.

include/linux/dma-map-ops.h

View file

This diff is incomplete. Download the complete patch.

include/linux/dma-mapping.h

View file

This diff is incomplete. Download the complete patch.

include/linux/fwnode.h

View file

This diff is incomplete. Download the complete patch.

include/linux/hyperv.h

View file

This diff is incomplete. Download the complete patch.

include/linux/iommu-dma.h

View file

This diff is incomplete. Download the complete patch.

include/linux/platform_device.h

View file

This diff is incomplete. Download the complete patch.

include/linux/property.h

View file

This diff is incomplete. Download the complete patch.

include/linux/rpmsg.h

View file

This diff is incomplete. Download the complete patch.

kernel/cpu.c

View file

This diff is incomplete. Download the complete patch.

kernel/dma/mapping.c

View file

This diff is incomplete. Download the complete patch.

kernel/params.c

View file

This diff is incomplete. Download the complete patch.

mm/hmm.c

View file

This diff is incomplete. Download the complete patch.

rust/Makefile

View file

This diff is incomplete. Download the complete patch.

rust/helpers/acpi.c

View file

This diff is incomplete. Download the complete patch.

rust/helpers/helpers.c

View file

This diff is incomplete. Download the complete patch.

rust/kernel/alloc/kbox.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/auxiliary.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/cpufreq.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/device.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/devres.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/dma.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/driver.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/i2c.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/io/mem.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/pci.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/pci/id.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/pci/io.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/platform.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/types.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/types/for_lt.rs

View file

This diff is incomplete. Download the complete patch.

rust/kernel/usb.rs

View file

This diff is incomplete. Download the complete patch.

rust/macros/for_lt.rs

View file

This diff is incomplete. Download the complete patch.

rust/macros/lib.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_debugfs.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_dma.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_driver_auxiliary.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_driver_i2c.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_driver_pci.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_driver_platform.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_driver_usb.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_i2c_client.rs

View file

This diff is incomplete. Download the complete patch.

samples/rust/rust_soc.rs

View file

This diff is incomplete. Download the complete patch.