IB/hfi1: Fix an assign/ordering issue with shared context IDs
The current algorithm for generating sub-context IDs is FILO. If the contexts are not closed in that order, the uniqueness of the ID will be compromised. I.e. logging the creation/deletion of context IDs with an application that assigns and closes in a FIFO order reveals: cache_id: assign: uctxt: 3 sub_ctxt: 0 cache_id: assign: uctxt: 3 sub_ctxt: 1 cache_id: assign: uctxt: 3 sub_ctxt: 2 cache_id: close: uctxt: 3 sub_ctxt: 0 cache_id: assign: uctxt: 3 sub_ctxt: 2 <<< The sub_ctxt ID 2 is reused incorrectly. Update the sub-context ID assign algorithm to use a bitmask of in_use contexts. The new algorithm will allow the contexts to be closed in any order, and will only re-use unused contexts. Size subctxt and subctxt_cnt to match the user API size. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
9b60d2cbe0
commit
8737ce95c4
@@ -1289,7 +1289,7 @@ int hfi1_reset_device(int unit)
|
||||
if (dd->rcd)
|
||||
for (i = dd->first_dyn_alloc_ctxt;
|
||||
i < dd->num_rcv_contexts; i++) {
|
||||
if (!dd->rcd[i] || !dd->rcd[i]->cnt)
|
||||
if (!dd->rcd[i])
|
||||
continue;
|
||||
spin_unlock_irqrestore(&dd->uctxt_lock, flags);
|
||||
ret = -EBUSY;
|
||||
|
Reference in New Issue
Block a user