On Monday 17 of June 2013 12:36:47 Oliver Schinagl wrote:<snip>On 15-06-13 12:28, Tomasz Figa wrote:Hi,
Some comments inline.
Thank you
You're welcome. :)
On Saturday 15 of June 2013 01:16:20 Oliver Schinagl wrote:From: Oliver Schinagl <oliver@xxxxxxxxxxx>
Allwinner has electric fuses (efuse) on their line of chips. This driver
reads those fuses, seeds the kernel entropy and exports them as a sysfs
node.
I'll ommit the 'long (32-bit)' part but yeah that's probably enough.I will change the comment, 'and 4 byte sized keys per SID' is probably
better
The array is 128 bits split into 32 bit words. Each 32 bit word consists
of 8 bits (1 byte).
So 4 * 4 = 16 bytes (SID_SIZE), is 128 bits.
What about:
/* There are 4 keys. */
#define SID_KEYS 4
/* Each key is 4 byte long (32-bit). */
#define SID_SIZE (SID_KEYS * 4)
But functions shouldn't be so large :p But that is the first reasonable reason I can live with :)+return 0; ...
+ if (offset >= SID_SIZE)
+ goto exit;
I did say in the changelog I opted for goto over return. But since
everybody keeps preferring returns (I personally like 'one single exit
point much more' I have already changed it all over to many returns, who
am I to argue :)
Well, single exit points makes sense (and is much nicer) when you have
something to do before exiting, take error paths as an example. But jumping
just to return makes no sense, because when reading the code you must scroll
down to the label to check what actually happens.
Ok, I get that
+
+ for (i = 0; i < SID_SIZE; i++)
+ entropy[i] = sunxi_sid_read_byte(sid_reg_base, i);
You seem to read bytes into an array of ints. Your entropy data will
always have most significant 24-bits cleared. Is this behavior correct?
Yes, though I changed it so that entropy is an array of u8's, since
that's what sunxi_sid_read_byte returns.
+ add_device_randomness(entropy, SID_SIZE);
Now I'm pretty sure that above is not the correct behavior. You are adding
here first 16 bytes (=SID_SIZE) of entropy[], while it is an array of 16
ints (=4*SID_SIZE)...
Well technically, doesn't to compiler see that entropy is never larger
then 8 bits and thus uses only 8 bits? uint8_atleast or something. But
yeah, it's better to use the specified size to not waste 24 empty bits.
I mean, the loop fills the array with SID_SIZE ints, each with 3 zero bytes and
1 byte of actual data, so you get:
S0 0x00 0x00 0x00 S1 0x00 0x00 0x00 ... S15 0x00 0x00 0x00
but by calling add_device_randomness() with SID_SIZE as size argument, you addThat bit I'm not quite sure I understand:
only 16 first bytes of data from the array:
S0 0x00 0x00 0x00 S1 0x00 0x00 0x00 ... S3 0x00 0x00 0x00
Yes it has :) thanks to all of you
(little endianness assumed)
Best regards,
Tomasz
(for rest of comments I think it's enough said in Russell's and Maxime's
replies)