diff mbox series

[v6,2/5] PCI: Split out next_ari_fn() from next_fn()

Message ID 20220628143100.3228092-3-schnelle@linux.ibm.com (mailing list archive)
State Accepted
Headers show
Series PCI: Rework pci_scan_slot() and isolated PCI functions | expand

Commit Message

Niklas Schnelle June 28, 2022, 2:30 p.m. UTC
In commit b1bd58e448f2 ("PCI: Consolidate "next-function" functions")
the next_fn() function subsumed the traditional and ARI based next
function determination. This got rid of some needlessly complex function
pointer handling but also reduced the separation between these very
different methods of finding the next function. With the next_fn()
cleaned up a bit we can re-introduce this separation by moving out the
ARI handling while sticking with direct function calls.

Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
---
 drivers/pci/probe.c | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

Comments

Pierre Morel June 30, 2022, 12:44 p.m. UTC | #1
On 6/28/22 16:30, Niklas Schnelle wrote:
> In commit b1bd58e448f2 ("PCI: Consolidate "next-function" functions")
> the next_fn() function subsumed the traditional and ARI based next
> function determination. This got rid of some needlessly complex function
> pointer handling but also reduced the separation between these very
> different methods of finding the next function. With the next_fn()
> cleaned up a bit we can re-introduce this separation by moving out the
> ARI handling while sticking with direct function calls.
> 
> Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
> ---
>   drivers/pci/probe.c | 30 +++++++++++++++++-------------
>   1 file changed, 17 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index b05d0ed83a24..2c737dce757e 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -2579,26 +2579,30 @@ struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
>   }
>   EXPORT_SYMBOL(pci_scan_single_device);
>   
> -static int next_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
> +static int next_ari_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
>   {
>   	int pos;
>   	u16 cap = 0;
>   	unsigned int next_fn;
>   
> -	if (pci_ari_enabled(bus)) {
> -		if (!dev)
> -			return -ENODEV;
> -		pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
> -		if (!pos)
> -			return -ENODEV;
> +	if (!dev)
> +		return -ENODEV;
> +	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
> +	if (!pos)
> +		return -ENODEV;
> +
> +	pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
> +	next_fn = PCI_ARI_CAP_NFN(cap);
> +	if (next_fn <= fn)
> +		return -ENODEV;	/* protect against malformed list */
>   
> -		pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
> -		next_fn = PCI_ARI_CAP_NFN(cap);
> -		if (next_fn <= fn)
> -			return -ENODEV;	/* protect against malformed list */
> +	return next_fn;
> +}
>   
> -		return next_fn;
> -	}
> +static int next_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
> +{
> +	if (pci_ari_enabled(bus))
> +		return next_ari_fn(bus, dev, fn);
>   
>   	if (fn >= 7)
>   		return -ENODEV;
> 

Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
diff mbox series

Patch

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index b05d0ed83a24..2c737dce757e 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2579,26 +2579,30 @@  struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn)
 }
 EXPORT_SYMBOL(pci_scan_single_device);
 
-static int next_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
+static int next_ari_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
 {
 	int pos;
 	u16 cap = 0;
 	unsigned int next_fn;
 
-	if (pci_ari_enabled(bus)) {
-		if (!dev)
-			return -ENODEV;
-		pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
-		if (!pos)
-			return -ENODEV;
+	if (!dev)
+		return -ENODEV;
+	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
+	if (!pos)
+		return -ENODEV;
+
+	pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
+	next_fn = PCI_ARI_CAP_NFN(cap);
+	if (next_fn <= fn)
+		return -ENODEV;	/* protect against malformed list */
 
-		pci_read_config_word(dev, pos + PCI_ARI_CAP, &cap);
-		next_fn = PCI_ARI_CAP_NFN(cap);
-		if (next_fn <= fn)
-			return -ENODEV;	/* protect against malformed list */
+	return next_fn;
+}
 
-		return next_fn;
-	}
+static int next_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
+{
+	if (pci_ari_enabled(bus))
+		return next_ari_fn(bus, dev, fn);
 
 	if (fn >= 7)
 		return -ENODEV;