Skip to content
  • Harald Freudenberger's avatar
    966f53e7
    s390/archrandom: Rework arch random implementation. · 966f53e7
    Harald Freudenberger authored
    The arch_get_random_seed_long() invocation done by the random device
    driver is done in interrupt context and may be invoked very very
    frequently. The existing s390 arch_get_random_seed*() implementation
    uses the PRNO(TRNG) instruction which produces excellent high quality
    entropy but is relatively slow and thus expensive.
    
    This fix reworks the arch_get_random_seed* implementation. It
    introduces a buffer concept to decouple the delivery of random data
    via arch_get_random_seed*() from the generation of new random
    bytes. The buffer of random data is filled asynchronously by a
    workqueue thread.
    If there are enough bytes in the buffer the s390_arch_random_generate()
    just delivers these bytes. Otherwise false is returned until the worker
    thread refills the buffer.
    The worker fills the rng buffer by pulling fresh entropy from the
    high quality (but slow) true hardware random generator. This entropy
    is then spread over the buffer with an pseudo random generator.
    ...
    966f53e7
    s390/archrandom: Rework arch random implementation.
    Harald Freudenberger authored
    The arch_get_random_seed_long() invocation done by the random device
    driver is done in interrupt context and may be invoked very very
    frequently. The existing s390 arch_get_random_seed*() implementation
    uses the PRNO(TRNG) instruction which produces excellent high quality
    entropy but is relatively slow and thus expensive.
    
    This fix reworks the arch_get_random_seed* implementation. It
    introduces a buffer concept to decouple the delivery of random data
    via arch_get_random_seed*() from the generation of new random
    bytes. The buffer of random data is filled asynchronously by a
    workqueue thread.
    If there are enough bytes in the buffer the s390_arch_random_generate()
    just delivers these bytes. Otherwise false is returned until the worker
    thread refills the buffer.
    The worker fills the rng buffer by pulling fresh entropy from the
    high quality (but slow) true hardware random generator. This entropy
    is then spread over the buffer with an pseudo random generator.
    ...
Loading