summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>2024-03-26 14:25:16 +0100
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>2024-03-27 08:55:26 +0100
commitc7c3c14bfc8286f17df1845a99ae17e5fc1c8cb7 (patch)
tree58a351ec3f4465dc1078eee60559588e9677afd9
parentc45ffb1edf19faff79238934abe01fd92e9e3d0a (diff)
amdgpu: fix deinit logic
The devices weren't removed from dev_list. Instead of just fixing the issue by adding: if (*node) *node = dev->next; after the while loop, use this opportunity to use a clearer control flow. Fixes: 7275ef8e ("amdgpu: add amdgpu_device_initialize2") Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Tested-by: Mike Lothian <mike@fireburn.co.uk>
-rw-r--r--amdgpu/amdgpu_device.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/amdgpu/amdgpu_device.c b/amdgpu/amdgpu_device.c
index 97dbfb44..34463b53 100644
--- a/amdgpu/amdgpu_device.c
+++ b/amdgpu/amdgpu_device.c
@@ -95,11 +95,17 @@ static int amdgpu_get_auth(int fd, int *auth)
static void amdgpu_device_free_internal(amdgpu_device_handle dev)
{
- amdgpu_device_handle *node = &dev_list;
-
/* Remove dev from dev_list, if it was added there. */
- while (*node != dev && *node && (*node)->next)
- node = &(*node)->next;
+ if (dev == dev_list) {
+ dev_list = dev->next;
+ } else {
+ for (amdgpu_device_handle node = dev_list; node; node = node->next) {
+ if (node->next == dev) {
+ node->next = dev->next;
+ break;
+ }
+ }
+ }
close(dev->fd);
if ((dev->flink_fd >= 0) && (dev->fd != dev->flink_fd))