IB/hfi1: Correctly clear the pkey
In the close path the context is removed from the device array, and then the clear pkey function is called. The pkey function trys to get the context from the device array, but because it was removed the clearing does not occur. Rework pkey clear function to work as expected. Update the function variable to reflect the correct size and name of the hw_context. 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
5fbded483c
commit
637a9a7feb
@@ -14528,30 +14528,24 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hfi1_clear_ctxt_pkey(struct hfi1_devdata *dd, unsigned ctxt)
|
||||
int hfi1_clear_ctxt_pkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *ctxt)
|
||||
{
|
||||
struct hfi1_ctxtdata *rcd;
|
||||
unsigned sctxt;
|
||||
int ret = 0;
|
||||
u8 hw_ctxt;
|
||||
u64 reg;
|
||||
|
||||
if (ctxt < dd->num_rcv_contexts) {
|
||||
rcd = dd->rcd[ctxt];
|
||||
} else {
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
if (!rcd || !rcd->sc) {
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
sctxt = rcd->sc->hw_context;
|
||||
reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
|
||||
if (!ctxt || !ctxt->sc)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctxt->ctxt >= dd->num_rcv_contexts)
|
||||
return -EINVAL;
|
||||
|
||||
hw_ctxt = ctxt->sc->hw_context;
|
||||
reg = read_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE);
|
||||
reg &= ~SEND_CTXT_CHECK_ENABLE_CHECK_PARTITION_KEY_SMASK;
|
||||
write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
|
||||
write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_PARTITION_KEY, 0);
|
||||
done:
|
||||
return ret;
|
||||
write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE, reg);
|
||||
write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_PARTITION_KEY, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user