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 <harvijayx.saini@intel.com>
Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Harvijay Saini 2015-12-09 11:59:45 -08:00 коммит произвёл Herbert Xu
Родитель e14a1f1e36
Коммит 06cabd755a
1 изменённых файлов: 2 добавлений и 3 удалений

Просмотреть файл

@ -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;
}