[PATCH] powerpc/pseries: Only register vio drivers if vio bus exists

Paul Menzel pmenzel at molgen.mpg.de
Tue Mar 30 21:32:03 AEDT 2021


Dear Michael,


Am 16.03.21 um 02:09 schrieb Michael Ellerman:
> The vio bus is a fake bus, which we use on pseries LPARs (guests) to
> discover devices provided by the hypervisor. There's no need or sense
> in creating the vio bus on bare metal systems.
> 
> Which is why commit 4336b9337824 ("powerpc/pseries: Make vio and
> ibmebus initcalls pseries specific") made the initialisation of the
> vio bus only happen in LPARs.
> 
> However as a result of that commit we now see errors at boot on bare
> metal systems:
> 
>    Driver 'hvc_console' was unable to register with bus_type 'vio' because the bus was not initialized.
>    Driver 'tpm_ibmvtpm' was unable to register with bus_type 'vio' because the bus was not initialized.
> 
> This happens because those drivers are built-in, and are calling
> vio_register_driver(). It in turn calls driver_register() with a
> reference to vio_bus_type, but we haven't registered vio_bus_type with
> the driver core.
> 
> Fix it by also guarding vio_register_driver() with a check to see if
> we are on pseries.
> 
> Fixes: 4336b9337824 ("powerpc/pseries: Make vio and ibmebus initcalls pseries specific")
> Reported-by: Paul Menzel <pmenzel at molgen.mpg.de>
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> ---
>   arch/powerpc/platforms/pseries/vio.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c
> index 9cb4fc839fd5..429053d0402a 100644
> --- a/arch/powerpc/platforms/pseries/vio.c
> +++ b/arch/powerpc/platforms/pseries/vio.c
> @@ -1285,6 +1285,10 @@ static int vio_bus_remove(struct device *dev)
>   int __vio_register_driver(struct vio_driver *viodrv, struct module *owner,
>   			  const char *mod_name)
>   {
> +	// vio_bus_type is only initialised for pseries
> +	if (!machine_is(pseries))
> +		return -ENODEV;
> +
>   	pr_debug("%s: driver %s registering\n", __func__, viodrv->name);
>   
>   	/* fill in 'struct driver' fields */

Thank you. The errors are gone now.

Tested-by: Paul Menzel <pmenzel at molgen.mpg.de> # IBM S822L (POWER8)

As it fixes a commit from Linux 5.8, should it be tagged for the stable 
releases, or is it going to be picked up automatically due to the Fixes tag?


Kind regards,

Paul


More information about the Linuxppc-dev mailing list