From: Harvijay Saini Date: Wed, 9 Dec 2015 19:59:45 +0000 (-0800) Subject: crypto: qat - ring returning retry even though ring has BW X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=06cabd755a97325cd5f53e73153fd10f4ea51cb7;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git crypto: qat - ring returning retry even though ring has BW 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 Signed-off-by: Tadeusz Struk Signed-off-by: Herbert Xu --- diff --git a/drivers/crypto/qat/qat_common/adf_transport.c b/drivers/crypto/qat/qat_common/adf_transport.c index eff00cd282e5..a6f3766a74f0 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; }