[PATCH 2/2] firmware: arm_ffa: Fix __ffa_devices_unregister

Jens Wiklander jens.wiklander at linaro.org
Mon Oct 4 03:08:28 PDT 2021


On Fri, Sep 24, 2021 at 11:29 AM Sudeep Holla <sudeep.holla at arm.com> wrote:
>
> When arm_ffa firmware driver module is unloaded or removed we call
> __ffa_devices_unregister on all the devices on the ffa bus. It must
> unregister all the devices instead it is currently just releasing the
> devices without unregistering. That is pure wrong as when we try to
> load the module back again, it will result in the kernel crash something
> like below.
>
> -->8
>  CPU: 2 PID: 232 Comm: modprobe Not tainted 5.15.0-rc2+ #169
>  Hardware name: FVP Base RevC (DT)
>  Call trace:
>   dump_backtrace+0x0/0x1cc
>   show_stack+0x18/0x64
>   dump_stack_lvl+0x64/0x7c
>   dump_stack+0x18/0x38
>   sysfs_create_dir_ns+0xe4/0x140
>   kobject_add_internal+0x170/0x358
>   kobject_add+0x94/0x100
>   device_add+0x178/0x5f0
>   device_register+0x20/0x30
>   ffa_device_register+0x80/0xcc [ffa_module]
>   ffa_setup_partitions+0x7c/0x108 [ffa_module]
>   init_module+0x290/0x2dc [ffa_module]
>   do_one_initcall+0xbc/0x230
>   do_init_module+0x58/0x304
>   load_module+0x15e0/0x1f68
>   __arm64_sys_finit_module+0xb8/0xf4
>   invoke_syscall+0x44/0x140
>   el0_svc_common+0xb4/0xf0
>   do_el0_svc+0x24/0x80
>   el0_svc+0x20/0x50
>   el0t_64_sync_handler+0x84/0xe4
>   el0t_64_sync+0x1a0/0x1a4
>  kobject_add_internal failed for arm-ffa-8001 with -EEXIST, don't try to
>  register things with the same name in the same directory.
> ----
>
> Fix the issue by calling device_unregister in __ffa_devices_unregister
> which will also take care of calling device_release(which is mapped to
> ffa_release_device)
>
> Fixes: e781858488b9 ("firmware: arm_ffa: Add initial FFA bus support for device enumeration")
> Signed-off-by: Sudeep Holla <sudeep.holla at arm.com>
> ---
>  drivers/firmware/arm_ffa/bus.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>

Tested-by: Jens Wiklander <jens.wiklander at linaro.org>

> diff --git a/drivers/firmware/arm_ffa/bus.c b/drivers/firmware/arm_ffa/bus.c
> index f01348e6cf1c..641a91819088 100644
> --- a/drivers/firmware/arm_ffa/bus.c
> +++ b/drivers/firmware/arm_ffa/bus.c
> @@ -135,7 +135,7 @@ static void ffa_release_device(struct device *dev)
>
>  static int __ffa_devices_unregister(struct device *dev, void *data)
>  {
> -       ffa_release_device(dev);
> +       device_unregister(dev);
>
>         return 0;
>  }
> --
> 2.25.1
>



More information about the linux-arm-kernel mailing list