amdgpu_gem_metadata_ioctl() handles AMDGPU_GEM_METADATA_OP_GET_METADATA
and AMDGPU_GEM_METADATA_OP_SET_METADATA and returns r otherwise, which
is 0 from the successful amdgpu_bo_reserve(). Any other op therefore
succeeds without doing anything.
Convert the if/else chain into a switch and return -EINVAL for unknown
ops.
v2: use a switch statement instead of if/else if/else (Christian)
Fixes: d38ceaf99ed0 ("drm/amdgpu: add core driver (v4)")
Signed-off-by: Jesse Zhang <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 0552b17d9aa8..fb60a99f43c1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -764,22 +764,28 @@ int amdgpu_gem_metadata_ioctl(struct drm_device *dev,
void *data,
goto unreserve;
}
- if (args->op == AMDGPU_GEM_METADATA_OP_GET_METADATA) {
+ switch (args->op) {
+ case AMDGPU_GEM_METADATA_OP_GET_METADATA:
amdgpu_bo_get_tiling_flags(robj, &args->data.tiling_info);
r = amdgpu_bo_get_metadata(robj, args->data.data,
sizeof(args->data.data),
&args->data.data_size_bytes,
&args->data.flags);
- } else if (args->op == AMDGPU_GEM_METADATA_OP_SET_METADATA) {
+ break;
+ case AMDGPU_GEM_METADATA_OP_SET_METADATA:
if (args->data.data_size_bytes > sizeof(args->data.data)) {
r = -EINVAL;
- goto unreserve;
+ break;
}
r = amdgpu_bo_set_tiling_flags(robj, args->data.tiling_info);
if (!r)
r = amdgpu_bo_set_metadata(robj, args->data.data,
args->data.data_size_bytes,
args->data.flags);
+ break;
+ default:
+ r = -EINVAL;
+ break;
}
unreserve:
--
2.50.1