Skip to content

Commit

Permalink
hwrng: core - start and stop in-kernel rngd in separate function
Browse files Browse the repository at this point in the history
Extract the start/stop logic for the in-kernel rngd thread to
a separate function.

Cc: Herbert Xu <[email protected]>
Cc: Jason A. Donenfeld <[email protected]>
Signed-off-by: Dominik Brodowski <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
Dominik Brodowski authored and herbertx committed Feb 18, 2022
1 parent c90e453 commit 077bb7a
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions drivers/char/hw_random/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ MODULE_PARM_DESC(default_quality,

static void drop_current_rng(void);
static int hwrng_init(struct hwrng *rng);
static void start_khwrngd(void);
static void hwrng_manage_rngd(void);

static inline int rng_get_data(struct hwrng *rng, u8 *buffer, size_t size,
int wait);
Expand Down Expand Up @@ -164,10 +164,7 @@ static int hwrng_init(struct hwrng *rng)
if (current_quality > 1024)
current_quality = 1024;

if (current_quality == 0 && hwrng_fill)
kthread_stop(hwrng_fill);
if (current_quality > 0 && !hwrng_fill)
start_khwrngd();
hwrng_manage_rngd();

return 0;
}
Expand Down Expand Up @@ -466,12 +463,19 @@ static int hwrng_fillfn(void *unused)
return 0;
}

static void start_khwrngd(void)
static void hwrng_manage_rngd(void)
{
hwrng_fill = kthread_run(hwrng_fillfn, NULL, "hwrng");
if (IS_ERR(hwrng_fill)) {
pr_err("hwrng_fill thread creation failed\n");
hwrng_fill = NULL;
if (WARN_ON(!mutex_is_locked(&rng_mutex)))
return;

if (current_quality == 0 && hwrng_fill)
kthread_stop(hwrng_fill);
if (current_quality > 0 && !hwrng_fill) {
hwrng_fill = kthread_run(hwrng_fillfn, NULL, "hwrng");
if (IS_ERR(hwrng_fill)) {
pr_err("hwrng_fill thread creation failed\n");
hwrng_fill = NULL;
}
}
}

Expand Down

0 comments on commit 077bb7a

Please sign in to comment.