[PATCH v2] cxl: prevent read/write to AFU config space while AFU not configured

Frederic Barrat fbarrat at linux.vnet.ibm.com
Sat Dec 10 03:30:40 AEDT 2016



> diff --git a/drivers/misc/cxl/vphb.c b/drivers/misc/cxl/vphb.c
> index 3519ace..639a343 100644
> --- a/drivers/misc/cxl/vphb.c
> +++ b/drivers/misc/cxl/vphb.c
> @@ -76,23 +76,22 @@ static int cxl_pcie_cfg_record(u8 bus, u8 devfn)
>  	return (bus << 8) + devfn;
>  }
>
> -static int cxl_pcie_config_info(struct pci_bus *bus, unsigned int devfn,
> -				struct cxl_afu **_afu, int *_record)
> +static inline struct cxl_afu *pci_bus_to_afu(struct pci_bus *bus)
>  {
> -	struct pci_controller *phb;
> -	struct cxl_afu *afu;
> -	int record;
> +	struct pci_controller *phb = bus ? pci_bus_to_host(bus) : NULL;
>
> -	phb = pci_bus_to_host(bus);
> -	if (phb == NULL)
> -		return PCIBIOS_DEVICE_NOT_FOUND;
> +	return phb ? phb->private_data : NULL;
> +}
> +
> +static inline int cxl_pcie_config_info(struct pci_bus *bus, unsigned int devfn,
> +				       struct cxl_afu *afu, int *_record)
> +{
> +	int record;
>
> -	afu = (struct cxl_afu *)phb->private_data;
>  	record = cxl_pcie_cfg_record(bus->number, devfn);
>  	if (record > afu->crs_num)
>  		return PCIBIOS_DEVICE_NOT_FOUND;
>
> -	*_afu = afu;
>  	*_record = record;
>  	return 0;
>  }


There's no reason to pass the afu parameter to that function, is it?
Pushing it further, do we need cxl_pcie_config_info()? It's now a simple 
wrapper around cxl_pcie_cfg_record()

   Fred



More information about the Linuxppc-dev mailing list