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
Viresh Kumar 2025-02-17 15:38:47 +00:00 committed by Sudeep Holla
parent 7bc0f589c8
commit 3c3d676746
1 changed files with 22 additions and 25 deletions

View File

@ -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();
}