All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bhelgaas@google.com>
To: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	linux-arm <linux-arm-kernel@lists.infradead.org>,
	Elie Morisse <syniurge@gmail.com>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Nehal Shah <nehal-bakulchandra.shah@amd.com>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Shyam Sundar S K <shyam-sundar.s-k@amd.com>
Subject: Re: [PATCH v3 6/7] drivers: Add generic helper to match any device
Date: Tue, 23 Jul 2019 17:24:40 -0500	[thread overview]
Message-ID: <CAErSpo5odia1KWnkADJ7NNbWKs5C1nRzZCiANfNrGQdNVVkP6g@mail.gmail.com> (raw)
In-Reply-To: <20190723221838.12024-7-suzuki.poulose@arm.com>

On Tue, Jul 23, 2019 at 5:19 PM Suzuki K Poulose <suzuki.poulose@arm.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@google.com>
> Cc: Elie Morisse <syniurge@gmail.com>
> Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
> Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
> Cc: Nehal Shah <nehal-bakulchandra.shah@amd.com>
> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
> Cc: Shyam Sundar S K <shyam-sundar.s-k@amd.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>

Acked-by: Bjorn Helgaas <bhelgaas@google.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
>

WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <bhelgaas@google.com>
To: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Shyam Sundar S K <shyam-sundar.s-k@amd.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Elie Morisse <syniurge@gmail.com>,
	Nehal Shah <nehal-bakulchandra.shah@amd.com>,
	linux-arm <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v3 6/7] drivers: Add generic helper to match any device
Date: Tue, 23 Jul 2019 17:24:40 -0500	[thread overview]
Message-ID: <CAErSpo5odia1KWnkADJ7NNbWKs5C1nRzZCiANfNrGQdNVVkP6g@mail.gmail.com> (raw)
In-Reply-To: <20190723221838.12024-7-suzuki.poulose@arm.com>

On Tue, Jul 23, 2019 at 5:19 PM Suzuki K Poulose <suzuki.poulose@arm.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@google.com>
> Cc: Elie Morisse <syniurge@gmail.com>
> Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
> Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
> Cc: Nehal Shah <nehal-bakulchandra.shah@amd.com>
> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
> Cc: Shyam Sundar S K <shyam-sundar.s-k@amd.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>

Acked-by: Bjorn Helgaas <bhelgaas@google.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
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-07-23 22:24 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-23 22:18 [PATCH v3 0/7] drivers: Add generic device lookup helpers Suzuki K Poulose
2019-07-23 22:18 ` Suzuki K Poulose
2019-07-23 22:18 ` [PATCH v3 1/7] drivers: Introduce device lookup variants by name Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-25 15:42   ` Alexandre Belloni
2019-07-25 15:42     ` Alexandre Belloni
2019-07-29 14:37   ` Heikki Krogerus
2019-07-29 14:37     ` Heikki Krogerus
2019-07-23 22:18 ` [PATCH v3 2/7] drivers: Introduce device lookup variants by of_node Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-25 13:54   ` Lee Jones
2019-07-25 13:54     ` Lee Jones
2019-07-25 13:54     ` Lee Jones
2019-07-30 11:03     ` Greg KH
2019-07-30 11:03       ` Greg KH
2019-07-30 11:03       ` Greg KH
2019-07-30 11:03       ` Greg KH
2019-07-25 19:25   ` Wolfram Sang
2019-07-25 19:25     ` Wolfram Sang
2019-07-25 19:25     ` Wolfram Sang
2019-07-25 19:25     ` Wolfram Sang
2019-07-25 21:01   ` Moritz Fischer
2019-07-25 21:01     ` Moritz Fischer
2019-07-25 21:01     ` Moritz Fischer
2019-07-25 21:01     ` Moritz Fischer
2019-07-26 17:18   ` Mark Brown
2019-07-26 17:18     ` Mark Brown
2019-07-26 17:18     ` Mark Brown
2019-07-26 17:18     ` Mark Brown
2019-07-23 22:18 ` [PATCH v3 3/7] drivers: Introduce device lookup variants by fwnode Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-24 10:16   ` Robin Murphy
2019-07-24 10:16     ` Robin Murphy
2019-07-25 17:10   ` Mathieu Poirier
2019-07-25 17:10     ` Mathieu Poirier
2019-07-29 14:36   ` Heikki Krogerus
2019-07-29 14:36     ` Heikki Krogerus
2019-07-23 22:18 ` [PATCH v3 4/7] drivers: Introduce device lookup variants by device type Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-23 22:18 ` [PATCH v3 5/7] drivers: Introduce device lookup variants by ACPI_COMPANION device Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-26 17:18   ` Mark Brown
2019-07-26 17:18     ` Mark Brown
2019-07-26 20:23   ` Wolfram Sang
2019-07-26 20:23     ` Wolfram Sang
2019-07-26 20:23     ` Wolfram Sang
2019-08-01 11:58     ` Andy Shevchenko
2019-08-01 11:58       ` Andy Shevchenko
2019-08-01 11:58       ` Andy Shevchenko
2019-08-01 12:08       ` Wolfram Sang
2019-08-01 12:08         ` Wolfram Sang
2019-08-01 12:21         ` Andy Shevchenko
2019-08-01 12:21           ` Andy Shevchenko
2019-08-01 12:27           ` Wolfram Sang
2019-08-01 12:27             ` Wolfram Sang
2019-07-23 22:18 ` [PATCH v3 6/7] drivers: Add generic helper to match any device Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-23 22:24   ` Bjorn Helgaas [this message]
2019-07-23 22:24     ` Bjorn Helgaas
2019-07-23 22:18 ` [PATCH v3 7/7] platform: Add platform_find_device_by_driver() helper Suzuki K Poulose
2019-07-23 22:18   ` Suzuki K Poulose
2019-07-24 10:44   ` Robin Murphy
2019-07-24 10:44     ` Robin Murphy
2019-07-25 14:10 ` [PATCH v3 0/7] drivers: Add generic device lookup helpers Greg KH
2019-07-25 14:10   ` Greg KH
2019-07-25 14:10   ` Greg KH
2019-07-30 11:56 ` Greg KH
2019-07-30 11:56   ` Greg KH
2019-07-30 11:56   ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAErSpo5odia1KWnkADJ7NNbWKs5C1nRzZCiANfNrGQdNVVkP6g@mail.gmail.com \
    --to=bhelgaas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jejb@linux.ibm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=nehal-bakulchandra.shah@amd.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=rafael@kernel.org \
    --cc=shyam-sundar.s-k@amd.com \
    --cc=suzuki.poulose@arm.com \
    --cc=syniurge@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.