On 4/10/22 15:39, Bob Pearson wrote:
Fixes: 3225717f6dfa ("RDMA/rxe: Replace red-black trees by carrays")
^^^^^^^
xarrays?
@@ -138,8 +140,10 @@ void *rxe_alloc(struct rxe_pool *pool)
elem->obj = obj;
kref_init(&elem->ref_cnt);
- err = xa_alloc_cyclic(&pool->xa, &elem->index, elem, pool->limit,
+ xa_lock_irqsave(xa, flags);
+ err = __xa_alloc_cyclic(&pool->xa, &elem->index, elem, pool->limit,
&pool->next, GFP_KERNEL);
+ xa_unlock_irqrestore(xa, flags);
Please take a look at the xas_unlock_type() and xas_lock_type() calls in
__xas_nomem(). I think that the above change will trigger a GFP_KERNEL
allocation with interrupts disabled. My understanding is that GFP_KERNEL
allocations may sleep and hence that the above code may cause
__xas_nomem() to sleep with interrupts disabled. I don't think that is
allowed.
Thanks,
Bart.