|
@@ -344,8 +344,11 @@ int ehca_destroy_cq(struct ib_cq *cq)
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
spin_lock_irqsave(&ehca_cq_idr_lock, flags);
|
|
spin_lock_irqsave(&ehca_cq_idr_lock, flags);
|
|
- while (my_cq->nr_callbacks)
|
|
|
|
|
|
+ while (my_cq->nr_callbacks) {
|
|
|
|
+ spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
|
|
yield();
|
|
yield();
|
|
|
|
+ spin_lock_irqsave(&ehca_cq_idr_lock, flags);
|
|
|
|
+ }
|
|
|
|
|
|
idr_remove(&ehca_cq_idr, my_cq->token);
|
|
idr_remove(&ehca_cq_idr, my_cq->token);
|
|
spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
|
|
spin_unlock_irqrestore(&ehca_cq_idr_lock, flags);
|