|
|
@@ -118,9 +118,8 @@ static int allocate_vmid(struct device_queue_manager *dqm,
|
|
|
if (dqm->vmid_bitmap == 0)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- bit = find_first_bit((unsigned long *)&dqm->vmid_bitmap,
|
|
|
- dqm->dev->vm_info.vmid_num_kfd);
|
|
|
- clear_bit(bit, (unsigned long *)&dqm->vmid_bitmap);
|
|
|
+ bit = ffs(dqm->vmid_bitmap) - 1;
|
|
|
+ dqm->vmid_bitmap &= ~(1 << bit);
|
|
|
|
|
|
allocated_vmid = bit + dqm->dev->vm_info.first_vmid_kfd;
|
|
|
pr_debug("vmid allocation %d\n", allocated_vmid);
|
|
|
@@ -142,7 +141,7 @@ static void deallocate_vmid(struct device_queue_manager *dqm,
|
|
|
/* Release the vmid mapping */
|
|
|
set_pasid_vmid_mapping(dqm, 0, qpd->vmid);
|
|
|
|
|
|
- set_bit(bit, (unsigned long *)&dqm->vmid_bitmap);
|
|
|
+ dqm->vmid_bitmap |= (1 << bit);
|
|
|
qpd->vmid = 0;
|
|
|
q->properties.vmid = 0;
|
|
|
}
|
|
|
@@ -223,12 +222,8 @@ static int allocate_hqd(struct device_queue_manager *dqm, struct queue *q)
|
|
|
continue;
|
|
|
|
|
|
if (dqm->allocated_queues[pipe] != 0) {
|
|
|
- bit = find_first_bit(
|
|
|
- (unsigned long *)&dqm->allocated_queues[pipe],
|
|
|
- get_queues_per_pipe(dqm));
|
|
|
-
|
|
|
- clear_bit(bit,
|
|
|
- (unsigned long *)&dqm->allocated_queues[pipe]);
|
|
|
+ bit = ffs(dqm->allocated_queues[pipe]) - 1;
|
|
|
+ dqm->allocated_queues[pipe] &= ~(1 << bit);
|
|
|
q->pipe = pipe;
|
|
|
q->queue = bit;
|
|
|
set = true;
|
|
|
@@ -249,7 +244,7 @@ static int allocate_hqd(struct device_queue_manager *dqm, struct queue *q)
|
|
|
static inline void deallocate_hqd(struct device_queue_manager *dqm,
|
|
|
struct queue *q)
|
|
|
{
|
|
|
- set_bit(q->queue, (unsigned long *)&dqm->allocated_queues[q->pipe]);
|
|
|
+ dqm->allocated_queues[q->pipe] |= (1 << q->queue);
|
|
|
}
|
|
|
|
|
|
static int create_compute_queue_nocpsch(struct device_queue_manager *dqm,
|
|
|
@@ -589,10 +584,8 @@ static int allocate_sdma_queue(struct device_queue_manager *dqm,
|
|
|
if (dqm->sdma_bitmap == 0)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- bit = find_first_bit((unsigned long *)&dqm->sdma_bitmap,
|
|
|
- CIK_SDMA_QUEUES);
|
|
|
-
|
|
|
- clear_bit(bit, (unsigned long *)&dqm->sdma_bitmap);
|
|
|
+ bit = ffs(dqm->sdma_bitmap) - 1;
|
|
|
+ dqm->sdma_bitmap &= ~(1 << bit);
|
|
|
*sdma_queue_id = bit;
|
|
|
|
|
|
return 0;
|
|
|
@@ -603,7 +596,7 @@ static void deallocate_sdma_queue(struct device_queue_manager *dqm,
|
|
|
{
|
|
|
if (sdma_queue_id >= CIK_SDMA_QUEUES)
|
|
|
return;
|
|
|
- set_bit(sdma_queue_id, (unsigned long *)&dqm->sdma_bitmap);
|
|
|
+ dqm->sdma_bitmap |= (1 << sdma_queue_id);
|
|
|
}
|
|
|
|
|
|
static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm,
|