Subject: Re: [PATCH] cxl: Ignore probes for virtual afu pci devices

From: Frederic Barrat <[email-masked]>
Date: Wed, 2 Mar 2016 17:09:48 +0100

Hi Vaibhav,

Looks ok to me.
Reviewed-by: [email-masked]

   Fred

Le 29/02/2016 06:40, Vaibhav Jain a écrit :
> Add a check at the beginning of cxl_probe function to ignore virtual pci
> devices created for each afu registered. This fixes the the errors
> messages logged about missing CXL vsec, when cxl probe is unable to
> find necessary vsec entries in device pci config space. The error
> message logged are of the form :
>
> cxl-pci 0004:00:00.0: ABORTING: CXL VSEC not found!
> cxl-pci 0004:00:00.0: cxl_init_adapter failed: -19
>
> Cc: Ian Munsie <[email-masked]>
> Cc: Frederic Barrat <[email-masked]>
> Signed-off-by: Vaibhav Jain <[email-masked]>
> ---
>   drivers/misc/cxl/cxl.h  | 2 ++
>   drivers/misc/cxl/pci.c  | 5 +++++
>   drivers/misc/cxl/vphb.c | 9 +++++++++
>   3 files changed, 16 insertions(+)
>
> diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
> index a521bc7..68d39f5 100644
> --- a/drivers/misc/cxl/cxl.h
> +++ b/drivers/misc/cxl/cxl.h
> @@ -764,4 +764,6 @@ unsigned int afu_poll(struct file *file, struct poll_table_struct *poll);
>   ssize_t afu_read(struct file *file, char __user *buf, size_t count, loff_t *off);
>   extern const struct file_operations afu_fops;
>
> +/* check if the given pci_dev is on the the cxl vphb bus */
> +bool cxl_pci_is_vphb_device(struct pci_dev *dev);
>   #endif
> diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
> index 4c1903f..2f219c1 100644
> --- a/drivers/misc/cxl/pci.c
> +++ b/drivers/misc/cxl/pci.c
> @@ -1278,6 +1278,11 @@ static int cxl_probe(struct pci_dev *dev, const struct pci_device_id *id)
>   	int slice;
>   	int rc;
>
> +	if (cxl_pci_is_vphb_device(dev)) {
> +		dev_dbg(&dev->dev, "cxl_init_adapter: Ignoring cxl vphb device\n");
> +		return -ENODEV;
> +	}
> +
>   	if (cxl_verbose)
>   		dump_cxl_config_space(dev);
>
> diff --git a/drivers/misc/cxl/vphb.c b/drivers/misc/cxl/vphb.c
> index cbd4331..e76a42a 100644
> --- a/drivers/misc/cxl/vphb.c
> +++ b/drivers/misc/cxl/vphb.c
> @@ -296,6 +296,15 @@ void cxl_pci_vphb_remove(struct cxl_afu *afu)
>   	pcibios_free_controller(phb);
>   }
>
> +bool cxl_pci_is_vphb_device(struct pci_dev *dev)
> +{
> +	struct pci_controller *phb;
> +
> +	phb = pci_bus_to_host(dev->bus);
> +
> +	return (phb->ops == &cxl_pcie_pci_ops);
> +}
> +
>   struct cxl_afu *cxl_pci_to_afu(struct pci_dev *dev)
>   {
>   	struct pci_controller *phb;
>