Message ID | 20151209195945.17552.86742.stgit@tstruk-mobl1 (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Herbert Xu |
Headers | show |
On Wed, Dec 09, 2015 at 11:59:45AM -0800, Tadeusz Struk wrote: > From: Harvijay Saini <harvijayx.saini@intel.com> > > When many threads submit multiple requests they get blocked until all > responses are processed, which prevents them from submitting more requests > even though there is space on the rings. > To fix this we need to decrement the inflight counter early to in the callback. > > Signed-off-by: Harvijay Saini <harvijayx.saini@intel.com> > Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com> Patch applied. Thanks.
diff --git a/drivers/crypto/qat/qat_common/adf_transport.c b/drivers/crypto/qat/qat_common/adf_transport.c index eff00cd..a6f3766 100644 --- a/drivers/crypto/qat/qat_common/adf_transport.c +++ b/drivers/crypto/qat/qat_common/adf_transport.c @@ -141,6 +141,7 @@ static int adf_handle_response(struct adf_etr_ring_data *ring) while (*msg != ADF_RING_EMPTY_SIG) { ring->callback((uint32_t *)msg); + atomic_dec(ring->inflights); *msg = ADF_RING_EMPTY_SIG; ring->head = adf_modulo(ring->head + ADF_MSG_SIZE_TO_BYTES(ring->msg_size), @@ -148,12 +149,10 @@ static int adf_handle_response(struct adf_etr_ring_data *ring) msg_counter++; msg = (uint32_t *)((uintptr_t)ring->base_addr + ring->head); } - if (msg_counter > 0) { + if (msg_counter > 0) WRITE_CSR_RING_HEAD(ring->bank->csr_addr, ring->bank->bank_number, ring->ring_number, ring->head); - atomic_sub(msg_counter, ring->inflights); - } return 0; }