mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
firmware: arm_ffa: Unregister bus notifier on teardown for FF-A v1.0
For FF-A v1.0 the driver registers a bus notifier to backfill UUID
matching, but the notifier was never unregistered on cleanup paths.
Track the registration state and unregister it during teardown and early
partition-setup failure.
Fixes: 9dd15934f6 ("firmware: arm_ffa: Move the FF-A v1.0 NULL UUID workaround to bus notifier")
Link: https://patch.msgid.link/20260428-ffa_fixes-v2-5-8595ae450034@kernel.org
Signed-off-by: Sudeep Holla <sudeep.holla@kernel.org>
This commit is contained in:
parent
9985d5357e
commit
6d3daa9b8d
|
|
@ -101,6 +101,7 @@ struct ffa_drv_info {
|
|||
bool mem_ops_native;
|
||||
bool msg_direct_req2_supp;
|
||||
bool bitmap_created;
|
||||
bool bus_notifier_registered;
|
||||
bool notif_enabled;
|
||||
unsigned int sched_recv_irq;
|
||||
unsigned int notif_pend_irq;
|
||||
|
|
@ -1630,6 +1631,15 @@ static struct notifier_block ffa_bus_nb = {
|
|||
.notifier_call = ffa_bus_notifier,
|
||||
};
|
||||
|
||||
static void ffa_bus_notifier_unregister(void)
|
||||
{
|
||||
if (!drv_info->bus_notifier_registered)
|
||||
return;
|
||||
|
||||
bus_unregister_notifier(&ffa_bus_type, &ffa_bus_nb);
|
||||
drv_info->bus_notifier_registered = false;
|
||||
}
|
||||
|
||||
static int ffa_xa_add_partition_info(struct ffa_device *dev)
|
||||
{
|
||||
struct ffa_dev_part_info *info;
|
||||
|
|
@ -1713,6 +1723,8 @@ static void ffa_partitions_cleanup(void)
|
|||
struct list_head *phead;
|
||||
unsigned long idx;
|
||||
|
||||
ffa_bus_notifier_unregister();
|
||||
|
||||
/* Clean up/free all registered devices */
|
||||
ffa_devices_unregister();
|
||||
|
||||
|
|
@ -1740,11 +1752,14 @@ static int ffa_setup_partitions(void)
|
|||
ret = bus_register_notifier(&ffa_bus_type, &ffa_bus_nb);
|
||||
if (ret)
|
||||
pr_err("Failed to register FF-A bus notifiers\n");
|
||||
else
|
||||
drv_info->bus_notifier_registered = true;
|
||||
}
|
||||
|
||||
count = ffa_partition_probe(&uuid_null, &pbuf);
|
||||
if (count <= 0) {
|
||||
pr_info("%s: No partitions found, error %d\n", __func__, count);
|
||||
ffa_bus_notifier_unregister();
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user