linux/drivers/infiniband
Mike Marciniszyn e3cea38357 IB/hfi1: Prevent kernel QP post send hard lockups
commit b6eac931b9 upstream.

The driver progress routines can call cond_resched() when
a timeslice is exhausted and irqs are enabled.

If the ULP had been holding a spin lock without disabling irqs and
the post send directly called the progress routine, the cond_resched()
could yield allowing another thread from the same ULP to deadlock
on that same lock.

Correct by replacing the current hfi1_do_send() calldown with a unique
one for post send and adding an argument to hfi1_do_send() to indicate
that the send engine is running in a thread.   If the routine is not
running in a thread, avoid calling cond_resched().

Fixes: Commit 831464ce4b ("IB/hfi1: Don't call cond_resched in atomic mode when sending packets")
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2017-05-20 14:28:38 +02:00
..
core IB/core: For multicast functions, verify that LIDs are multicast LIDs 2017-05-20 14:28:38 +02:00
hw IB/hfi1: Prevent kernel QP post send hard lockups 2017-05-20 14:28:38 +02:00
sw IB/rxe: Fix mem_check_range integer overflow 2017-02-14 15:25:42 -08:00
ulp IB/IPoIB: ibX: failed to create mcg debug file 2017-05-20 14:28:38 +02:00
Kconfig qedr: Add RoCE driver framework 2016-10-14 15:00:10 -04:00
Makefile IB/rdmavt: Create module framework and handle driver registration 2016-03-10 20:37:04 -05:00