diff options
author | Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> | 2024-03-26 14:25:16 +0100 |
---|---|---|
committer | Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> | 2024-03-27 08:55:26 +0100 |
commit | c7c3c14bfc8286f17df1845a99ae17e5fc1c8cb7 (patch) | |
tree | 58a351ec3f4465dc1078eee60559588e9677afd9 | |
parent | c45ffb1edf19faff79238934abe01fd92e9e3d0a (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.c | 14 |
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)) |