Commit 753d6770 authored by Vladis Dronov's avatar Vladis Dronov Committed by Herbert Xu
Browse files

hwrng: cn10k - Optimize cn10k_rng_read()



This function assumes that sizeof(void) is 1 and arithmetic works for
void pointers. This is a GNU C extention and may not work with other
compilers. Change this by using an u8 pointer.

Also move cn10k_read_trng() out of a loop thus saving some cycles.

Fixes: 38e9791a ("hwrng: cn10k - Add random number generator support")
Signed-off-by: default avatarVladis Dronov <vdronov@redhat.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 5a6477ea
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ static int cn10k_rng_read(struct hwrng *hwrng, void *data,
{
	struct cn10k_rng *rng = (struct cn10k_rng *)hwrng->priv;
	unsigned int size;
	u8 *pos = data;
	int err = 0;
	u64 value;

@@ -102,17 +103,20 @@ static int cn10k_rng_read(struct hwrng *hwrng, void *data,
	while (size >= 8) {
		cn10k_read_trng(rng, &value);

		*((u64 *)data) = (u64)value;
		*((u64 *)pos) = value;
		size -= 8;
		data += 8;
		pos += 8;
	}

	while (size > 0) {
	if (size > 0) {
		cn10k_read_trng(rng, &value);

		*((u8 *)data) = (u8)value;
		while (size > 0) {
			*pos = (u8)value;
			value >>= 8;
			size--;
		data++;
			pos++;
		}
	}

	return max - size;