[Acked] [PATCH Xenial SRU] cxl: Make vPHB device node match adapter's

Andy Whitcroft apw at canonical.com
Wed Jun 22 12:37:40 UTC 2016


On Tue, Jun 21, 2016 at 12:02:21PM -0600, Tim Gardner wrote:
> From: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1594847
> 
> On bare-metal, when a device is attached to the cxl card, lsvpd shows
> a location code such as (with cxlflash):
>      # lsvpd -l sg22
>      ...
>      *YL U78CB.001.WZS0073-P1-C33-B0-T0-L0
> which makes it hard to easily identify the cxl adapter owning the
> flash device, since in this example C33 refers to a P8 processor.
> 
> lsvpd looks in the parent devices until it finds a location code, so the
> device node for the vPHB ends up being used.
> 
> By reusing the device node of the adapter for the vPHB, lsvpd shows:
>      # lsvpd -l sg16
>      ...
>      *YL U78C9.001.WZS09XA-P1-C7-B1-T0-L3
> where C7 is the PCI slot of the cxl adapter.
> 
> On powerVM, the vPHB was already using the adapter device node, so
> there's no change there.
> 
> Tested by cxlflash on bare-metal and powerVM.
> 
> Signed-off-by: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
> Reviewed-by: Matthew R. Ochs <mrochs at linux.vnet.ibm.com>
> Acked-by: Ian Munsie <imunsie at au1.ibm.com>
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> (cherry picked from linux-next commit a430739009384ba2c4804f3a427334ff395433cd)
> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
> ---
>  drivers/misc/cxl/vphb.c | 21 ++++++++++-----------
>  1 file changed, 10 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/misc/cxl/vphb.c b/drivers/misc/cxl/vphb.c
> index cdc7723..012b6aa 100644
> --- a/drivers/misc/cxl/vphb.c
> +++ b/drivers/misc/cxl/vphb.c
> @@ -208,20 +208,19 @@ static struct pci_controller_ops cxl_pci_controller_ops =
>  
>  int cxl_pci_vphb_add(struct cxl_afu *afu)
>  {
> -	struct pci_dev *phys_dev;
> -	struct pci_controller *phb, *phys_phb;
> +	struct pci_controller *phb;
>  	struct device_node *vphb_dn;
>  	struct device *parent;
>  
> -	if (cpu_has_feature(CPU_FTR_HVMODE)) {
> -		phys_dev = to_pci_dev(afu->adapter->dev.parent);
> -		phys_phb = pci_bus_to_host(phys_dev->bus);
> -		vphb_dn = phys_phb->dn;
> -		parent = &phys_dev->dev;
> -	} else {
> -		vphb_dn = afu->adapter->dev.parent->of_node;
> -		parent = afu->adapter->dev.parent;
> -	}
> +	/* The parent device is the adapter. Reuse the device node of
> +	 * the adapter.
> +	 * We don't seem to care what device node is used for the vPHB,
> +	 * but tools such as lsvpd walk up the device parents looking
> +	 * for a valid location code, so we might as well show devices
> +	 * attached to the adapter as being located on that adapter.
> +	 */
> +	parent = afu->adapter->dev.parent;
> +	vphb_dn = parent->of_node;
>  
>  	/* Alloc and setup PHB data structure */
>  	phb = pcibios_alloc_controller(vphb_dn);

Looks to do what is claimed.  Should be easily testable.

Acked-by: Andy Whitcroft <apw at canonical.com>

-apw




More information about the kernel-team mailing list