[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210928192936.w5umyzivi4hs6q3r@pengutronix.de>
Date: Tue, 28 Sep 2021 21:29:36 +0200
From: Uwe Kleine-König <u.kleine-koenig@...gutronix.de>
To: Bjorn Helgaas <helgaas@...nel.org>
Cc: Uwe Kleine-König <uwe@...ine-koenig.org>,
Oliver O'Halloran <oohall@...il.com>,
Russell Currey <ruscur@...sell.cc>,
Benjamin Herrenschmidt <benh@...nel.crashing.org>,
linux-pci@...r.kernel.org, Alexander Duyck <alexanderduyck@...com>,
oss-drivers@...igine.com, Paul Mackerras <paulus@...ba.org>,
Herbert Xu <herbert@...dor.apana.org.au>,
Michael Ellerman <mpe@...erman.id.au>,
Rafał Miłecki <zajec5@...il.com>,
Jesse Brandeburg <jesse.brandeburg@...el.com>,
Ido Schimmel <idosch@...dia.com>,
Jakub Kicinski <kuba@...nel.org>,
Yisen Zhuang <yisen.zhuang@...wei.com>,
Vadym Kochan <vkochan@...vell.com>, Michael Buesch <m@...s.ch>,
Jiri Pirko <jiri@...dia.com>,
Salil Mehta <salil.mehta@...wei.com>, netdev@...r.kernel.org,
linux-wireless@...r.kernel.org, linux-kernel@...r.kernel.org,
Taras Chornyi <tchornyi@...vell.com>,
Zhou Wang <wangzhou1@...ilicon.com>,
linux-crypto@...r.kernel.org, kernel@...gutronix.de,
Simon Horman <simon.horman@...igine.com>,
linuxppc-dev@...ts.ozlabs.org,
"David S. Miller" <davem@...emloft.net>
Subject: Re: [PATCH v4 4/8] PCI: replace pci_dev::driver usage that gets the
driver name
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@...gutronix.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/ |
Download attachment "signature.asc" of type "application/pgp-signature" (489 bytes)
Powered by blists - more mailing lists