staging/rdma/hfi1: Fix bug that could block the process on context exit
authorMitko Haralanov <mitko.haralanov@intel.com>
Wed, 3 Feb 2016 22:37:41 +0000 (14:37 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:38:00 +0000 (20:38 -0500)
commita402d6ab409e0e943150a803b94dee76c9de5c27
tree1ebf2fa694b4ce6573d33a45300f806e73b00759
parent7580fc31dfbfcacab2a3243342d4b5de4b494cbf
staging/rdma/hfi1: Fix bug that could block the process on context exit

A race was discovred in the user SDMA code, which could result
in an process being stuck in the kernel call indefinitely in
certain error conditions.

If, during the processing of a user SDMA request, there was an
error *and* all outstanding SDMA descriptor had been completed
by the time the that error case was handled in the calling function,
the state of the packet queue would not get correctly updated
resulting in the process subsequently getting stuck, thinking that
there are more descriptors to be completed.

To handle this scenario, the driver now checks the submitted
packet count vs. the completed. If all submitted packets have also
been completed, the driver can safely free the request and signal
user level. Otherwise, this will be handled by the completion
callback.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mitko Haralanov <mitko.haralanov@intel.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/user_sdma.c