On 3/16/2020 5:01 PM, Andrey Smirnov wrote: > Rework CAAM RNG implementation as follows: > > - Make use of the fact that HWRNG supports partial reads and will > handle such cases gracefully by removing recursion in caam_read() > > - Convert blocking caam_read() codepath to do a single blocking job > read directly into requested buffer, bypassing any intermediary > buffers > > - Convert async caam_read() codepath into a simple single > reader/single writer FIFO use-case, thus simplifying concurrency > handling and delegating buffer read/write position management to KFIFO > subsystem. > > - Leverage the same low level RNG data extraction code for both async > and blocking caam_read() scenarios, get rid of the shared job > descriptor and make non-shared one as a simple as possible (just > HEADER + ALGORITHM OPERATION + FIFO STORE) > > - Split private context from DMA related memory, so that the former > could be allocated without GFP_DMA. > > NOTE: On its face value this commit decreased throughput numbers > reported by > > dd if=/dev/hwrng of=/dev/null bs=1 count=100K [iflag=nonblock] > > by about 15%, however commits that enable prediction resistance and > limit JR total size impact the performance so much and move the > bottleneck such as to make this regression irrelevant. > > NOTE: On the bright side, this commit reduces RNG in kernel DMA buffer > memory usage from 2 x RN_BUF_SIZE (~256K) to 32K. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > Cc: Chris Healy <cphealy@xxxxxxxxx> > Cc: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > Cc: Horia Geantă <horia.geanta@xxxxxxx> > Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> > Cc: Iuliana Prodan <iuliana.prodan@xxxxxxx> > Cc: linux-crypto@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Cc: linux-imx@xxxxxxx Reviewed-by: Horia Geantă <horia.geanta@xxxxxxx> Thanks, Horia