-
- Downloads
crypto: qat - add backlog mechanism
The implementations of the crypto algorithms (aead, skcipher, etc) in the QAT driver do not properly support requests with the CRYPTO_TFM_REQ_MAY_BACKLOG flag set. If the HW queue is full, the driver returns -EBUSY but does not enqueue the request. This can result in applications like dm-crypt waiting indefinitely for the completion of a request that was never submitted to the hardware. Fix this by adding a software backlog queue: if the ring buffer is more than eighty percent full, then the request is enqueued to a backlog list and the error code -EBUSY is returned back to the caller. Requests in the backlog queue are resubmitted at a later time, in the context of the callback of a previously submitted request. The request for which -EBUSY is returned is then marked as -EINPROGRESS once submitted to the HW queues. The submission loop inside the function qat_alg_send_message() has been modified to decide which submission policy to use based on the request flags. If the request does not have the CRYPTO_TFM_REQ_MAY_BACKLOG set, the previous behaviour has been preserved. Based on a patch by Vishnu Das Ramachandran <vishnu.dasx.ramachandran@intel.com> Cc: stable@vger.kernel.org Fixes: d370cec3 ("crypto: qat - Intel(R) QAT crypto interface") Reported-by:Mikulas Patocka <mpatocka@redhat.com> Reported-by:
Kyle Sanderson <kyle.leet@gmail.com> Signed-off-by:
Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by:
Marco Chiappero <marco.chiappero@intel.com> Signed-off-by:
Herbert Xu <herbert@gondor.apana.org.au>
Showing
- drivers/crypto/qat/qat_common/adf_transport.c 11 additions, 0 deletionsdrivers/crypto/qat/qat_common/adf_transport.c
- drivers/crypto/qat/qat_common/adf_transport.h 1 addition, 0 deletionsdrivers/crypto/qat/qat_common/adf_transport.h
- drivers/crypto/qat/qat_common/adf_transport_internal.h 1 addition, 0 deletionsdrivers/crypto/qat/qat_common/adf_transport_internal.h
- drivers/crypto/qat/qat_common/qat_algs.c 15 additions, 9 deletionsdrivers/crypto/qat/qat_common/qat_algs.c
- drivers/crypto/qat/qat_common/qat_algs_send.c 66 additions, 1 deletiondrivers/crypto/qat/qat_common/qat_algs_send.c
- drivers/crypto/qat/qat_common/qat_algs_send.h 1 addition, 0 deletionsdrivers/crypto/qat/qat_common/qat_algs_send.h
- drivers/crypto/qat/qat_common/qat_asym_algs.c 15 additions, 8 deletionsdrivers/crypto/qat/qat_common/qat_asym_algs.c
- drivers/crypto/qat/qat_common/qat_crypto.c 3 additions, 0 deletionsdrivers/crypto/qat/qat_common/qat_crypto.c
- drivers/crypto/qat/qat_common/qat_crypto.h 10 additions, 0 deletionsdrivers/crypto/qat/qat_common/qat_crypto.h
Loading
Please register or sign in to comment