]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firmware: arm_ffa: Refactor addition of partition information into XArray
authorViresh Kumar <viresh.kumar@linaro.org>
Mon, 17 Feb 2025 15:38:47 +0000 (15:38 +0000)
committerSudeep Holla <sudeep.holla@arm.com>
Mon, 17 Feb 2025 15:42:04 +0000 (15:42 +0000)
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>
drivers/firmware/arm_ffa/driver.c

index 87e106c728b89f3ce7c11219cf7cad9cc166dda2..2994b5ee63bc7feafc15e535cf8a2d46e6003968 100644 (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();
        }