[PATCH] powerpc/pseries: Only register vio drivers if vio bus exists
Michael Ellerman
mpe at ellerman.id.au
Wed Mar 31 15:38:11 AEDT 2021
Paul Menzel <pmenzel at molgen.mpg.de> writes:
> 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?
It's not what I'd describe as a bad bug, so I'm not that inclined to
tag it for stable.
But given it has a Fixes tag, and is quite small, the bots will probably
backport it automatically.
cheers
More information about the Linuxppc-dev
mailing list