]> Git Repo - linux.git/commitdiff
Merge tag 'driver-core-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <[email protected]>
Fri, 1 Sep 2023 16:43:18 +0000 (09:43 -0700)
committerLinus Torvalds <[email protected]>
Fri, 1 Sep 2023 16:43:18 +0000 (09:43 -0700)
Pull driver core updates from Greg KH:
 "Here is a small set of driver core updates and additions for 6.6-rc1.

  Included in here are:

   - stable kernel documentation updates

   - class structure const work from Ivan on various subsystems

   - kernfs tweaks

   - driver core tests!

   - kobject sanity cleanups

   - kobject structure reordering to save space

   - driver core error code handling fixups

   - other minor driver core cleanups

  All of these have been in linux-next for a while with no reported
  problems"

* tag 'driver-core-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (32 commits)
  driver core: Call in reversed order in device_platform_notify_remove()
  driver core: Return proper error code when dev_set_name() fails
  kobject: Remove redundant checks for whether ktype is NULL
  kobject: Add sanity check for kset->kobj.ktype in kset_register()
  drivers: base: test: Add missing MODULE_* macros to root device tests
  drivers: base: test: Add missing MODULE_* macros for platform devices tests
  drivers: base: Free devm resources when unregistering a device
  drivers: base: Add basic devm tests for platform devices
  drivers: base: Add basic devm tests for root devices
  kernfs: fix missing kernfs_iattr_rwsem locking
  docs: stable-kernel-rules: mention that regressions must be prevented
  docs: stable-kernel-rules: fine-tune various details
  docs: stable-kernel-rules: make the examples for option 1 a proper list
  docs: stable-kernel-rules: move text around to improve flow
  docs: stable-kernel-rules: improve structure by changing headlines
  base/node: Remove duplicated include
  kernfs: attach uuid for every kernfs and report it in fsid
  kernfs: add stub helper for kernfs_generic_poll()
  x86/resctrl: make pseudo_lock_class a static const structure
  x86/MSR: make msr_class a static const structure
  ...

1  2 
drivers/base/core.c
drivers/base/cpu.c
drivers/base/node.c
drivers/char/tpm/tpm-chip.c
fs/kernfs/dir.c
include/linux/device.h

diff --combined drivers/base/core.c
index 704ba73e1459c512eec49c476aadaf8bdc4e8d8a,39f7a94aea7305d762574d2d8344bc0349ecf15e..b7d7f410c2561ca26da0efd5808e2273028c0759
@@@ -17,6 -17,7 +17,6 @@@
  #include <linux/kstrtox.h>
  #include <linux/module.h>
  #include <linux/slab.h>
 -#include <linux/string.h>
  #include <linux/kdev_t.h>
  #include <linux/notifier.h>
  #include <linux/of.h>
@@@ -27,7 -28,6 +27,7 @@@
  #include <linux/netdevice.h>
  #include <linux/sched/signal.h>
  #include <linux/sched/mm.h>
 +#include <linux/string_helpers.h>
  #include <linux/swiotlb.h>
  #include <linux/sysfs.h>
  #include <linux/dma-map-ops.h> /* for dma_default_coherent */
@@@ -2306,12 -2306,12 +2306,12 @@@ static void device_platform_notify(stru
  
  static void device_platform_notify_remove(struct device *dev)
  {
-       acpi_device_notify_remove(dev);
+       if (platform_notify_remove)
+               platform_notify_remove(dev);
  
        software_node_notify_remove(dev);
  
-       if (platform_notify_remove)
-               platform_notify_remove(dev);
+       acpi_device_notify_remove(dev);
  }
  
  /**
@@@ -3108,7 -3108,9 +3108,7 @@@ void device_initialize(struct device *d
      defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
        dev->dma_coherent = dma_default_coherent;
  #endif
 -#ifdef CONFIG_SWIOTLB
 -      dev->dma_io_tlb_mem = &io_tlb_default_mem;
 -#endif
 +      swiotlb_dev_init(dev);
  }
  EXPORT_SYMBOL_GPL(device_initialize);
  
@@@ -3528,18 -3530,17 +3528,17 @@@ int device_add(struct device *dev
         * the name, and force the use of dev_name()
         */
        if (dev->init_name) {
-               dev_set_name(dev, "%s", dev->init_name);
+               error = dev_set_name(dev, "%s", dev->init_name);
                dev->init_name = NULL;
        }
  
+       if (dev_name(dev))
+               error = 0;
        /* subsystems can specify simple device enumeration */
-       if (!dev_name(dev) && dev->bus && dev->bus->dev_name)
-               dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id);
-       if (!dev_name(dev)) {
-               error = -EINVAL;
+       else if (dev->bus && dev->bus->dev_name)
+               error = dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id);
+       if (error)
                goto name_error;
-       }
  
        pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
  
@@@ -3815,6 -3816,17 +3814,17 @@@ void device_del(struct device *dev
        device_platform_notify_remove(dev);
        device_links_purge(dev);
  
+       /*
+        * If a device does not have a driver attached, we need to clean
+        * up any managed resources. We do this in device_release(), but
+        * it's never called (and we leak the device) if a managed
+        * resource holds a reference to the device. So release all
+        * managed resources here, like we do in driver_detach(). We
+        * still need to do so again in device_release() in case someone
+        * adds a new resource after this point, though.
+        */
+       devres_release_all(dev);
        bus_notify(dev, BUS_NOTIFY_REMOVED_DEVICE);
        kobject_uevent(&dev->kobj, KOBJ_REMOVE);
        glue_dir = get_glue_dir(dev);
@@@ -3908,9 -3920,10 +3918,9 @@@ const char *device_get_devnode(const st
                return dev_name(dev);
  
        /* replace '!' in the name with '/' */
 -      s = kstrdup(dev_name(dev), GFP_KERNEL);
 +      s = kstrdup_and_replace(dev_name(dev), '!', '/', GFP_KERNEL);
        if (!s)
                return NULL;
 -      strreplace(s, '!', '/');
        return *tmp = s;
  }
  
diff --combined drivers/base/cpu.c
index 43dab03958f1137ab3b0e0ffc1749e49666f8bdd,4b828f54f9f4bf3327e4c1d5228294c22157f9de..9ea22e165acd679b1e6ef72433104bed858cfc22
@@@ -19,6 -19,7 +19,7 @@@
  #include <linux/cpufeature.h>
  #include <linux/tick.h>
  #include <linux/pm_qos.h>
+ #include <linux/delay.h>
  #include <linux/sched/isolation.h>
  
  #include "base.h"
@@@ -50,12 -51,30 +51,30 @@@ static int cpu_subsys_online(struct dev
        int cpuid = dev->id;
        int from_nid, to_nid;
        int ret;
+       int retries = 0;
  
        from_nid = cpu_to_node(cpuid);
        if (from_nid == NUMA_NO_NODE)
                return -ENODEV;
  
+ retry:
        ret = cpu_device_up(dev);
+       /*
+        * If -EBUSY is returned, it is likely that hotplug is temporarily
+        * disabled when cpu_hotplug_disable() was called. This condition is
+        * transient. So we retry after waiting for an exponentially
+        * increasing delay up to a total of at least 620ms as some PCI
+        * device initialization can take quite a while.
+        */
+       if (ret == -EBUSY) {
+               retries++;
+               if (retries > 5)
+                       return ret;
+               msleep(10 * (1 << retries));
+               goto retry;
+       }
        /*
         * When hot adding memory to memoryless node and enabling a cpu
         * on the node, node number of the cpu may internally change.
@@@ -282,16 -301,6 +301,16 @@@ static ssize_t print_cpus_nohz_full(str
  static DEVICE_ATTR(nohz_full, 0444, print_cpus_nohz_full, NULL);
  #endif
  
 +#ifdef CONFIG_CRASH_HOTPLUG
 +static ssize_t crash_hotplug_show(struct device *dev,
 +                                   struct device_attribute *attr,
 +                                   char *buf)
 +{
 +      return sysfs_emit(buf, "%d\n", crash_hotplug_cpu_support());
 +}
 +static DEVICE_ATTR_ADMIN_RO(crash_hotplug);
 +#endif
 +
  static void cpu_device_release(struct device *dev)
  {
        /*
@@@ -479,9 -488,6 +498,9 @@@ static struct attribute *cpu_root_attrs
  #ifdef CONFIG_NO_HZ_FULL
        &dev_attr_nohz_full.attr,
  #endif
 +#ifdef CONFIG_CRASH_HOTPLUG
 +      &dev_attr_crash_hotplug.attr,
 +#endif
  #ifdef CONFIG_GENERIC_CPU_AUTOPROBE
        &dev_attr_modalias.attr,
  #endif
@@@ -522,30 -528,73 +541,30 @@@ static void __init cpu_dev_register_gen
  }
  
  #ifdef CONFIG_GENERIC_CPU_VULNERABILITIES
 -
 -ssize_t __weak cpu_show_meltdown(struct device *dev,
 -                               struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_spectre_v1(struct device *dev,
 -                                 struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_spectre_v2(struct device *dev,
 -                                 struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_spec_store_bypass(struct device *dev,
 -                                        struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_l1tf(struct device *dev,
 -                           struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_mds(struct device *dev,
 -                          struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_tsx_async_abort(struct device *dev,
 -                                      struct device_attribute *attr,
 -                                      char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_itlb_multihit(struct device *dev,
 -                                    struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_srbds(struct device *dev,
 +static ssize_t cpu_show_not_affected(struct device *dev,
                              struct device_attribute *attr, char *buf)
  {
        return sysfs_emit(buf, "Not affected\n");
  }
  
 -ssize_t __weak cpu_show_mmio_stale_data(struct device *dev,
 -                                      struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 -
 -ssize_t __weak cpu_show_retbleed(struct device *dev,
 -                               struct device_attribute *attr, char *buf)
 -{
 -      return sysfs_emit(buf, "Not affected\n");
 -}
 +#define CPU_SHOW_VULN_FALLBACK(func)                                  \
 +      ssize_t cpu_show_##func(struct device *,                        \
 +                                struct device_attribute *, char *)    \
 +               __attribute__((weak, alias("cpu_show_not_affected")))
 +
 +CPU_SHOW_VULN_FALLBACK(meltdown);
 +CPU_SHOW_VULN_FALLBACK(spectre_v1);
 +CPU_SHOW_VULN_FALLBACK(spectre_v2);
 +CPU_SHOW_VULN_FALLBACK(spec_store_bypass);
 +CPU_SHOW_VULN_FALLBACK(l1tf);
 +CPU_SHOW_VULN_FALLBACK(mds);
 +CPU_SHOW_VULN_FALLBACK(tsx_async_abort);
 +CPU_SHOW_VULN_FALLBACK(itlb_multihit);
 +CPU_SHOW_VULN_FALLBACK(srbds);
 +CPU_SHOW_VULN_FALLBACK(mmio_stale_data);
 +CPU_SHOW_VULN_FALLBACK(retbleed);
 +CPU_SHOW_VULN_FALLBACK(spec_rstack_overflow);
 +CPU_SHOW_VULN_FALLBACK(gds);
  
  static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL);
  static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL);
@@@ -558,8 -607,6 +577,8 @@@ static DEVICE_ATTR(itlb_multihit, 0444
  static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL);
  static DEVICE_ATTR(mmio_stale_data, 0444, cpu_show_mmio_stale_data, NULL);
  static DEVICE_ATTR(retbleed, 0444, cpu_show_retbleed, NULL);
 +static DEVICE_ATTR(spec_rstack_overflow, 0444, cpu_show_spec_rstack_overflow, NULL);
 +static DEVICE_ATTR(gather_data_sampling, 0444, cpu_show_gds, NULL);
  
  static struct attribute *cpu_root_vulnerabilities_attrs[] = {
        &dev_attr_meltdown.attr,
        &dev_attr_srbds.attr,
        &dev_attr_mmio_stale_data.attr,
        &dev_attr_retbleed.attr,
 +      &dev_attr_spec_rstack_overflow.attr,
 +      &dev_attr_gather_data_sampling.attr,
        NULL
  };
  
diff --combined drivers/base/node.c
index 8e871ba9162f527d46cc88f8d503d9ef093e75cf,73e31624d071ab157f2e265f6787b52e934c8983..493d533f8375560a1503167363b42480b4d2b897
@@@ -20,7 -20,6 +20,6 @@@
  #include <linux/pm_runtime.h>
  #include <linux/swap.h>
  #include <linux/slab.h>
- #include <linux/hugetlb.h>
  
  static struct bus_type node_subsys = {
        .name = "node",
@@@ -446,8 -445,8 +445,8 @@@ static ssize_t node_read_meminfo(struc
                             "Node %d AnonHugePages:  %8lu kB\n"
                             "Node %d ShmemHugePages: %8lu kB\n"
                             "Node %d ShmemPmdMapped: %8lu kB\n"
 -                           "Node %d FileHugePages: %8lu kB\n"
 -                           "Node %d FilePmdMapped: %8lu kB\n"
 +                           "Node %d FileHugePages:  %8lu kB\n"
 +                           "Node %d FilePmdMapped:  %8lu kB\n"
  #endif
  #ifdef CONFIG_UNACCEPTED_MEMORY
                             "Node %d Unaccepted:     %8lu kB\n"
index ea6b4013bc38f48d3a4fe1996fb31e247d23ec5e,a97ef7c5328ad31886f081457fe5003df2f81469..23f6f2eda84c080308d3e2fa0422edec34b33839
  DEFINE_IDR(dev_nums_idr);
  static DEFINE_MUTEX(idr_lock);
  
- struct class *tpm_class;
- struct class *tpmrm_class;
+ const struct class tpm_class = {
+       .name = "tpm",
+       .shutdown_pre = tpm_class_shutdown,
+ };
+ const struct class tpmrm_class = {
+       .name = "tmprm",
+ };
  dev_t tpm_devt;
  
  static int tpm_request_locality(struct tpm_chip *chip)
@@@ -336,7 -341,7 +341,7 @@@ struct tpm_chip *tpm_chip_alloc(struct 
  
        device_initialize(&chip->dev);
  
-       chip->dev.class = tpm_class;
+       chip->dev.class = &tpm_class;
        chip->dev.release = tpm_dev_release;
        chip->dev.parent = pdev;
        chip->dev.groups = chip->groups;
@@@ -510,6 -515,70 +515,6 @@@ static int tpm_add_legacy_sysfs(struct 
        return 0;
  }
  
 -/*
 - * Some AMD fTPM versions may cause stutter
 - * https://www.amd.com/en/support/kb/faq/pa-410
 - *
 - * Fixes are available in two series of fTPM firmware:
 - * 6.x.y.z series: 6.0.18.6 +
 - * 3.x.y.z series: 3.57.y.5 +
 - */
 -#ifdef CONFIG_X86
 -static bool tpm_amd_is_rng_defective(struct tpm_chip *chip)
 -{
 -      u32 val1, val2;
 -      u64 version;
 -      int ret;
 -
 -      if (!(chip->flags & TPM_CHIP_FLAG_TPM2))
 -              return false;
 -
 -      ret = tpm_request_locality(chip);
 -      if (ret)
 -              return false;
 -
 -      ret = tpm2_get_tpm_pt(chip, TPM2_PT_MANUFACTURER, &val1, NULL);
 -      if (ret)
 -              goto release;
 -      if (val1 != 0x414D4400U /* AMD */) {
 -              ret = -ENODEV;
 -              goto release;
 -      }
 -      ret = tpm2_get_tpm_pt(chip, TPM2_PT_FIRMWARE_VERSION_1, &val1, NULL);
 -      if (ret)
 -              goto release;
 -      ret = tpm2_get_tpm_pt(chip, TPM2_PT_FIRMWARE_VERSION_2, &val2, NULL);
 -
 -release:
 -      tpm_relinquish_locality(chip);
 -
 -      if (ret)
 -              return false;
 -
 -      version = ((u64)val1 << 32) | val2;
 -      if ((version >> 48) == 6) {
 -              if (version >= 0x0006000000180006ULL)
 -                      return false;
 -      } else if ((version >> 48) == 3) {
 -              if (version >= 0x0003005700000005ULL)
 -                      return false;
 -      } else {
 -              return false;
 -      }
 -
 -      dev_warn(&chip->dev,
 -               "AMD fTPM version 0x%llx causes system stutter; hwrng disabled\n",
 -               version);
 -
 -      return true;
 -}
 -#else
 -static inline bool tpm_amd_is_rng_defective(struct tpm_chip *chip)
 -{
 -      return false;
 -}
 -#endif /* CONFIG_X86 */
 -
  static int tpm_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
  {
        struct tpm_chip *chip = container_of(rng, struct tpm_chip, hwrng);
        return tpm_get_random(chip, data, max);
  }
  
 +static bool tpm_is_hwrng_enabled(struct tpm_chip *chip)
 +{
 +      if (!IS_ENABLED(CONFIG_HW_RANDOM_TPM))
 +              return false;
 +      if (tpm_is_firmware_upgrade(chip))
 +              return false;
 +      if (chip->flags & TPM_CHIP_FLAG_HWRNG_DISABLED)
 +              return false;
 +      return true;
 +}
 +
  static int tpm_add_hwrng(struct tpm_chip *chip)
  {
 -      if (!IS_ENABLED(CONFIG_HW_RANDOM_TPM) || tpm_is_firmware_upgrade(chip) ||
 -          tpm_amd_is_rng_defective(chip))
 +      if (!tpm_is_hwrng_enabled(chip))
                return 0;
  
        snprintf(chip->hwrng_name, sizeof(chip->hwrng_name),
@@@ -639,7 -698,7 +644,7 @@@ int tpm_chip_register(struct tpm_chip *
        return 0;
  
  out_hwrng:
 -      if (IS_ENABLED(CONFIG_HW_RANDOM_TPM) && !tpm_is_firmware_upgrade(chip))
 +      if (tpm_is_hwrng_enabled(chip))
                hwrng_unregister(&chip->hwrng);
  out_ppi:
        tpm_bios_log_teardown(chip);
@@@ -664,7 -723,8 +669,7 @@@ EXPORT_SYMBOL_GPL(tpm_chip_register)
  void tpm_chip_unregister(struct tpm_chip *chip)
  {
        tpm_del_legacy_sysfs(chip);
 -      if (IS_ENABLED(CONFIG_HW_RANDOM_TPM) && !tpm_is_firmware_upgrade(chip) &&
 -          !tpm_amd_is_rng_defective(chip))
 +      if (tpm_is_hwrng_enabled(chip))
                hwrng_unregister(&chip->hwrng);
        tpm_bios_log_teardown(chip);
        if (chip->flags & TPM_CHIP_FLAG_TPM2 && !tpm_is_firmware_upgrade(chip))
diff --combined fs/kernfs/dir.c
index 660995856a044282301b2298e418d54b4dca8a71,bf243015834ec8875c31090f39cfb4e9237a5717..8b2bd65d70e7257022f139d7755d650a2f4b3ac6
@@@ -383,9 -383,11 +383,11 @@@ static int kernfs_link_sibling(struct k
        rb_insert_color(&kn->rb, &kn->parent->dir.children);
  
        /* successfully added, account subdir number */
+       down_write(&kernfs_root(kn)->kernfs_iattr_rwsem);
        if (kernfs_type(kn) == KERNFS_DIR)
                kn->parent->dir.subdirs++;
        kernfs_inc_rev(kn->parent);
+       up_write(&kernfs_root(kn)->kernfs_iattr_rwsem);
  
        return 0;
  }
@@@ -408,9 -410,11 +410,11 @@@ static bool kernfs_unlink_sibling(struc
        if (RB_EMPTY_NODE(&kn->rb))
                return false;
  
+       down_write(&kernfs_root(kn)->kernfs_iattr_rwsem);
        if (kernfs_type(kn) == KERNFS_DIR)
                kn->parent->dir.subdirs--;
        kernfs_inc_rev(kn->parent);
+       up_write(&kernfs_root(kn)->kernfs_iattr_rwsem);
  
        rb_erase(&kn->rb, &kn->parent->dir.children);
        RB_CLEAR_NODE(&kn->rb);
@@@ -556,7 -560,7 +560,7 @@@ void kernfs_put(struct kernfs_node *kn
        kfree_const(kn->name);
  
        if (kn->iattr) {
 -              simple_xattrs_free(&kn->iattr->xattrs);
 +              simple_xattrs_free(&kn->iattr->xattrs, NULL);
                kmem_cache_free(kernfs_iattrs_cache, kn->iattr);
        }
        spin_lock(&kernfs_idr_lock);
diff --combined include/linux/device.h
index 941c0de6151ab257fbbd4dc142d0dd86ce6298b1,731337ead54ed93299d1b2b6b9d870b7b4999528..56d93a1ffb7b6a619e30249b4b1ddabdc5750e67
@@@ -349,7 -349,6 +349,7 @@@ unsigned long devm_get_free_pages(struc
                                  gfp_t gfp_mask, unsigned int order);
  void devm_free_pages(struct device *dev, unsigned long addr);
  
 +#ifdef CONFIG_HAS_IOMEM
  void __iomem *devm_ioremap_resource(struct device *dev,
                                    const struct resource *res);
  void __iomem *devm_ioremap_resource_wc(struct device *dev,
  void __iomem *devm_of_iomap(struct device *dev,
                            struct device_node *node, int index,
                            resource_size_t *size);
 +#else
 +
 +static inline
 +void __iomem *devm_ioremap_resource(struct device *dev,
 +                                  const struct resource *res)
 +{
 +      return ERR_PTR(-EINVAL);
 +}
 +
 +static inline
 +void __iomem *devm_ioremap_resource_wc(struct device *dev,
 +                                     const struct resource *res)
 +{
 +      return ERR_PTR(-EINVAL);
 +}
 +
 +static inline
 +void __iomem *devm_of_iomap(struct device *dev,
 +                          struct device_node *node, int index,
 +                          resource_size_t *size)
 +{
 +      return ERR_PTR(-EINVAL);
 +}
 +
 +#endif
  
  /* allows to add/remove a custom action to devres stack */
  void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
@@@ -651,10 -625,7 +651,10 @@@ struct device_physical_location 
   * @dma_pools:        Dma pools (if dma'ble device).
   * @dma_mem:  Internal for coherent mem override.
   * @cma_area: Contiguous memory area for dma allocations
 - * @dma_io_tlb_mem: Pointer to the swiotlb pool used.  Not for driver use.
 + * @dma_io_tlb_mem: Software IO TLB allocator.  Not for driver use.
 + * @dma_io_tlb_pools: List of transient swiotlb memory pools.
 + * @dma_io_tlb_lock:  Protects changes to the list of active pools.
 + * @dma_uses_io_tlb: %true if device has used the software IO TLB.
   * @archdata: For arch-specific additions.
   * @of_node:  Associated device tree node.
   * @fwnode:   Associated device node supplied by platform firmware.
@@@ -760,11 -731,6 +760,11 @@@ struct device 
  #endif
  #ifdef CONFIG_SWIOTLB
        struct io_tlb_mem *dma_io_tlb_mem;
 +#endif
 +#ifdef CONFIG_SWIOTLB_DYNAMIC
 +      struct list_head dma_io_tlb_pools;
 +      spinlock_t dma_io_tlb_lock;
 +      bool dma_uses_io_tlb;
  #endif
        /* arch specific additions */
        struct dev_archdata     archdata;
@@@ -1249,8 -1215,6 +1249,6 @@@ void device_link_remove(void *consumer
  void device_links_supplier_sync_state_pause(void);
  void device_links_supplier_sync_state_resume(void);
  
- __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
  /* Create alias, so I can be autoloaded. */
  #define MODULE_ALIAS_CHARDEV(major,minor) \
        MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
This page took 0.158941 seconds and 4 git commands to generate.