• Andrey Smirnov's avatar
    crypto: caam - simplify RNG implementation · 2c5e88dc
    Andrey Smirnov authored
    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: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
    Reviewed-by: default avatarHoria Geantă <horia.geanta@nxp.com>
    Cc: Chris Healy <cphealy@gmail.com>
    Cc: Lucas Stach <l.stach@pengutronix.de>
    Cc: Horia Geantă <horia.geanta@nxp.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Iuliana Prodan <iuliana.prodan@nxp.com>
    Cc: linux-crypto@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-imx@nxp.com
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    2c5e88dc
caamrng.c 5.42 KB