firmware: arm_ffa: Refactor addition of partition information into XArray
Move the common code handling addition of the FF-A partition information into the XArray as a new routine. No functional change. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Message-Id: <20250217-ffa_updates-v3-6-bd1d9de615e7@arm.com> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>pull/1188/head
parent
7bc0f589c8
commit
3c3d676746
|
|
@ -1423,11 +1423,30 @@ static struct notifier_block ffa_bus_nb = {
|
|||
.notifier_call = ffa_bus_notifier,
|
||||
};
|
||||
|
||||
static int ffa_xa_add_partition_info(int vm_id)
|
||||
{
|
||||
struct ffa_dev_part_info *info;
|
||||
int ret;
|
||||
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
rwlock_init(&info->rw_lock);
|
||||
ret = xa_insert(&drv_info->partition_info, vm_id, info, GFP_KERNEL);
|
||||
if (ret) {
|
||||
pr_err("%s: failed to save partition ID 0x%x - ret:%d. Abort.\n",
|
||||
__func__, vm_id, ret);
|
||||
kfree(info);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ffa_setup_partitions(void)
|
||||
{
|
||||
int count, idx, ret;
|
||||
struct ffa_device *ffa_dev;
|
||||
struct ffa_dev_part_info *info;
|
||||
struct ffa_partition_info *pbuf, *tpbuf;
|
||||
|
||||
if (drv_info->version == FFA_VERSION_1_0) {
|
||||
|
|
@ -1461,39 +1480,17 @@ static int ffa_setup_partitions(void)
|
|||
!(tpbuf->properties & FFA_PARTITION_AARCH64_EXEC))
|
||||
ffa_mode_32bit_set(ffa_dev);
|
||||
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info) {
|
||||
if (ffa_xa_add_partition_info(ffa_dev->vm_id)) {
|
||||
ffa_device_unregister(ffa_dev);
|
||||
continue;
|
||||
}
|
||||
rwlock_init(&info->rw_lock);
|
||||
ret = xa_insert(&drv_info->partition_info, tpbuf->id,
|
||||
info, GFP_KERNEL);
|
||||
if (ret) {
|
||||
pr_err("%s: failed to save partition ID 0x%x - ret:%d\n",
|
||||
__func__, tpbuf->id, ret);
|
||||
ffa_device_unregister(ffa_dev);
|
||||
kfree(info);
|
||||
}
|
||||
}
|
||||
|
||||
kfree(pbuf);
|
||||
|
||||
/* Allocate for the host */
|
||||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info) {
|
||||
/* Already registered devices are freed on bus_exit */
|
||||
ffa_partitions_cleanup();
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rwlock_init(&info->rw_lock);
|
||||
ret = xa_insert(&drv_info->partition_info, drv_info->vm_id,
|
||||
info, GFP_KERNEL);
|
||||
ret = ffa_xa_add_partition_info(drv_info->vm_id);
|
||||
if (ret) {
|
||||
pr_err("%s: failed to save Host partition ID 0x%x - ret:%d. Abort.\n",
|
||||
__func__, drv_info->vm_id, ret);
|
||||
kfree(info);
|
||||
/* Already registered devices are freed on bus_exit */
|
||||
ffa_partitions_cleanup();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue