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: 38e9791a02
("hwrng: cn10k - Add random number generator support")
Signed-off-by: Vladis Dronov <vdronov@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
5a6477eaf4
commit
753d677087
|
@ -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;
|
||||
size--;
|
||||
data++;
|
||||
while (size > 0) {
|
||||
*pos = (u8)value;
|
||||
value >>= 8;
|
||||
size--;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
||||
return max - size;
|
||||
|
|
Loading…
Reference in New Issue