lkml.org 
[lkml]   [2014]   [May]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[Patch v5.1 03/03]: hwrng: khwrngd derating per device
    [checkpatch tells me not to 0-init...]

    This patch introduces a derating factor to struct hwrng for
    the random bits going into the kernel input pool, and a common
    default derating for drivers which do not specify one.

    Signed-off-by: Torsten Duwe <duwe@suse.de>

    ---
    drivers/char/hw_random/core.c | 11 ++++++++++-
    include/linux/hw_random.h | 3 +++
    2 files changed, 13 insertions(+), 1 deletion(-)

    --- linux/include/linux/hw_random.h.orig
    +++ linux/include/linux/hw_random.h
    @@ -29,6 +29,8 @@
    * @read: New API. drivers can fill up to max bytes of data
    * into the buffer. The buffer is aligned for any type.
    * @priv: Private data, for use by the RNG driver.
    + * @quality: Estimation of true entropy in RNG's bitstream
    + * (per mill).
    */
    struct hwrng {
    const char *name;
    @@ -38,6 +39,7 @@ struct hwrng {
    int (*data_read)(struct hwrng *rng, u32 *data);
    int (*read)(struct hwrng *rng, void *data, size_t max, bool wait);
    unsigned long priv;
    + unsigned short quality;

    /* internal. */
    struct list_head list;
    --- linux/drivers/char/hw_random/core.c.orig
    +++ linux/drivers/char/hw_random/core.c
    @@ -56,11 +56,15 @@ static LIST_HEAD(rng_list);
    static DEFINE_MUTEX(rng_mutex);
    static int data_avail;
    static u8 *rng_buffer, *rng_fillbuf;
    -static unsigned short current_quality = 700; /* an arbitrary 70% */
    +static unsigned short current_quality;
    +static unsigned short default_quality; /* = 0; default to "off" */

    module_param(current_quality, ushort, 0644);
    MODULE_PARM_DESC(current_quality,
    "current hwrng entropy estimation per mill");
    +module_param(default_quality, ushort, 0644);
    +MODULE_PARM_DESC(default_quality,
    + "default entropy content of hwrng per mill");

    static void start_khwrngd(void);

    @@ -79,6 +83,11 @@ static inline int hwrng_init(struct hwrn
    if (err)
    return err;

    + current_quality = rng->quality ? : default_quality;
    + current_quality &= 1023;
    +
    + if (current_quality == 0 && hwrng_fill)
    + kthread_stop(hwrng_fill);
    if (current_quality > 0 && !hwrng_fill)
    start_khwrngd();


    \
     
     \ /
      Last update: 2014-05-27 19:01    [W:4.352 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site