[PATCH] drm/xe/query: Refactor copy_to_user() usage in four functions
Markus Elfring
Markus.Elfring at web.de
Wed Sep 18 08:12:14 UTC 2024
From: Markus Elfring <elfring at users.sourceforge.net>
Date: Wed, 18 Sep 2024 09:43:07 +0200
Assign return values from copy_to_user() calls to additional local variables
so that four kfree() calls and return statements can be omitted accordingly.
This issue was transformed by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring at users.sourceforge.net>
---
drivers/gpu/drm/xe/xe_query.c | 32 ++++++++++++--------------------
1 file changed, 12 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 5246a4a2740e..6195e720176d 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -220,13 +220,11 @@ static int query_engines(struct xe_device *xe,
engines->num_engines = i;
- if (copy_to_user(query_ptr, engines, size)) {
+ {
+ unsigned long ctu = copy_to_user(query_ptr, engines, size);
kfree(engines);
- return -EFAULT;
+ return ctu ? -EFAULT : 0;
}
- kfree(engines);
-
- return 0;
}
static size_t calc_mem_regions_size(struct xe_device *xe)
@@ -344,13 +342,11 @@ static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
config->info[DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY] =
xe_exec_queue_device_get_max_priority(xe);
- if (copy_to_user(query_ptr, config, size)) {
+ {
+ unsigned long ctu = copy_to_user(query_ptr, config, size);
kfree(config);
- return -EFAULT;
+ return ctu ? -EFAULT : 0;
}
- kfree(config);
-
- return 0;
}
static int query_gt_list(struct xe_device *xe, struct drm_xe_device_query *query)
@@ -414,13 +410,11 @@ static int query_gt_list(struct xe_device *xe, struct drm_xe_device_query *query
REG_FIELD_GET(GMD_ID_REVID, gt->info.gmdid);
}
- if (copy_to_user(query_ptr, gt_list, size)) {
+ {
+ unsigned long ctu = copy_to_user(query_ptr, gt_list, size);
kfree(gt_list);
- return -EFAULT;
+ return ctu ? -EFAULT : 0;
}
- kfree(gt_list);
-
- return 0;
}
static int query_hwconfig(struct xe_device *xe,
@@ -444,13 +438,11 @@ static int query_hwconfig(struct xe_device *xe,
xe_guc_hwconfig_copy(>->uc.guc, hwconfig);
- if (copy_to_user(query_ptr, hwconfig, size)) {
+ {
+ unsigned long ctu = copy_to_user(query_ptr, hwconfig, size);
kfree(hwconfig);
- return -EFAULT;
+ return ctu ? -EFAULT : 0;
}
- kfree(hwconfig);
-
- return 0;
}
static size_t calc_topo_query_size(struct xe_device *xe)
--
2.46.0
More information about the dri-devel
mailing list