Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06cabd75 authored by Harvijay Saini's avatar Harvijay Saini Committed by Herbert Xu
Browse files

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: default avatarHarvijay Saini <harvijayx.saini@intel.com>
Signed-off-by: default avatarTadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent e14a1f1e
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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;
}