Re: [PATCH v4 12/24] alpha/PCI: Use BAR index in sysfs attr->private instead of resource pointer

Ilpo Järvinen <[email protected]>
Newsgroups org.kernel.vger.linux-alpha,org.kernel.vger.linux-pci,org.ozlabs.lists.linuxppc-dev
Message-ID <[email protected]>
On Sat, 11 Apr 2026, Krzysztof Wilczyński wrote:

> Currently, Alpha's pci_create_one_attr() stores a resource pointer in
> attr->private, and pci_mmap_resource() loops through all BARs to find
> the matching index.
> 
> Thus, store the BAR index directly in attr->private and retrieve the
> resource via pci_resource_n().  This eliminates the loop and aligns
> with the convention used by the generic PCI sysfs code.
> 
> While at it, add parentheses around the bitwise flag test in
> pci_mmap_resource() to make the precedence explicit, and to
> match the preferred style.

Probably not necessary to touch this line now at all as you're going to 
replace it two patches later anyway so it just adds noise.

Reviewed-by: Ilpo Järvinen <[email protected]>

> The PCI core change was first added in the commit dca40b186b75 ("PCI:
> Use BAR index in sysfs attr->private instead of resource pointer").
> 
> Signed-off-by: Krzysztof Wilczyński <[email protected]>
> ---
>  arch/alpha/kernel/pci-sysfs.c | 17 ++++++-----------
>  1 file changed, 6 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/alpha/kernel/pci-sysfs.c b/arch/alpha/kernel/pci-sysfs.c
> index 2324720c3e83..c84867ce31f5 100644
> --- a/arch/alpha/kernel/pci-sysfs.c
> +++ b/arch/alpha/kernel/pci-sysfs.c
> @@ -69,25 +69,20 @@ static int pci_mmap_resource(struct kobject *kobj,
>  			     struct vm_area_struct *vma, int sparse)
>  {
>  	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
> -	struct resource *res = attr->private;
> +	int barno = (unsigned long)attr->private;
> +	struct resource *res = pci_resource_n(pdev, barno);
>  	enum pci_mmap_state mmap_type;
>  	struct pci_bus_region bar;
> -	int i, ret;
> +	int ret;
>  
>  	ret = security_locked_down(LOCKDOWN_PCI_ACCESS);
>  	if (ret)
>  		return ret;
>  
> -	for (i = 0; i < PCI_STD_NUM_BARS; i++)
> -		if (res == &pdev->resource[i])
> -			break;
> -	if (i >= PCI_STD_NUM_BARS)
> -		return -ENODEV;
> -
> -	if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(res->start))
> +	if ((res->flags & IORESOURCE_MEM) && iomem_is_exclusive(res->start))
>  		return -EINVAL;
>  
> -	if (!__pci_mmap_fits(pdev, i, vma, sparse))
> +	if (!__pci_mmap_fits(pdev, barno, vma, sparse))
>  		return -EINVAL;
>  
>  	pcibios_resource_to_bus(pdev->bus, &bar, res);
> @@ -170,7 +165,7 @@ static int pci_create_one_attr(struct pci_dev *pdev, int num, char *name,
>  	res_attr->attr.name = name;
>  	res_attr->attr.mode = S_IRUSR | S_IWUSR;
>  	res_attr->size = sparse ? size << 5 : size;
> -	res_attr->private = &pdev->resource[num];
> +	res_attr->private = (void *)(unsigned long)num;
>  	return sysfs_create_bin_file(&pdev->dev.kobj, res_attr);
>  }
>  
> 

-- 
 i.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.