* [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver
@ 2021-09-27 20:43 Uwe Kleine-König
2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Uwe Kleine-König @ 2021-09-27 20:43 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Giovanni Cabiddu, Mark Rutland, Sathya Prakash,
Alexander Shishkin, Alexander Duyck, x86, qat-linux, oss-drivers,
Oliver O'Halloran, H. Peter Anvin, Jiri Olsa, Thomas Gleixner,
Marco Chiappero, Stefano Stabellini, Herbert Xu, linux-scsi,
Rafał Miłecki, Jesse Brandeburg, Peter Zijlstra,
Ingo Molnar, linux-pci, linux-wireless, Jakub Kicinski,
Yisen Zhuang, Suganath Prabu Subramani, Fiona Trahe,
Andrew Donnellan, Arnd Bergmann, Konrad Rzeszutek Wilk,
Ido Schimmel, Uwe Kleine-König, Simon Horman, linuxppc-dev,
Arnaldo Carvalho de Melo, Jack Xu, Borislav Petkov,
Michael Buesch, Jiri Pirko, Bjorn Helgaas, Namhyung Kim,
Boris Ostrovsky, Andy Shevchenko, Juergen Gross, Salil Mehta,
Sreekanth Reddy, xen-devel, Vadym Kochan, MPT-FusionLinux.pdl,
Greg Kroah-Hartman, linux-usb, Wojciech Ziemba, linux-kernel,
Mathias Nyman, Zhou Wang, linux-crypto, kernel, netdev,
Frederic Barrat, Paul Mackerras, Tomaszx Kowalik, Taras Chornyi,
David S. Miller, linux-perf-users
From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Hello,
this is v4 of the quest to drop the "driver" member from struct pci_dev
which tracks the same data (apart from a constant offset) as dev.driver.
Changes since v3:
- Add some Reviewed-by and Acked-by tags
- Rebase to v5.15-rc3 (no conflicts)
- Changes in patch #4 addressing review comments by Christoph Hellwig
I didn't do extensive build tests, so I might have missed a build
problem. I have some builds running, but want to get some feedback on
the changes suggested by Christoph.
Best regards
Uwe
Uwe Kleine-König (8):
PCI: Simplify pci_device_remove()
PCI: Drop useless check from pci_device_probe()
xen/pci: Drop some checks that are always true
PCI: replace pci_dev::driver usage that gets the driver name
scsi: message: fusion: Remove unused parameter of mpt_pci driver's
probe()
crypto: qat - simplify adf_enable_aer()
PCI: Replace pci_dev::driver usage by pci_dev::dev.driver
PCI: Drop duplicated tracking of a pci_dev's bound driver
arch/powerpc/include/asm/ppc-pci.h | 9 ++-
arch/powerpc/kernel/eeh_driver.c | 10 +--
arch/x86/events/intel/uncore.c | 2 +-
arch/x86/kernel/probe_roms.c | 2 +-
drivers/bcma/host_pci.c | 7 ++-
drivers/crypto/hisilicon/qm.c | 2 +-
drivers/crypto/qat/qat_4xxx/adf_drv.c | 7 +--
drivers/crypto/qat/qat_c3xxx/adf_drv.c | 7 +--
drivers/crypto/qat/qat_c62x/adf_drv.c | 7 +--
drivers/crypto/qat/qat_common/adf_aer.c | 10 +--
.../crypto/qat/qat_common/adf_common_drv.h | 2 +-
drivers/crypto/qat/qat_dh895xcc/adf_drv.c | 7 +--
drivers/message/fusion/mptbase.c | 7 +--
drivers/message/fusion/mptbase.h | 2 +-
drivers/message/fusion/mptctl.c | 4 +-
drivers/message/fusion/mptlan.c | 2 +-
drivers/misc/cxl/guest.c | 24 ++++---
drivers/misc/cxl/pci.c | 30 +++++----
.../ethernet/hisilicon/hns3/hns3_ethtool.c | 2 +-
.../ethernet/marvell/prestera/prestera_pci.c | 2 +-
drivers/net/ethernet/mellanox/mlxsw/pci.c | 2 +-
.../ethernet/netronome/nfp/nfp_net_ethtool.c | 2 +-
drivers/pci/iov.c | 25 +++++---
drivers/pci/pci-driver.c | 45 ++++++-------
drivers/pci/pci.c | 4 +-
drivers/pci/pcie/err.c | 36 ++++++-----
drivers/pci/xen-pcifront.c | 63 +++++++++----------
drivers/ssb/pcihost_wrapper.c | 8 ++-
drivers/usb/host/xhci-pci.c | 2 +-
include/linux/pci.h | 1 -
30 files changed, 166 insertions(+), 167 deletions(-)
base-commit: 5816b3e6577eaa676ceb00a848f0fd65fe2adc29
--
2.30.2
^ permalink raw reply [flat|nested] 12+ messages in thread* [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-27 20:43 [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König @ 2021-09-27 20:43 ` Uwe Kleine-König 2021-09-28 8:28 ` Kalle Valo ` (2 more replies) 2021-09-27 20:43 ` [PATCH v4 7/8] PCI: Replace pci_dev::driver usage by pci_dev::dev.driver Uwe Kleine-König 2021-09-27 20:59 ` [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König 2 siblings, 3 replies; 12+ messages in thread From: Uwe Kleine-König @ 2021-09-27 20:43 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Rafał Miłecki, Jesse Brandeburg, Ido Schimmel, Jakub Kicinski, Yisen Zhuang, Vadym Kochan, Uwe Kleine-König, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Simon Horman, Oliver O'Halloran, linuxppc-dev, David S. Miller From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> struct pci_dev::driver holds (apart from a constant offset) the same data as struct pci_dev::dev->driver. With the goal to remove struct pci_dev::driver to get rid of data duplication replace getting the driver name by dev_driver_string() which implicitly makes use of struct pci_dev::dev->driver. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- arch/powerpc/include/asm/ppc-pci.h | 9 ++++++++- drivers/bcma/host_pci.c | 7 ++++--- drivers/crypto/hisilicon/qm.c | 2 +- drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 2 +- drivers/net/ethernet/marvell/prestera/prestera_pci.c | 2 +- drivers/net/ethernet/mellanox/mlxsw/pci.c | 2 +- drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 2 +- drivers/ssb/pcihost_wrapper.c | 8 +++++--- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/arch/powerpc/include/asm/ppc-pci.h b/arch/powerpc/include/asm/ppc-pci.h index 2b9edbf6e929..e8f1795a2acf 100644 --- a/arch/powerpc/include/asm/ppc-pci.h +++ b/arch/powerpc/include/asm/ppc-pci.h @@ -57,7 +57,14 @@ void eeh_sysfs_remove_device(struct pci_dev *pdev); static inline const char *eeh_driver_name(struct pci_dev *pdev) { - return (pdev && pdev->driver) ? pdev->driver->name : "<null>"; + if (pdev) { + const char *drvstr = dev_driver_string(&pdev->dev); + + if (strcmp(drvstr, "")) + return drvstr; + } + + return "<null>"; } #endif /* CONFIG_EEH */ diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c index 69c10a7b7c61..0973022d4b13 100644 --- a/drivers/bcma/host_pci.c +++ b/drivers/bcma/host_pci.c @@ -175,9 +175,10 @@ static int bcma_host_pci_probe(struct pci_dev *dev, if (err) goto err_kfree_bus; - name = dev_name(&dev->dev); - if (dev->driver && dev->driver->name) - name = dev->driver->name; + name = dev_driver_string(&dev->dev); + if (!strcmp(name, "")) + name = dev_name(&dev->dev); + err = pci_request_regions(dev, name); if (err) goto err_pci_disable; diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index 369562d34d66..8f361e54e524 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -3085,7 +3085,7 @@ static int qm_alloc_uacce(struct hisi_qm *qm) }; int ret; - ret = strscpy(interface.name, pdev->driver->name, + ret = strscpy(interface.name, dev_driver_string(&pdev->dev), sizeof(interface.name)); if (ret < 0) return -ENAMETOOLONG; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c index 7ea511d59e91..f279edfce3f1 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c @@ -606,7 +606,7 @@ static void hns3_get_drvinfo(struct net_device *netdev, return; } - strncpy(drvinfo->driver, h->pdev->driver->name, + strncpy(drvinfo->driver, dev_driver_string(&h->pdev->dev), sizeof(drvinfo->driver)); drvinfo->driver[sizeof(drvinfo->driver) - 1] = '\0'; diff --git a/drivers/net/ethernet/marvell/prestera/prestera_pci.c b/drivers/net/ethernet/marvell/prestera/prestera_pci.c index a250d394da38..a8f007f6dad2 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_pci.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_pci.c @@ -720,7 +720,7 @@ static int prestera_fw_load(struct prestera_fw *fw) static int prestera_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { - const char *driver_name = pdev->driver->name; + const char *driver_name = dev_driver_string(&pdev->dev); struct prestera_fw *fw; int err; diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c index 13b0259f7ea6..8f306364f7bf 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c @@ -1876,7 +1876,7 @@ static void mlxsw_pci_cmd_fini(struct mlxsw_pci *mlxsw_pci) static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { - const char *driver_name = pdev->driver->name; + const char *driver_name = dev_driver_string(&pdev->dev); struct mlxsw_pci *mlxsw_pci; int err; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c index 0685ece1f155..23dfb599c828 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c @@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev, { char nsp_version[ETHTOOL_FWVERS_LEN] = {}; - strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver)); + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); nfp_net_get_nspinfo(app, nsp_version); snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "%s %s %s %s", vnic_version, nsp_version, diff --git a/drivers/ssb/pcihost_wrapper.c b/drivers/ssb/pcihost_wrapper.c index 410215c16920..4938ed5cfae5 100644 --- a/drivers/ssb/pcihost_wrapper.c +++ b/drivers/ssb/pcihost_wrapper.c @@ -78,9 +78,11 @@ static int ssb_pcihost_probe(struct pci_dev *dev, err = pci_enable_device(dev); if (err) goto err_kfree_ssb; - name = dev_name(&dev->dev); - if (dev->driver && dev->driver->name) - name = dev->driver->name; + + name = dev_driver_string(&dev->dev); + if (*name == '\0') + name = dev_name(&dev->dev); + err = pci_request_regions(dev, name); if (err) goto err_pci_disable; -- 2.30.2 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König @ 2021-09-28 8:28 ` Kalle Valo 2021-09-28 10:01 ` Simon Horman 2021-09-28 17:17 ` Bjorn Helgaas 2 siblings, 0 replies; 12+ messages in thread From: Kalle Valo @ 2021-09-28 8:28 UTC (permalink / raw) To: Uwe Kleine-König Cc: linux-pci, Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Rafał Miłecki, Jesse Brandeburg, Bjorn Helgaas, Ido Schimmel, Jakub Kicinski, Yisen Zhuang, Vadym Kochan, Uwe Kleine-König, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Simon Horman, Oliver O'Halloran, linuxppc-dev, David S. Miller Uwe Kleine-König <uwe@kleine-koenig.org> writes: > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > struct pci_dev::driver holds (apart from a constant offset) the same > data as struct pci_dev::dev->driver. With the goal to remove struct > pci_dev::driver to get rid of data duplication replace getting the > driver name by dev_driver_string() which implicitly makes use of struct > pci_dev::dev->driver. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > --- > arch/powerpc/include/asm/ppc-pci.h | 9 ++++++++- > drivers/bcma/host_pci.c | 7 ++++--- For bcma: Acked-by: Kalle Valo <kvalo@codeaurora.org> -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König 2021-09-28 8:28 ` Kalle Valo @ 2021-09-28 10:01 ` Simon Horman 2021-09-28 10:31 ` Uwe Kleine-König 2021-09-28 17:17 ` Bjorn Helgaas 2 siblings, 1 reply; 12+ messages in thread From: Simon Horman @ 2021-09-28 10:01 UTC (permalink / raw) To: Uwe Kleine-König Cc: linux-pci, Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Rafał Miłecki, Jesse Brandeburg, Bjorn Helgaas, Ido Schimmel, Jakub Kicinski, Yisen Zhuang, Vadym Kochan, Uwe Kleine-König, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Oliver O'Halloran, linuxppc-dev, David S. Miller On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > struct pci_dev::driver holds (apart from a constant offset) the same > data as struct pci_dev::dev->driver. With the goal to remove struct > pci_dev::driver to get rid of data duplication replace getting the > driver name by dev_driver_string() which implicitly makes use of struct > pci_dev::dev->driver. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> ... > diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > index 0685ece1f155..23dfb599c828 100644 > --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > @@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev, > { > char nsp_version[ETHTOOL_FWVERS_LEN] = {}; > > - strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver)); > + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); I'd slightly prefer to maintain lines under 80 columns wide. But not nearly strongly enough to engage in a long debate about it. In any case, for the NFP portion of this patch. Acked-by: Simon Horman <simon.horman@corigine.com> > nfp_net_get_nspinfo(app, nsp_version); > snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), > "%s %s %s %s", vnic_version, nsp_version, ... ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-28 10:01 ` Simon Horman @ 2021-09-28 10:31 ` Uwe Kleine-König 2021-09-29 8:05 ` Simon Horman 0 siblings, 1 reply; 12+ messages in thread From: Uwe Kleine-König @ 2021-09-28 10:31 UTC (permalink / raw) To: Simon Horman Cc: Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Ido Schimmel, Rafał Miłecki, Jesse Brandeburg, Bjorn Helgaas, linux-pci, Jakub Kicinski, Yisen Zhuang, Uwe Kleine-König, Vadym Kochan, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Oliver O'Halloran, linuxppc-dev, David S. Miller [-- Attachment #1: Type: text/plain, Size: 1983 bytes --] On Tue, Sep 28, 2021 at 12:01:28PM +0200, Simon Horman wrote: > On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > struct pci_dev::driver holds (apart from a constant offset) the same > > data as struct pci_dev::dev->driver. With the goal to remove struct > > pci_dev::driver to get rid of data duplication replace getting the > > driver name by dev_driver_string() which implicitly makes use of struct > > pci_dev::dev->driver. > > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > ... > > > diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > index 0685ece1f155..23dfb599c828 100644 > > --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > @@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev, > > { > > char nsp_version[ETHTOOL_FWVERS_LEN] = {}; > > > > - strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver)); > > + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); > > I'd slightly prefer to maintain lines under 80 columns wide. > But not nearly strongly enough to engage in a long debate about it. :-) Looking at the output of git grep strlcpy.\*sizeof I wonder if it would be sensible to introduce something like #define strlcpy_array(arr, src) (strlcpy(arr, src, sizeof(arr)) + __must_be_array(arr)) but not sure this is possible without a long debate either (and this line is over 80 chars wide, too :-). > In any case, for the NFP portion of this patch. > > Acked-by: Simon Horman <simon.horman@corigine.com> Thanks Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-28 10:31 ` Uwe Kleine-König @ 2021-09-29 8:05 ` Simon Horman 2021-09-29 9:04 ` Uwe Kleine-König 0 siblings, 1 reply; 12+ messages in thread From: Simon Horman @ 2021-09-29 8:05 UTC (permalink / raw) To: Uwe Kleine-König Cc: Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Ido Schimmel, Rafał Miłecki, Jesse Brandeburg, Bjorn Helgaas, linux-pci, Jakub Kicinski, Yisen Zhuang, Uwe Kleine-König, Vadym Kochan, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Oliver O'Halloran, linuxppc-dev, David S. Miller On Tue, Sep 28, 2021 at 12:31:29PM +0200, Uwe Kleine-König wrote: > On Tue, Sep 28, 2021 at 12:01:28PM +0200, Simon Horman wrote: > > On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > > > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > > > struct pci_dev::driver holds (apart from a constant offset) the same > > > data as struct pci_dev::dev->driver. With the goal to remove struct > > > pci_dev::driver to get rid of data duplication replace getting the > > > driver name by dev_driver_string() which implicitly makes use of struct > > > pci_dev::dev->driver. > > > > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > ... > > > > > diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > > index 0685ece1f155..23dfb599c828 100644 > > > --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > > +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > > @@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev, > > > { > > > char nsp_version[ETHTOOL_FWVERS_LEN] = {}; > > > > > > - strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver)); > > > + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); > > > > I'd slightly prefer to maintain lines under 80 columns wide. > > But not nearly strongly enough to engage in a long debate about it. > > :-) > > Looking at the output of > > git grep strlcpy.\*sizeof > > I wonder if it would be sensible to introduce something like > > #define strlcpy_array(arr, src) (strlcpy(arr, src, sizeof(arr)) + __must_be_array(arr)) > > but not sure this is possible without a long debate either (and this > line is over 80 chars wide, too :-). My main motivation for the 80 char limit in nfp_net_ethtool.c is not that I think 80 char is universally a good limit (although that is true), but rather that I expect that is the prevailing style in nfp_net_ethtool.c. So a macro more than 80 car wide somewhere else is fine by me. However, when running checkpatch --strict over the patch it told me: WARNING: Prefer strscpy over strlcpy - see: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/ #276: FILE: drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c:205: + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); total: 0 errors, 1 warnings, 0 checks, 80 lines checked (Amusingly, more text wider than 80 column, perhaps suggesting the folly of my original comment, but lets move on from that.) As your patch doesn't introduce the usage of strlcpy() I was considering a follow-up patch to change it to strscpy(). And in general the email at the link above suggests all usages of strlcpy() should do so. So perhaps creating strscpy_array is a better idea? I have not thought about this much, and probably this just leads us to a deeper part of the rabbit hole. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-29 8:05 ` Simon Horman @ 2021-09-29 9:04 ` Uwe Kleine-König 0 siblings, 0 replies; 12+ messages in thread From: Uwe Kleine-König @ 2021-09-29 9:04 UTC (permalink / raw) To: Simon Horman Cc: linux-pci, Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Ido Schimmel, Rafał Miłecki, Jesse Brandeburg, Bjorn Helgaas, Jakub Kicinski, Yisen Zhuang, Uwe Kleine-König, Vadym Kochan, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Oliver O'Halloran, linuxppc-dev, David S. Miller [-- Attachment #1: Type: text/plain, Size: 3758 bytes --] Hello Simon, On Wed, Sep 29, 2021 at 10:05:42AM +0200, Simon Horman wrote: > On Tue, Sep 28, 2021 at 12:31:29PM +0200, Uwe Kleine-König wrote: > > On Tue, Sep 28, 2021 at 12:01:28PM +0200, Simon Horman wrote: > > > On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > > > > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > > > > > struct pci_dev::driver holds (apart from a constant offset) the same > > > > data as struct pci_dev::dev->driver. With the goal to remove struct > > > > pci_dev::driver to get rid of data duplication replace getting the > > > > driver name by dev_driver_string() which implicitly makes use of struct > > > > pci_dev::dev->driver. > > > > > > > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > > > ... > > > > > > > diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > > > index 0685ece1f155..23dfb599c828 100644 > > > > --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > > > +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > > > > @@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev, > > > > { > > > > char nsp_version[ETHTOOL_FWVERS_LEN] = {}; > > > > > > > > - strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver)); > > > > + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); > > > > > > I'd slightly prefer to maintain lines under 80 columns wide. > > > But not nearly strongly enough to engage in a long debate about it. > > > > :-) > > > > Looking at the output of > > > > git grep strlcpy.\*sizeof > > > > I wonder if it would be sensible to introduce something like > > > > #define strlcpy_array(arr, src) (strlcpy(arr, src, sizeof(arr)) + __must_be_array(arr)) > > > > but not sure this is possible without a long debate either (and this > > line is over 80 chars wide, too :-). > > My main motivation for the 80 char limit in nfp_net_ethtool.c is > not that I think 80 char is universally a good limit (although that is true), > but rather that I expect that is the prevailing style in nfp_net_ethtool.c. I sent out v5 with an additional line break now. > So a macro more than 80 car wide somewhere else is fine by me. > > However, when running checkpatch --strict over the patch it told me: > > WARNING: Prefer strscpy over strlcpy - see: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@mail.gmail.com/ > #276: FILE: drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c:205: > + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); > > total: 0 errors, 1 warnings, 0 checks, 80 lines checked > > (Amusingly, more text wider than 80 column, perhaps suggesting the folly of > my original comment, but lets move on from that.) > > As your patch doesn't introduce the usage of strlcpy() I was considering a > follow-up patch to change it to strscpy(). And in general the email at the > link above suggests all usages of strlcpy() should do so. So perhaps > creating strscpy_array is a better idea? What I read about strscpy() is that conversions for the sake of the conversion are not welcome. When such a conversion comes from someone involved with the driver that is also tested this is probably fine. > I have not thought about this much, and probably this just leads us to a > deeper part of the rabbit hole. I assume so, too. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König 2021-09-28 8:28 ` Kalle Valo 2021-09-28 10:01 ` Simon Horman @ 2021-09-28 17:17 ` Bjorn Helgaas 2021-09-28 19:29 ` Uwe Kleine-König 2 siblings, 1 reply; 12+ messages in thread From: Bjorn Helgaas @ 2021-09-28 17:17 UTC (permalink / raw) To: Uwe Kleine-König, Oliver O'Halloran, Russell Currey Cc: linux-pci, Alexander Duyck, oss-drivers, Paul Mackerras, Herbert Xu, Rafał Miłecki, Jesse Brandeburg, Ido Schimmel, Jakub Kicinski, Yisen Zhuang, Vadym Kochan, Uwe Kleine-König, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Simon Horman, Oliver O'Halloran, linuxppc-dev, David S. Miller [+to Oliver, Russell for eeh_driver_name() question below] On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > struct pci_dev::driver holds (apart from a constant offset) the same > data as struct pci_dev::dev->driver. With the goal to remove struct > pci_dev::driver to get rid of data duplication replace getting the > driver name by dev_driver_string() which implicitly makes use of struct > pci_dev::dev->driver. When you repost to fix the build issue, can you capitalize the subject line to match the other? Also, would you mind using "pci_dev.driver" instead of "pci_dev::driver"? AFAIK, the "::" operator is not actually part of C, so I think it's more confusing than useful. > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > --- > arch/powerpc/include/asm/ppc-pci.h | 9 ++++++++- > drivers/bcma/host_pci.c | 7 ++++--- > drivers/crypto/hisilicon/qm.c | 2 +- > drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 2 +- > drivers/net/ethernet/marvell/prestera/prestera_pci.c | 2 +- > drivers/net/ethernet/mellanox/mlxsw/pci.c | 2 +- > drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 2 +- > drivers/ssb/pcihost_wrapper.c | 8 +++++--- > 8 files changed, 22 insertions(+), 12 deletions(-) > > diff --git a/arch/powerpc/include/asm/ppc-pci.h b/arch/powerpc/include/asm/ppc-pci.h > index 2b9edbf6e929..e8f1795a2acf 100644 > --- a/arch/powerpc/include/asm/ppc-pci.h > +++ b/arch/powerpc/include/asm/ppc-pci.h > @@ -57,7 +57,14 @@ void eeh_sysfs_remove_device(struct pci_dev *pdev); > > static inline const char *eeh_driver_name(struct pci_dev *pdev) > { > - return (pdev && pdev->driver) ? pdev->driver->name : "<null>"; > + if (pdev) { > + const char *drvstr = dev_driver_string(&pdev->dev); > + > + if (strcmp(drvstr, "")) > + return drvstr; > + } > + > + return "<null>"; Can we just do this? if (pdev) return dev_driver_string(&pdev->dev); return "<null>"; I think it's more complicated than it's worth to include a strcmp(). It's possible this will change those error messages about "Might be infinite loop in %s driver", but that doesn't seem like a huge deal. I moved Oliver to "to:" and added Russell in case they object. > } > > #endif /* CONFIG_EEH */ > diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c > index 69c10a7b7c61..0973022d4b13 100644 > --- a/drivers/bcma/host_pci.c > +++ b/drivers/bcma/host_pci.c > @@ -175,9 +175,10 @@ static int bcma_host_pci_probe(struct pci_dev *dev, > if (err) > goto err_kfree_bus; > > - name = dev_name(&dev->dev); > - if (dev->driver && dev->driver->name) > - name = dev->driver->name; > + name = dev_driver_string(&dev->dev); > + if (!strcmp(name, "")) > + name = dev_name(&dev->dev); > err = pci_request_regions(dev, name); Again seems more complicated than it's worth to me. This is in the driver's .probe() method, so really_probe() has already set "dev->driver = drv", which means dev->driver is always set to &bcma_pci_bridge_driver here, and bcma_pci_bridge_driver.name is always "bcma-pci-bridge". Almost all callers of pci_request_regions() just hardcode the driver name or use a DRV_NAME #define So I think we should just do: err = pci_request_regions(dev, "bcma-pci-bridge"); > if (err) > goto err_pci_disable; > diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c > index 369562d34d66..8f361e54e524 100644 > --- a/drivers/crypto/hisilicon/qm.c > +++ b/drivers/crypto/hisilicon/qm.c > @@ -3085,7 +3085,7 @@ static int qm_alloc_uacce(struct hisi_qm *qm) > }; > int ret; > > - ret = strscpy(interface.name, pdev->driver->name, > + ret = strscpy(interface.name, dev_driver_string(&pdev->dev), > sizeof(interface.name)); > if (ret < 0) > return -ENAMETOOLONG; > diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c > index 7ea511d59e91..f279edfce3f1 100644 > --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c > +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c > @@ -606,7 +606,7 @@ static void hns3_get_drvinfo(struct net_device *netdev, > return; > } > > - strncpy(drvinfo->driver, h->pdev->driver->name, > + strncpy(drvinfo->driver, dev_driver_string(&h->pdev->dev), > sizeof(drvinfo->driver)); > drvinfo->driver[sizeof(drvinfo->driver) - 1] = '\0'; > > diff --git a/drivers/net/ethernet/marvell/prestera/prestera_pci.c b/drivers/net/ethernet/marvell/prestera/prestera_pci.c > index a250d394da38..a8f007f6dad2 100644 > --- a/drivers/net/ethernet/marvell/prestera/prestera_pci.c > +++ b/drivers/net/ethernet/marvell/prestera/prestera_pci.c > @@ -720,7 +720,7 @@ static int prestera_fw_load(struct prestera_fw *fw) > static int prestera_pci_probe(struct pci_dev *pdev, > const struct pci_device_id *id) > { > - const char *driver_name = pdev->driver->name; > + const char *driver_name = dev_driver_string(&pdev->dev); > struct prestera_fw *fw; > int err; > > diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c > index 13b0259f7ea6..8f306364f7bf 100644 > --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c > +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c > @@ -1876,7 +1876,7 @@ static void mlxsw_pci_cmd_fini(struct mlxsw_pci *mlxsw_pci) > > static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > { > - const char *driver_name = pdev->driver->name; > + const char *driver_name = dev_driver_string(&pdev->dev); > struct mlxsw_pci *mlxsw_pci; > int err; > > diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > index 0685ece1f155..23dfb599c828 100644 > --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c > @@ -202,7 +202,7 @@ nfp_get_drvinfo(struct nfp_app *app, struct pci_dev *pdev, > { > char nsp_version[ETHTOOL_FWVERS_LEN] = {}; > > - strlcpy(drvinfo->driver, pdev->driver->name, sizeof(drvinfo->driver)); > + strlcpy(drvinfo->driver, dev_driver_string(&pdev->dev), sizeof(drvinfo->driver)); > nfp_net_get_nspinfo(app, nsp_version); > snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), > "%s %s %s %s", vnic_version, nsp_version, > diff --git a/drivers/ssb/pcihost_wrapper.c b/drivers/ssb/pcihost_wrapper.c > index 410215c16920..4938ed5cfae5 100644 > --- a/drivers/ssb/pcihost_wrapper.c > +++ b/drivers/ssb/pcihost_wrapper.c > @@ -78,9 +78,11 @@ static int ssb_pcihost_probe(struct pci_dev *dev, > err = pci_enable_device(dev); > if (err) > goto err_kfree_ssb; > - name = dev_name(&dev->dev); > - if (dev->driver && dev->driver->name) > - name = dev->driver->name; > + > + name = dev_driver_string(&dev->dev); > + if (*name == '\0') > + name = dev_name(&dev->dev); > + > err = pci_request_regions(dev, name); Also seems like more trouble than it's worth. This one is a little strange but is always called for either b43_pci_bridge_driver or b44_pci_driver, both of which have .name set, so I think we should simply do: err = pci_request_regions(dev, dev_driver_string(&dev->dev)); > if (err) > goto err_pci_disable; > -- > 2.30.2 > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-28 17:17 ` Bjorn Helgaas @ 2021-09-28 19:29 ` Uwe Kleine-König 2021-09-28 20:08 ` Bjorn Helgaas 0 siblings, 1 reply; 12+ messages in thread From: Uwe Kleine-König @ 2021-09-28 19:29 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, Alexander Duyck, oss-drivers, Oliver O'Halloran, Herbert Xu, Ido Schimmel, Rafał Miłecki, Jesse Brandeburg, Jakub Kicinski, Yisen Zhuang, Uwe Kleine-König, Vadym Kochan, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Simon Horman, Paul Mackerras, linuxppc-dev, David S. Miller [-- Attachment #1: Type: text/plain, Size: 4812 bytes --] Hello, On Tue, Sep 28, 2021 at 12:17:59PM -0500, Bjorn Helgaas wrote: > [+to Oliver, Russell for eeh_driver_name() question below] > > On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > struct pci_dev::driver holds (apart from a constant offset) the same > > data as struct pci_dev::dev->driver. With the goal to remove struct > > pci_dev::driver to get rid of data duplication replace getting the > > driver name by dev_driver_string() which implicitly makes use of struct > > pci_dev::dev->driver. > > When you repost to fix the build issue, can you capitalize the subject > line to match the other? Yes, sure. > Also, would you mind using "pci_dev.driver" instead of > "pci_dev::driver"? AFAIK, the "::" operator is not actually part of > C, so I think it's more confusing than useful. pci_dev.driver doesn't work either in C because pci_dev is a type and not a variable. This is probably subjective, but for me pci_dev.driver looks definitively stranger than pci_dev::driver. And :: is at least not unseen in the kernel commit logs. (git log --grep=::) But if you insist I can change to . > > diff --git a/arch/powerpc/include/asm/ppc-pci.h b/arch/powerpc/include/asm/ppc-pci.h > > index 2b9edbf6e929..e8f1795a2acf 100644 > > --- a/arch/powerpc/include/asm/ppc-pci.h > > +++ b/arch/powerpc/include/asm/ppc-pci.h > > @@ -57,7 +57,14 @@ void eeh_sysfs_remove_device(struct pci_dev *pdev); > > > > static inline const char *eeh_driver_name(struct pci_dev *pdev) > > { > > - return (pdev && pdev->driver) ? pdev->driver->name : "<null>"; > > + if (pdev) { > > + const char *drvstr = dev_driver_string(&pdev->dev); > > + > > + if (strcmp(drvstr, "")) > > + return drvstr; > > + } > > + > > + return "<null>"; > > Can we just do this? > > if (pdev) > return dev_driver_string(&pdev->dev); > > return "<null>"; Works for me, too. It behaves a bit differerently than my suggestion (which nearly behaves identical to the status quo), but only in some degenerated cases. > I think it's more complicated than it's worth to include a strcmp(). > It's possible this will change those error messages about "Might be > infinite loop in %s driver", but that doesn't seem like a huge deal. > > I moved Oliver to "to:" and added Russell in case they object. > > > } > > > > #endif /* CONFIG_EEH */ > > diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c > > index 69c10a7b7c61..0973022d4b13 100644 > > --- a/drivers/bcma/host_pci.c > > +++ b/drivers/bcma/host_pci.c > > @@ -175,9 +175,10 @@ static int bcma_host_pci_probe(struct pci_dev *dev, > > if (err) > > goto err_kfree_bus; > > > > - name = dev_name(&dev->dev); > > - if (dev->driver && dev->driver->name) > > - name = dev->driver->name; > > + name = dev_driver_string(&dev->dev); > > + if (!strcmp(name, "")) > > + name = dev_name(&dev->dev); > > err = pci_request_regions(dev, name); > > Again seems more complicated than it's worth to me. This is in the > driver's .probe() method, so really_probe() has already set > "dev->driver = drv", which means dev->driver is always set to > &bcma_pci_bridge_driver here, and bcma_pci_bridge_driver.name is > always "bcma-pci-bridge". > > Almost all callers of pci_request_regions() just hardcode the driver > name or use a DRV_NAME #define > > So I think we should just do: > > err = pci_request_regions(dev, "bcma-pci-bridge"); Yes, looks right. I'd put this in a separate patch. > > if (err) > > goto err_pci_disable; > > [...] > > diff --git a/drivers/ssb/pcihost_wrapper.c b/drivers/ssb/pcihost_wrapper.c > > index 410215c16920..4938ed5cfae5 100644 > > --- a/drivers/ssb/pcihost_wrapper.c > > +++ b/drivers/ssb/pcihost_wrapper.c > > @@ -78,9 +78,11 @@ static int ssb_pcihost_probe(struct pci_dev *dev, > > err = pci_enable_device(dev); > > if (err) > > goto err_kfree_ssb; > > - name = dev_name(&dev->dev); > > - if (dev->driver && dev->driver->name) > > - name = dev->driver->name; > > + > > + name = dev_driver_string(&dev->dev); > > + if (*name == '\0') > > + name = dev_name(&dev->dev); > > + > > err = pci_request_regions(dev, name); > > Also seems like more trouble than it's worth. This one is a little > strange but is always called for either b43_pci_bridge_driver or > b44_pci_driver, both of which have .name set, so I think we should > simply do: > > err = pci_request_regions(dev, dev_driver_string(&dev->dev)); yes, agreed, too. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name 2021-09-28 19:29 ` Uwe Kleine-König @ 2021-09-28 20:08 ` Bjorn Helgaas 0 siblings, 0 replies; 12+ messages in thread From: Bjorn Helgaas @ 2021-09-28 20:08 UTC (permalink / raw) To: Uwe Kleine-König Cc: linux-pci, Alexander Duyck, oss-drivers, Oliver O'Halloran, Herbert Xu, Ido Schimmel, Rafał Miłecki, Jesse Brandeburg, Jakub Kicinski, Yisen Zhuang, Uwe Kleine-König, Vadym Kochan, Michael Buesch, Jiri Pirko, Salil Mehta, netdev, linux-wireless, linux-kernel, Taras Chornyi, Zhou Wang, linux-crypto, kernel, Simon Horman, Paul Mackerras, linuxppc-dev, David S. Miller On Tue, Sep 28, 2021 at 09:29:36PM +0200, Uwe Kleine-König wrote: > On Tue, Sep 28, 2021 at 12:17:59PM -0500, Bjorn Helgaas wrote: > > [+to Oliver, Russell for eeh_driver_name() question below] > > > > On Mon, Sep 27, 2021 at 10:43:22PM +0200, Uwe Kleine-König wrote: > > > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > > > struct pci_dev::driver holds (apart from a constant offset) the same > > > data as struct pci_dev::dev->driver. With the goal to remove struct > > > pci_dev::driver to get rid of data duplication replace getting the > > > driver name by dev_driver_string() which implicitly makes use of struct > > > pci_dev::dev->driver. > > Also, would you mind using "pci_dev.driver" instead of > > "pci_dev::driver"? AFAIK, the "::" operator is not actually part of > > C, so I think it's more confusing than useful. > > pci_dev.driver doesn't work either in C because pci_dev is a type and > not a variable. Sure, "pci_dev.driver" is not strictly acceptable C unless you have a "struct pci_dev pci_dev", but it's pretty common. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 7/8] PCI: Replace pci_dev::driver usage by pci_dev::dev.driver 2021-09-27 20:43 [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König 2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König @ 2021-09-27 20:43 ` Uwe Kleine-König 2021-09-27 20:59 ` [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König 2 siblings, 0 replies; 12+ messages in thread From: Uwe Kleine-König @ 2021-09-27 20:43 UTC (permalink / raw) To: Bjorn Helgaas Cc: Mark Rutland, Peter Zijlstra, Oliver O'Halloran, H. Peter Anvin, Jiri Olsa, Boris Ostrovsky, Stefano Stabellini, Mathias Nyman, x86, Alexander Shishkin, Ingo Molnar, linux-pci, xen-devel, Andrew Donnellan, Arnd Bergmann, Konrad Rzeszutek Wilk, Uwe Kleine-König, Arnaldo Carvalho de Melo, Borislav Petkov, Bjorn Helgaas, Namhyung Kim, Thomas Gleixner, Juergen Gross, Greg Kroah-Hartman, linux-usb, linux-perf-users, kernel, Frederic Barrat, Paul Mackerras, linuxppc-dev From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> struct pci_dev::driver contains (apart from a constant offset) the same data as struct pci_dev::dev->driver. Replace all remaining users of the former pointer by the latter to allow removing the former. Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- arch/powerpc/kernel/eeh_driver.c | 10 ++++----- arch/x86/events/intel/uncore.c | 2 +- arch/x86/kernel/probe_roms.c | 2 +- drivers/misc/cxl/guest.c | 24 ++++++++++++--------- drivers/misc/cxl/pci.c | 30 ++++++++++++++++---------- drivers/pci/iov.c | 25 ++++++++++++++-------- drivers/pci/pci-driver.c | 25 +++++++++++----------- drivers/pci/pci.c | 4 ++-- drivers/pci/pcie/err.c | 36 ++++++++++++++++++-------------- drivers/pci/xen-pcifront.c | 4 ++-- drivers/usb/host/xhci-pci.c | 2 +- 11 files changed, 93 insertions(+), 71 deletions(-) diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c index 3eff6a4888e7..350dab18e137 100644 --- a/arch/powerpc/kernel/eeh_driver.c +++ b/arch/powerpc/kernel/eeh_driver.c @@ -104,13 +104,13 @@ static bool eeh_edev_actionable(struct eeh_dev *edev) */ static inline struct pci_driver *eeh_pcid_get(struct pci_dev *pdev) { - if (!pdev || !pdev->driver) + if (!pdev || !pdev->dev.driver) return NULL; - if (!try_module_get(pdev->driver->driver.owner)) + if (!try_module_get(pdev->dev.driver->owner)) return NULL; - return pdev->driver; + return to_pci_driver(pdev->dev.driver); } /** @@ -122,10 +122,10 @@ static inline struct pci_driver *eeh_pcid_get(struct pci_dev *pdev) */ static inline void eeh_pcid_put(struct pci_dev *pdev) { - if (!pdev || !pdev->driver) + if (!pdev || !pdev->dev.driver) return; - module_put(pdev->driver->driver.owner); + module_put(pdev->dev.driver->owner); } /** diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c index c72e368dd164..f1ba6ab2e97e 100644 --- a/arch/x86/events/intel/uncore.c +++ b/arch/x86/events/intel/uncore.c @@ -1187,7 +1187,7 @@ static int uncore_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id * PCI slot and func to indicate the uncore box. */ if (id->driver_data & ~0xffff) { - struct pci_driver *pci_drv = pdev->driver; + struct pci_driver *pci_drv = to_pci_driver(pdev->dev.driver); pmu = uncore_pci_find_dev_pmu(pdev, pci_drv->id_table); if (pmu == NULL) diff --git a/arch/x86/kernel/probe_roms.c b/arch/x86/kernel/probe_roms.c index 9e1def3744f2..36e84d904260 100644 --- a/arch/x86/kernel/probe_roms.c +++ b/arch/x86/kernel/probe_roms.c @@ -80,7 +80,7 @@ static struct resource video_rom_resource = { */ static bool match_id(struct pci_dev *pdev, unsigned short vendor, unsigned short device) { - struct pci_driver *drv = pdev->driver; + struct pci_driver *drv = to_pci_driver(pdev->dev.driver); const struct pci_device_id *id; if (pdev->vendor == vendor && pdev->device == device) diff --git a/drivers/misc/cxl/guest.c b/drivers/misc/cxl/guest.c index 186308f1f8eb..d997c9c3ebb5 100644 --- a/drivers/misc/cxl/guest.c +++ b/drivers/misc/cxl/guest.c @@ -25,28 +25,32 @@ static void pci_error_handlers(struct cxl_afu *afu, return; list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { - if (!afu_dev->driver) + struct pci_driver *afu_drv; + + if (!afu_dev->dev.driver) continue; + afu_drv = to_pci_driver(afu_dev->dev.driver); + switch (bus_error_event) { case CXL_ERROR_DETECTED_EVENT: afu_dev->error_state = state; - if (afu_dev->driver->err_handler && - afu_dev->driver->err_handler->error_detected) - afu_dev->driver->err_handler->error_detected(afu_dev, state); + if (afu_drv->err_handler && + afu_drv->err_handler->error_detected) + afu_drv->err_handler->error_detected(afu_dev, state); break; case CXL_SLOT_RESET_EVENT: afu_dev->error_state = state; - if (afu_dev->driver->err_handler && - afu_dev->driver->err_handler->slot_reset) - afu_dev->driver->err_handler->slot_reset(afu_dev); + if (afu_drv->err_handler && + afu_drv->err_handler->slot_reset) + afu_drv->err_handler->slot_reset(afu_dev); break; case CXL_RESUME_EVENT: - if (afu_dev->driver->err_handler && - afu_dev->driver->err_handler->resume) - afu_dev->driver->err_handler->resume(afu_dev); + if (afu_drv->err_handler && + afu_drv->err_handler->resume) + afu_drv->err_handler->resume(afu_dev); break; } } diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c index 2ba899f5659f..7e7545d01e27 100644 --- a/drivers/misc/cxl/pci.c +++ b/drivers/misc/cxl/pci.c @@ -1805,14 +1805,16 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu, return result; list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { - if (!afu_dev->driver) + struct pci_driver *afu_drv; + if (!afu_dev->dev.driver) continue; + afu_drv = to_pci_driver(afu_dev->dev.driver); + afu_dev->error_state = state; - if (afu_dev->driver->err_handler) - afu_result = afu_dev->driver->err_handler->error_detected(afu_dev, - state); + if (afu_drv->err_handler) + afu_result = afu_drv->err_handler->error_detected(afu_dev, state); /* Disconnect trumps all, NONE trumps NEED_RESET */ if (afu_result == PCI_ERS_RESULT_DISCONNECT) result = PCI_ERS_RESULT_DISCONNECT; @@ -2003,6 +2005,8 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev) continue; list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { + struct pci_driver *afu_drv; + /* Reset the device context. * TODO: make this less disruptive */ @@ -2028,12 +2032,14 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev) * shouldn't start new work until we call * their resume function. */ - if (!afu_dev->driver) + if (!afu_dev->dev.driver) continue; - if (afu_dev->driver->err_handler && - afu_dev->driver->err_handler->slot_reset) - afu_result = afu_dev->driver->err_handler->slot_reset(afu_dev); + afu_drv = to_pci_driver(afu_dev->dev.driver); + + if (afu_drv->err_handler && + afu_drv->err_handler->slot_reset) + afu_result = afu_drv->err_handler->slot_reset(afu_dev); if (afu_result == PCI_ERS_RESULT_DISCONNECT) result = PCI_ERS_RESULT_DISCONNECT; @@ -2074,9 +2080,11 @@ static void cxl_pci_resume(struct pci_dev *pdev) continue; list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { - if (afu_dev->driver && afu_dev->driver->err_handler && - afu_dev->driver->err_handler->resume) - afu_dev->driver->err_handler->resume(afu_dev); + struct pci_driver *afu_drv; + if (afu_dev->dev.driver && + (afu_drv = to_pci_driver(afu_dev->dev.driver))->err_handler && + afu_drv->err_handler->resume) + afu_drv->err_handler->resume(afu_dev); } } spin_unlock(&adapter->afu_list_lock); diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index dafdc652fcd0..f94660927544 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -164,13 +164,15 @@ static ssize_t sriov_vf_total_msix_show(struct device *dev, char *buf) { struct pci_dev *pdev = to_pci_dev(dev); + struct pci_driver *pdrv; u32 vf_total_msix = 0; device_lock(dev); - if (!pdev->driver || !pdev->driver->sriov_get_vf_total_msix) + pdrv = to_pci_driver(dev->driver); + if (!pdrv || !pdrv->sriov_get_vf_total_msix) goto unlock; - vf_total_msix = pdev->driver->sriov_get_vf_total_msix(pdev); + vf_total_msix = pdrv->sriov_get_vf_total_msix(pdev); unlock: device_unlock(dev); return sysfs_emit(buf, "%u\n", vf_total_msix); @@ -183,6 +185,7 @@ static ssize_t sriov_vf_msix_count_store(struct device *dev, { struct pci_dev *vf_dev = to_pci_dev(dev); struct pci_dev *pdev = pci_physfn(vf_dev); + struct pci_driver *pdrv; int val, ret; ret = kstrtoint(buf, 0, &val); @@ -193,13 +196,14 @@ static ssize_t sriov_vf_msix_count_store(struct device *dev, return -EINVAL; device_lock(&pdev->dev); - if (!pdev->driver || !pdev->driver->sriov_set_msix_vec_count) { + pdrv = to_pci_driver(pdev->dev.driver); + if (!pdrv || !pdrv->sriov_set_msix_vec_count) { ret = -EOPNOTSUPP; goto err_pdev; } device_lock(&vf_dev->dev); - if (vf_dev->driver) { + if (vf_dev->dev.driver) { /* * A driver is already attached to this VF and has configured * itself based on the current MSI-X vector count. Changing @@ -209,7 +213,7 @@ static ssize_t sriov_vf_msix_count_store(struct device *dev, goto err_dev; } - ret = pdev->driver->sriov_set_msix_vec_count(vf_dev, val); + ret = pdrv->sriov_set_msix_vec_count(vf_dev, val); err_dev: device_unlock(&vf_dev->dev); @@ -376,6 +380,7 @@ static ssize_t sriov_numvfs_store(struct device *dev, const char *buf, size_t count) { struct pci_dev *pdev = to_pci_dev(dev); + struct pci_driver *pdrv; int ret; u16 num_vfs; @@ -392,14 +397,16 @@ static ssize_t sriov_numvfs_store(struct device *dev, goto exit; /* is PF driver loaded */ - if (!pdev->driver) { + if (!pdev->dev.driver) { pci_info(pdev, "no driver bound to device; cannot configure SR-IOV\n"); ret = -ENOENT; goto exit; } + pdrv = to_pci_driver(pdev->dev.driver); + /* is PF driver loaded w/callback */ - if (!pdev->driver->sriov_configure) { + if (!pdrv->sriov_configure) { pci_info(pdev, "driver does not support SR-IOV configuration via sysfs\n"); ret = -ENOENT; goto exit; @@ -407,7 +414,7 @@ static ssize_t sriov_numvfs_store(struct device *dev, if (num_vfs == 0) { /* disable VFs */ - ret = pdev->driver->sriov_configure(pdev, 0); + ret = pdrv->sriov_configure(pdev, 0); goto exit; } @@ -419,7 +426,7 @@ static ssize_t sriov_numvfs_store(struct device *dev, goto exit; } - ret = pdev->driver->sriov_configure(pdev, num_vfs); + ret = pdrv->sriov_configure(pdev, num_vfs); if (ret < 0) goto exit; diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 50449ec622a3..4d20022b8631 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -457,7 +457,7 @@ static int pci_device_probe(struct device *dev) static void pci_device_remove(struct device *dev) { struct pci_dev *pci_dev = to_pci_dev(dev); - struct pci_driver *drv = pci_dev->driver; + struct pci_driver *drv = to_pci_driver(pci_dev->dev.driver); if (drv->remove) { pm_runtime_get_sync(dev); @@ -493,7 +493,7 @@ static void pci_device_remove(struct device *dev) static void pci_device_shutdown(struct device *dev) { struct pci_dev *pci_dev = to_pci_dev(dev); - struct pci_driver *drv = pci_dev->driver; + struct pci_driver *drv = to_pci_driver(pci_dev->dev.driver); pm_runtime_resume(dev); @@ -589,7 +589,7 @@ static int pci_pm_reenable_device(struct pci_dev *pci_dev) static int pci_legacy_suspend(struct device *dev, pm_message_t state) { struct pci_dev *pci_dev = to_pci_dev(dev); - struct pci_driver *drv = pci_dev->driver; + struct pci_driver *drv = to_pci_driver(dev->driver); if (drv && drv->suspend) { pci_power_t prev = pci_dev->current_state; @@ -630,7 +630,7 @@ static int pci_legacy_suspend_late(struct device *dev, pm_message_t state) static int pci_legacy_resume(struct device *dev) { struct pci_dev *pci_dev = to_pci_dev(dev); - struct pci_driver *drv = pci_dev->driver; + struct pci_driver *drv = to_pci_driver(pci_dev->dev.driver); pci_fixup_device(pci_fixup_resume, pci_dev); @@ -649,7 +649,7 @@ static void pci_pm_default_suspend(struct pci_dev *pci_dev) static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev) { - struct pci_driver *drv = pci_dev->driver; + struct pci_driver *drv = to_pci_driver(pci_dev->dev.driver); bool ret = drv && (drv->suspend || drv->resume); /* @@ -1242,11 +1242,11 @@ static int pci_pm_runtime_suspend(struct device *dev) int error; /* - * If pci_dev->driver is not set (unbound), we leave the device in D0, + * If pci_dev->dev.driver is not set (unbound), we leave the device in D0, * but it may go to D3cold when the bridge above it runtime suspends. * Save its config space in case that happens. */ - if (!pci_dev->driver) { + if (!pci_dev->dev.driver) { pci_save_state(pci_dev); return 0; } @@ -1303,7 +1303,7 @@ static int pci_pm_runtime_resume(struct device *dev) */ pci_restore_standard_config(pci_dev); - if (!pci_dev->driver) + if (!dev->driver) return 0; pci_fixup_device(pci_fixup_resume_early, pci_dev); @@ -1322,14 +1322,13 @@ static int pci_pm_runtime_resume(struct device *dev) static int pci_pm_runtime_idle(struct device *dev) { - struct pci_dev *pci_dev = to_pci_dev(dev); const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; /* - * If pci_dev->driver is not set (unbound), the device should + * If dev->driver is not set (unbound), the device should * always remain in D0 regardless of the runtime PM status */ - if (!pci_dev->driver) + if (!dev->driver) return 0; if (!pm) @@ -1436,8 +1435,8 @@ static struct pci_driver pci_compat_driver = { */ struct pci_driver *pci_dev_driver(const struct pci_dev *dev) { - if (dev->driver) - return dev->driver; + if (dev->dev.driver) + return to_pci_driver(dev->dev.driver); else { int i; for (i = 0; i <= PCI_ROM_RESOURCE; i++) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index ce2ab62b64cf..ccecf740de59 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5089,7 +5089,7 @@ EXPORT_SYMBOL_GPL(pci_dev_unlock); static void pci_dev_save_and_disable(struct pci_dev *dev) { const struct pci_error_handlers *err_handler = - dev->driver ? dev->driver->err_handler : NULL; + dev->dev.driver ? to_pci_driver(dev->dev.driver)->err_handler : NULL; /* * dev->driver->err_handler->reset_prepare() is protected against @@ -5120,7 +5120,7 @@ static void pci_dev_save_and_disable(struct pci_dev *dev) static void pci_dev_restore(struct pci_dev *dev) { const struct pci_error_handlers *err_handler = - dev->driver ? dev->driver->err_handler : NULL; + dev->dev.driver ? to_pci_driver(dev->dev.driver)->err_handler : NULL; pci_restore_state(dev); diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c index b576aa890c76..b314b54f7821 100644 --- a/drivers/pci/pcie/err.c +++ b/drivers/pci/pcie/err.c @@ -49,14 +49,15 @@ static int report_error_detected(struct pci_dev *dev, pci_channel_state_t state, enum pci_ers_result *result) { + struct pci_driver *pdrv; pci_ers_result_t vote; const struct pci_error_handlers *err_handler; device_lock(&dev->dev); if (!pci_dev_set_io_state(dev, state) || - !dev->driver || - !dev->driver->err_handler || - !dev->driver->err_handler->error_detected) { + !dev->dev.driver || + !(pdrv = to_pci_driver(dev->dev.driver))->err_handler || + !pdrv->err_handler->error_detected) { /* * If any device in the subtree does not have an error_detected * callback, PCI_ERS_RESULT_NO_AER_DRIVER prevents subsequent @@ -70,7 +71,7 @@ static int report_error_detected(struct pci_dev *dev, vote = PCI_ERS_RESULT_NONE; } } else { - err_handler = dev->driver->err_handler; + err_handler = pdrv->err_handler; vote = err_handler->error_detected(dev, state); } pci_uevent_ers(dev, vote); @@ -92,15 +93,16 @@ static int report_normal_detected(struct pci_dev *dev, void *data) static int report_mmio_enabled(struct pci_dev *dev, void *data) { pci_ers_result_t vote, *result = data; + struct pci_driver *pdrv; const struct pci_error_handlers *err_handler; device_lock(&dev->dev); - if (!dev->driver || - !dev->driver->err_handler || - !dev->driver->err_handler->mmio_enabled) + if (!dev->dev.driver || + !(pdrv = to_pci_driver(dev->dev.driver))->err_handler || + !pdrv->err_handler->mmio_enabled) goto out; - err_handler = dev->driver->err_handler; + err_handler = pdrv->err_handler; vote = err_handler->mmio_enabled(dev); *result = merge_result(*result, vote); out: @@ -112,14 +114,15 @@ static int report_slot_reset(struct pci_dev *dev, void *data) { pci_ers_result_t vote, *result = data; const struct pci_error_handlers *err_handler; + struct pci_driver *pdrv; device_lock(&dev->dev); - if (!dev->driver || - !dev->driver->err_handler || - !dev->driver->err_handler->slot_reset) + if (!dev->dev.driver || + !(pdrv = to_pci_driver(dev->dev.driver))->err_handler || + !pdrv->err_handler->slot_reset) goto out; - err_handler = dev->driver->err_handler; + err_handler = pdrv->err_handler; vote = err_handler->slot_reset(dev); *result = merge_result(*result, vote); out: @@ -130,15 +133,16 @@ static int report_slot_reset(struct pci_dev *dev, void *data) static int report_resume(struct pci_dev *dev, void *data) { const struct pci_error_handlers *err_handler; + struct pci_driver *pdrv; device_lock(&dev->dev); if (!pci_dev_set_io_state(dev, pci_channel_io_normal) || - !dev->driver || - !dev->driver->err_handler || - !dev->driver->err_handler->resume) + !dev->dev.driver || + !(pdrv = to_pci_driver(dev->dev.driver))->err_handler || + !pdrv->err_handler->resume) goto out; - err_handler = dev->driver->err_handler; + err_handler = pdrv->err_handler; err_handler->resume(dev); out: pci_uevent_ers(dev, PCI_ERS_RESULT_RECOVERED); diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c index f2d7f70a7a10..73831fb87a1e 100644 --- a/drivers/pci/xen-pcifront.c +++ b/drivers/pci/xen-pcifront.c @@ -601,12 +601,12 @@ static pci_ers_result_t pcifront_common_process(int cmd, result = PCI_ERS_RESULT_NONE; pcidev = pci_get_domain_bus_and_slot(domain, bus, devfn); - if (!pcidev || !pcidev->driver) { + if (!pcidev || !pcidev->dev.driver) { dev_err(&pdev->xdev->dev, "device or AER driver is NULL\n"); pci_dev_put(pcidev); return result; } - pdrv = pcidev->driver; + pdrv = to_pci_driver(pcidev->dev.driver); if (pdrv->err_handler && pdrv->err_handler->error_detected) { pci_dbg(pcidev, "trying to call AER service\n"); diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 2c9f25ca8edd..2f4729f4f1e0 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -103,7 +103,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) struct xhci_driver_data *driver_data; const struct pci_device_id *id; - id = pci_match_id(pdev->driver->id_table, pdev); + id = pci_match_id(to_pci_driver(pdev->dev.driver)->id_table, pdev); if (id && id->driver_data) { driver_data = (struct xhci_driver_data *)id->driver_data; -- 2.30.2 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver 2021-09-27 20:43 [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König 2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König 2021-09-27 20:43 ` [PATCH v4 7/8] PCI: Replace pci_dev::driver usage by pci_dev::dev.driver Uwe Kleine-König @ 2021-09-27 20:59 ` Uwe Kleine-König 2 siblings, 0 replies; 12+ messages in thread From: Uwe Kleine-König @ 2021-09-27 20:59 UTC (permalink / raw) To: Uwe Kleine-König Cc: Giovanni Cabiddu, Mark Rutland, x86, Alexander Shishkin, Alexander Duyck, Jesse Brandeburg, Sathya Prakash, oss-drivers, netdev, Oliver O'Halloran, H. Peter Anvin, Jiri Olsa, Boris Ostrovsky, Paul Mackerras, Marco Chiappero, Stefano Stabellini, Herbert Xu, linux-scsi, Ido Schimmel, Rafał Miłecki, qat-linux, Christoph Hellwig, Peter Zijlstra, Ingo Molnar, Bjorn Helgaas, linux-pci, Jakub Kicinski, Yisen Zhuang, Frederic Barrat, Fiona Trahe, Andrew Donnellan, Arnd Bergmann, Konrad Rzeszutek Wilk, Suganath Prabu Subramani, Arnaldo Carvalho de Melo, Jack Xu, Borislav Petkov, Michael Buesch, Jiri Pirko, Bjorn Helgaas, Namhyung Kim, Thomas Gleixner, Andy Shevchenko, Juergen Gross, Salil Mehta, Sreekanth Reddy, xen-devel, Vadym Kochan, MPT-FusionLinux.pdl, linux-usb, linux-wireless, linux-kernel, David S. Miller, Mathias Nyman, Zhou Wang, linux-crypto, kernel, Greg Kroah-Hartman, Simon Horman, Wojciech Ziemba, Tomaszx Kowalik, linuxppc-dev, Taras Chornyi, linux-perf-users [-- Attachment #1: Type: text/plain, Size: 592 bytes --] Hello, On Mon, Sep 27, 2021 at 10:43:18PM +0200, Uwe Kleine-König wrote: > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> I sent the series from the wrong email address :-\ I should have used the above address as sender. Also I failed to add Christoph Hellwig to Cc: (fixed for this mail). I guess I'll have to send a v5, but I will wait a bit until the build bots are done with this series. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-09-29 9:05 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-09-27 20:43 [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König 2021-09-27 20:43 ` [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the driver name Uwe Kleine-König 2021-09-28 8:28 ` Kalle Valo 2021-09-28 10:01 ` Simon Horman 2021-09-28 10:31 ` Uwe Kleine-König 2021-09-29 8:05 ` Simon Horman 2021-09-29 9:04 ` Uwe Kleine-König 2021-09-28 17:17 ` Bjorn Helgaas 2021-09-28 19:29 ` Uwe Kleine-König 2021-09-28 20:08 ` Bjorn Helgaas 2021-09-27 20:43 ` [PATCH v4 7/8] PCI: Replace pci_dev::driver usage by pci_dev::dev.driver Uwe Kleine-König 2021-09-27 20:59 ` [PATCH v4 0/8] PCI: Drop duplicated tracking of a pci_dev's bound driver Uwe Kleine-König
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).