lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAErSpo5odia1KWnkADJ7NNbWKs5C1nRzZCiANfNrGQdNVVkP6g@mail.gmail.com>
Date:   Tue, 23 Jul 2019 17:24:40 -0500
From:   Bjorn Helgaas <bhelgaas@...gle.com>
To:     Suzuki K Poulose <suzuki.poulose@....com>
Cc:     Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        "Rafael J. Wysocki" <rafael@...nel.org>,
        linux-arm <linux-arm-kernel@...ts.infradead.org>,
        Elie Morisse <syniurge@...il.com>,
        "James E.J. Bottomley" <jejb@...ux.ibm.com>,
        "Martin K. Petersen" <martin.petersen@...cle.com>,
        Nehal Shah <nehal-bakulchandra.shah@....com>,
        "Rafael J. Wysocki" <rafael.j.wysocki@...el.com>,
        Shyam Sundar S K <shyam-sundar.s-k@....com>
Subject: Re: [PATCH v3 6/7] drivers: Add generic helper to match any device

On Tue, Jul 23, 2019 at 5:19 PM Suzuki K Poulose <suzuki.poulose@....com> wrote:
>
> Add a generic helper to match any/all devices. Using this
> introduce new wrappers {bus/driver/class}_find_next_device().
>
> Cc: Bjorn Helgaas <bhelgaas@...gle.com>
> Cc: Elie Morisse <syniurge@...il.com>
> Cc: "James E.J. Bottomley" <jejb@...ux.ibm.com>
> Cc: "Martin K. Petersen" <martin.petersen@...cle.com>
> Cc: Nehal Shah <nehal-bakulchandra.shah@....com>
> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@...el.com>
> Cc: Shyam Sundar S K <shyam-sundar.s-k@....com>
> Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@....com>

Acked-by: Bjorn Helgaas <bhelgaas@...gle.com> # PCI

> ---
>  drivers/base/core.c                  |  6 ++++++
>  drivers/i2c/busses/i2c-amd-mp2-pci.c |  8 +-------
>  drivers/pci/probe.c                  |  7 +------
>  drivers/s390/cio/ccwgroup.c          |  8 +-------
>  drivers/scsi/scsi_proc.c             |  9 ++-------
>  include/linux/device.h               | 17 +++++++++++++++++
>  6 files changed, 28 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/base/core.c b/drivers/base/core.c
> index 57d71bc2c559..e22e29b3dc97 100644
> --- a/drivers/base/core.c
> +++ b/drivers/base/core.c
> @@ -3379,3 +3379,9 @@ int device_match_acpi_dev(struct device *dev, const void *adev)
>         return ACPI_COMPANION(dev) == adev;
>  }
>  EXPORT_SYMBOL(device_match_acpi_dev);
> +
> +int device_match_any(struct device *dev, const void *unused)
> +{
> +       return 1;
> +}
> +EXPORT_SYMBOL_GPL(device_match_any);
> diff --git a/drivers/i2c/busses/i2c-amd-mp2-pci.c b/drivers/i2c/busses/i2c-amd-mp2-pci.c
> index c7fe3b44a860..5e4800d72e00 100644
> --- a/drivers/i2c/busses/i2c-amd-mp2-pci.c
> +++ b/drivers/i2c/busses/i2c-amd-mp2-pci.c
> @@ -457,18 +457,12 @@ static struct pci_driver amd_mp2_pci_driver = {
>  };
>  module_pci_driver(amd_mp2_pci_driver);
>
> -static int amd_mp2_device_match(struct device *dev, const void *data)
> -{
> -       return 1;
> -}
> -
>  struct amd_mp2_dev *amd_mp2_find_device(void)
>  {
>         struct device *dev;
>         struct pci_dev *pci_dev;
>
> -       dev = driver_find_device(&amd_mp2_pci_driver.driver, NULL, NULL,
> -                                amd_mp2_device_match);
> +       dev = driver_find_next_device(&amd_mp2_pci_driver.driver, NULL);
>         if (!dev)
>                 return NULL;
>
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index a3c7338fad86..dbeeb385fb9f 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -64,11 +64,6 @@ static struct resource *get_pci_domain_busn_res(int domain_nr)
>         return &r->res;
>  }
>
> -static int find_anything(struct device *dev, const void *data)
> -{
> -       return 1;
> -}
> -
>  /*
>   * Some device drivers need know if PCI is initiated.
>   * Basically, we think PCI is not initiated when there
> @@ -79,7 +74,7 @@ int no_pci_devices(void)
>         struct device *dev;
>         int no_devices;
>
> -       dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
> +       dev = bus_find_next_device(&pci_bus_type, NULL);
>         no_devices = (dev == NULL);
>         put_device(dev);
>         return no_devices;
> diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
> index d843e362c167..0005ec9285aa 100644
> --- a/drivers/s390/cio/ccwgroup.c
> +++ b/drivers/s390/cio/ccwgroup.c
> @@ -581,11 +581,6 @@ int ccwgroup_driver_register(struct ccwgroup_driver *cdriver)
>  }
>  EXPORT_SYMBOL(ccwgroup_driver_register);
>
> -static int __ccwgroup_match_all(struct device *dev, const void *data)
> -{
> -       return 1;
> -}
> -
>  /**
>   * ccwgroup_driver_unregister() - deregister a ccw group driver
>   * @cdriver: driver to be deregistered
> @@ -597,8 +592,7 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver)
>         struct device *dev;
>
>         /* We don't want ccwgroup devices to live longer than their driver. */
> -       while ((dev = driver_find_device(&cdriver->driver, NULL, NULL,
> -                                        __ccwgroup_match_all))) {
> +       while ((dev = driver_find_next_device(&cdriver->driver, NULL))) {
>                 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
>
>                 ccwgroup_ungroup(gdev);
> diff --git a/drivers/scsi/scsi_proc.c b/drivers/scsi/scsi_proc.c
> index c074631086a4..5b313226f11c 100644
> --- a/drivers/scsi/scsi_proc.c
> +++ b/drivers/scsi/scsi_proc.c
> @@ -372,15 +372,10 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
>         return err;
>  }
>
> -static int always_match(struct device *dev, const void *data)
> -{
> -       return 1;
> -}
> -
>  static inline struct device *next_scsi_device(struct device *start)
>  {
> -       struct device *next = bus_find_device(&scsi_bus_type, start, NULL,
> -                                             always_match);
> +       struct device *next = bus_find_next_device(&scsi_bus_type, start);
> +
>         put_device(start);
>         return next;
>  }
> diff --git a/include/linux/device.h b/include/linux/device.h
> index 7514ef3d3f1a..8ae3f4b47293 100644
> --- a/include/linux/device.h
> +++ b/include/linux/device.h
> @@ -169,6 +169,7 @@ int device_match_of_node(struct device *dev, const void *np);
>  int device_match_fwnode(struct device *dev, const void *fwnode);
>  int device_match_devt(struct device *dev, const void *pdevt);
>  int device_match_acpi_dev(struct device *dev, const void *adev);
> +int device_match_any(struct device *dev, const void *unused);
>
>  int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
>                      int (*fn)(struct device *dev, void *data));
> @@ -225,6 +226,16 @@ static inline struct device *bus_find_device_by_devt(struct bus_type *bus,
>         return bus_find_device(bus, NULL, &devt, device_match_devt);
>  }
>
> +/**
> + * bus_find_next_device - Find the next device after a given device in a
> + * given bus.
> + */
> +static inline struct device *
> +bus_find_next_device(struct bus_type *bus,struct device *cur)
> +{
> +       return bus_find_device(bus, cur, NULL, device_match_any);
> +}
> +
>  #ifdef CONFIG_ACPI
>  struct acpi_device;
>
> @@ -465,6 +476,12 @@ static inline struct device *driver_find_device_by_devt(struct device_driver *dr
>         return driver_find_device(drv, NULL, &devt, device_match_devt);
>  }
>
> +static inline struct device *driver_find_next_device(struct device_driver *drv,
> +                                                    struct device *start)
> +{
> +       return driver_find_device(drv, start, NULL, device_match_any);
> +}
> +
>  #ifdef CONFIG_ACPI
>  /**
>   * driver_find_device_by_acpi_dev : device iterator for locating a particular
> --
> 2.21.0
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ