Use find_next_zero_bit() to locate the next free seq slot bit
instead of the current walk, for more efficient bitmap scanning.

Signed-off-by: Prike Liang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c
index f4be19223588..63771d6d466e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c
@@ -175,14 +175,15 @@ int amdgpu_seq64_alloc(struct amdgpu_device *adev, u64 
*va,
 {
        unsigned long bit_pos;
 
-       for (;;) {
-               bit_pos = find_first_zero_bit(adev->seq64.used, 
adev->seq64.num_sem);
+       do {
+               bit_pos = find_next_zero_bit(adev->seq64.used,
+                                    adev->seq64.num_sem, bit_pos);
                if (bit_pos >= adev->seq64.num_sem)
                        return -ENOSPC;
-
                if (!test_and_set_bit(bit_pos, adev->seq64.used))
                        break;
-       }
+               bit_pos++;
+       } while (1);
 
        *va = bit_pos * sizeof(u64) + amdgpu_seq64_get_va_base(adev);
 
-- 
2.34.1

Reply via email to