[PATCH v3 2/2] pseries/eeh: Add Pseries pcibios_bus_add_device

Bjorn Helgaas helgaas at kernel.org
Thu Oct 12 07:05:24 AEDT 2017


On Fri, Sep 22, 2017 at 09:19:28AM -0500, Bryant G. Ly wrote:
> This patch adds the machine dependent call for
> pcibios_bus_add_device, since the previous patch
> separated the calls out between the PowerNV and PowerVM.
> 
> The difference here is that for the PowerVM environment
> we do not want match_driver set because in this environment
> we do not want the VF device drivers to load immediately, due to
> firmware loading the device node when VF device is assigned to the
> logical partition.
> 
> This patch will depend on the patch linked below, which is under
> review.
> 
> https://patchwork.kernel.org/patch/9882915/
> 
> Signed-off-by: Bryant G. Ly <bryantly at linux.vnet.ibm.com>
> Signed-off-by: Juan J. Alvarez <jjalvare at us.ibm.com>
> ---
>  arch/powerpc/platforms/pseries/eeh_pseries.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c
> index 6b812ad990e4..45946ee90985 100644
> --- a/arch/powerpc/platforms/pseries/eeh_pseries.c
> +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
> @@ -64,6 +64,27 @@ static unsigned char slot_errbuf[RTAS_ERROR_LOG_MAX];
>  static DEFINE_SPINLOCK(slot_errbuf_lock);
>  static int eeh_error_buf_size;
>  
> +void pseries_pcibios_bus_add_device(struct pci_dev *pdev)
> +{
> +	struct pci_dn *pdn = pci_get_pdn(pdev);
> +
> +	if (!pdev->is_virtfn)
> +		return;
> +
> +	pdn->device_id  =  pdev->device;
> +	pdn->vendor_id  =  pdev->vendor;
> +	pdn->class_code =  pdev->class;
> +
> +	/*
> +	 * The following operations will fail if VF's sysfs files
> +	 * aren't created or its resources aren't finalized.
> +	 */
> +	eeh_add_device_early(pdn);
> +	eeh_add_device_late(pdev);
> +	eeh_sysfs_add_device(pdev);
> +	pdev->match_driver = -1;

match_driver is a bool, which should be assigned "true" or "false".

> +}
> +
>  /**
>   * pseries_eeh_init - EEH platform dependent initialization
>   *
> @@ -120,6 +141,9 @@ static int pseries_eeh_init(void)
>  	/* Set EEH probe mode */
>  	eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
>  
> +	/* Set EEH machine dependent code */
> +	ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device;
> +
>  	return 0;
>  }
>  
> -- 
> 2.11.0 (Apple Git-81)
> 


More information about the Linuxppc-dev mailing list