forked from Minki/linux
IB/hfi1: Remove incorrect call to do_interrupt callback
The general interrupt handler is_rcv_avail_int() has two paths,
do_interrupt() (callback) and handle_user_interrupt(). The
do_interrupt() callback is for the threaded receive handling.
is_rcv_avail_int() cannot handle threaded IRQs.
If the do_interrupt() path is taken, and the IRQ returns
IRQ_WAKE_THREAD, the IRQ behavior will be indeterminate.
Remove incorrect call to do_interrupt() from is_rcv_avail_int(),
leaving the un-threaded (handle_user_interrupt()) path.
Fixes: f4f30031c3
("staging/rdma/hfi1: Thread the receive interrupt.")
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: Kamenee Arumugam <kamenee.arumugam@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: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
d108c60d3d
commit
e3091644bf
@ -8143,8 +8143,15 @@ static void is_sdma_eng_int(struct hfi1_devdata *dd, unsigned int source)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* is_rcv_avail_int() - User receive context available IRQ handler
|
||||
* @dd: valid dd
|
||||
* @source: logical IRQ source (offset from IS_RCVAVAIL_START)
|
||||
*
|
||||
* RX block receive available interrupt. Source is < 160.
|
||||
*
|
||||
* This is the general interrupt handler for user (PSM) receive contexts,
|
||||
* and can only be used for non-threaded IRQs.
|
||||
*/
|
||||
static void is_rcv_avail_int(struct hfi1_devdata *dd, unsigned int source)
|
||||
{
|
||||
@ -8154,12 +8161,7 @@ static void is_rcv_avail_int(struct hfi1_devdata *dd, unsigned int source)
|
||||
if (likely(source < dd->num_rcv_contexts)) {
|
||||
rcd = hfi1_rcd_get_by_index(dd, source);
|
||||
if (rcd) {
|
||||
/* Check for non-user contexts, including vnic */
|
||||
if (source < dd->first_dyn_alloc_ctxt || rcd->is_vnic)
|
||||
rcd->do_interrupt(rcd, 0);
|
||||
else
|
||||
handle_user_interrupt(rcd);
|
||||
|
||||
handle_user_interrupt(rcd);
|
||||
hfi1_rcd_put(rcd);
|
||||
return; /* OK */
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user