Re: [PATCH v5 2/7] PCI/ATS: Initialize PRI in pci_ats_init()
From: Kuppuswamy Sathyanarayanan
Date: Thu Aug 15 2019 - 13:33:17 EST
On Wed, Aug 14, 2019 at 11:46:57PM -0500, Bjorn Helgaas wrote:
> On Thu, Aug 01, 2019 at 05:05:59PM -0700, sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx wrote:
> > From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>
> >
> > Currently, PRI Capability checks are repeated across all PRI API's.
> > Instead, cache the capability check result in pci_pri_init() and use it
> > in other PRI API's. Also, since PRI is a shared resource between PF/VF,
> > initialize default values for common PRI features in pci_pri_init().
> >
> > Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>
> > ---
> > drivers/pci/ats.c | 80 ++++++++++++++++++++++++++++-------------
> > include/linux/pci-ats.h | 5 +++
> > include/linux/pci.h | 1 +
> > 3 files changed, 61 insertions(+), 25 deletions(-)
> >
>
> > diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c
> > index cdd936d10f68..280be911f190 100644
> > --- a/drivers/pci/ats.c
> > +++ b/drivers/pci/ats.c
>
> > @@ -28,6 +28,8 @@ void pci_ats_init(struct pci_dev *dev)
> > return;
> >
> > dev->ats_cap = pos;
> > +
> > + pci_pri_init(dev);
> > }
> >
> > /**
> > @@ -170,36 +172,72 @@ int pci_ats_page_aligned(struct pci_dev *pdev)
> > EXPORT_SYMBOL_GPL(pci_ats_page_aligned);
> >
> > #ifdef CONFIG_PCI_PRI
> > +
> > +void pci_pri_init(struct pci_dev *pdev)
> > +{
> > ...
> > +}
>
> > diff --git a/include/linux/pci-ats.h b/include/linux/pci-ats.h
> > index 1a0bdaee2f32..33653d4ca94f 100644
> > --- a/include/linux/pci-ats.h
> > +++ b/include/linux/pci-ats.h
> > @@ -6,6 +6,7 @@
> >
> > #ifdef CONFIG_PCI_PRI
> >
> > +void pci_pri_init(struct pci_dev *pdev);
>
> pci_pri_init() is implemented and called in drivers/pci/ats.c. Unless
> there's a need to call this from outside ats.c, it should be static
> and should not be declared here.
>
> If you can make it static, please also reorder the code so you don't
> need a forward declaration in ats.c.
Initially I did implement it as static function in drivers/pci/ats.c
and protected the calling of pci_pri_init() with #ifdef CONFIG_PCI_PRI.
But Keith did not like the implementation using #ifdefs and asked me to
define empty functions. That's the reason for moving it to header file.
In your previous review to this patch, since this is not used outside ats.c
you asked me to move the declaraion to drivers/pci/pci.h. So I was planing
to move it to drivers/pci/pci.h in next version. Let me know if you are in
agreement.
>
> > int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
> > void pci_disable_pri(struct pci_dev *pdev);
> > void pci_restore_pri_state(struct pci_dev *pdev);
> > @@ -13,6 +14,10 @@ int pci_reset_pri(struct pci_dev *pdev);
> >
> > #else /* CONFIG_PCI_PRI */
> >
> > +static inline void pci_pri_init(struct pci_dev *pdev)
> > +{
> > +}
> > +
> > static inline int pci_enable_pri(struct pci_dev *pdev, u32 reqs)
> > {
> > return -ENODEV;
--
--
Sathyanarayanan Kuppuswamy
Linux kernel developer