On Thu, Aug 06, 2020 at 05:28:14PM +0200, Laurent Vivier wrote: . > +static size_t rng_max_buffer_size(struct hwrng *rng) > +{ > + size_t size; > + > + size = max_t(size_t, rng->buffer_size, SMP_CACHE_BYTES); > + > + /* rng_buffer can store up to PAGE_SIZE */ > + return min(PAGE_SIZE, size); > } Rather than checking this on every read, just do it once at driver registration time. > @@ -614,11 +629,11 @@ static int __init hwrng_modinit(void) > int ret; > > /* kmalloc makes this safe for virt_to_page() in virtio_rng.c */ > - rng_buffer = kmalloc(rng_buffer_size(), GFP_KERNEL); > + rng_buffer = (u8 *)get_zeroed_page(GFP_KERNEL); > if (!rng_buffer) > return -ENOMEM; Why a zeroed page? Also please fix the out-of-sync comment. Thanks, -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt