|
@@ -5944,6 +5944,7 @@ static void is_sendctxt_err_int(struct hfi1_devdata *dd,
|
|
u64 status;
|
|
u64 status;
|
|
u32 sw_index;
|
|
u32 sw_index;
|
|
int i = 0;
|
|
int i = 0;
|
|
|
|
+ unsigned long irq_flags;
|
|
|
|
|
|
sw_index = dd->hw_to_sw[hw_context];
|
|
sw_index = dd->hw_to_sw[hw_context];
|
|
if (sw_index >= dd->num_send_contexts) {
|
|
if (sw_index >= dd->num_send_contexts) {
|
|
@@ -5953,10 +5954,12 @@ static void is_sendctxt_err_int(struct hfi1_devdata *dd,
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
sci = &dd->send_contexts[sw_index];
|
|
sci = &dd->send_contexts[sw_index];
|
|
|
|
+ spin_lock_irqsave(&dd->sc_lock, irq_flags);
|
|
sc = sci->sc;
|
|
sc = sci->sc;
|
|
if (!sc) {
|
|
if (!sc) {
|
|
dd_dev_err(dd, "%s: context %u(%u): no sc?\n", __func__,
|
|
dd_dev_err(dd, "%s: context %u(%u): no sc?\n", __func__,
|
|
sw_index, hw_context);
|
|
sw_index, hw_context);
|
|
|
|
+ spin_unlock_irqrestore(&dd->sc_lock, irq_flags);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -5978,6 +5981,7 @@ static void is_sendctxt_err_int(struct hfi1_devdata *dd,
|
|
*/
|
|
*/
|
|
if (sc->type != SC_USER)
|
|
if (sc->type != SC_USER)
|
|
queue_work(dd->pport->hfi1_wq, &sc->halt_work);
|
|
queue_work(dd->pport->hfi1_wq, &sc->halt_work);
|
|
|
|
+ spin_unlock_irqrestore(&dd->sc_lock, irq_flags);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Update the counters for the corresponding status bits.
|
|
* Update the counters for the corresponding status bits.
|