From: Vakul Garg <vakul.g...@nxp.com> Date: Wed, 29 Aug 2018 15:26:55 +0530
> When tls records are decrypted using asynchronous acclerators such as > NXP CAAM engine, the crypto apis return -EINPROGRESS. Presently, on > getting -EINPROGRESS, the tls record processing stops till the time the > crypto accelerator finishes off and returns the result. This incurs a > context switch and is not an efficient way of accessing the crypto > accelerators. Crypto accelerators work efficient when they are queued > with multiple crypto jobs without having to wait for the previous ones > to complete. > > The patch submits multiple crypto requests without having to wait for > for previous ones to complete. This has been implemented for records > which are decrypted in zero-copy mode. At the end of recvmsg(), we wait > for all the asynchronous decryption requests to complete. > > The references to records which have been sent for async decryption are > dropped. For cases where record decryption is not possible in zero-copy > mode, asynchronous decryption is not used and we wait for decryption > crypto api to complete. > > For crypto requests executing in async fashion, the memory for > aead_request, sglists and skb etc is freed from the decryption > completion handler. The decryption completion handler wakesup the > sleeping user context when recvmsg() flags that it has done sending > all the decryption requests and there are no more decryption requests > pending to be completed. > > Signed-off-by: Vakul Garg <vakul.g...@nxp.com> > Reviewed-by: Dave Watson <davejwat...@fb.com> > --- > > Changes since v1: > - Simplified recvmsg() so to drop reference to skb in case it > was submimtted for async decryption. > - Modified tls_sw_advance_skb() to handle case when input skb is > NULL. Applied.