On 5/26/26 10:26, Prike Liang wrote: > 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]>
Reviewed-by: Christian König <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c > index f4be19223588..21a225b0116a 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.c > @@ -173,16 +173,17 @@ void amdgpu_seq64_unmap(struct amdgpu_device *adev, > struct amdgpu_fpriv *fpriv) > int amdgpu_seq64_alloc(struct amdgpu_device *adev, u64 *va, > u64 *gpu_addr, u64 **cpu_addr) > { > - unsigned long bit_pos; > + unsigned long bit_pos = 0; > > - 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); >
