Re: [RFC] Improved add_timer_randomness for __CRIS__ (instead of rdtsc())

Oliver Xymoron (oxymoron@waste.org)
Tue, 20 Aug 2002 09:03:46 -0500


On Tue, Aug 20, 2002 at 11:31:10AM +0200, johan.adolfsson@axis.com wrote:
> The cris architecture don't have any tsc, but it has a couple of
> timer registers that can be used to get better than jiffie resolution.
>
> I set the time to a 40 us resolution counter with a slight
> "jump" since lower 8 bit only counts from 0 to 249,
> the patch does not take wrapping of the register into account either
> to save some cycles, is that a problem or a good thing?

That should be fine. More important is actually scaling the entropy
count based on the timing granularity of the source. Keyboards and
mice tend to have a granularity of about 1khz so timestamps better
than milliseconds 'invent' entropy in the current code.

> The num is xor:d with the value from 2 timer registers,
> which in turn contains different fields breifly described below.
>
> Does the patch below look sane?

Looks fine, but I think we want to come up with a cleaner scheme of
having per-arch high-res timestamps. I'd hate to have that grow to
several pages of ifdefs and not have it available anywhere else.

> +++ random.c 20 Aug 2002 09:10:04 -0000
> @@ -746,6 +746,15 @@ static void add_timer_randomness(struct
> __u32 high;
> rdtsc(time, high);
> num ^= high;
> +#elif defined (__CRIS__)
> + /* R_TIMER0_DATA, 8 bit, 40 us resolution, counting down from 250 */
> + /* R_TIMER_DATA, 4*8 bit, timer1, timer0, 38.4kHz, 7.3728MHz */
> + /* R_PRESCALE_STATUS, upper 16 bit: 320ns resolution,
> + lower 16 bit: 40 ns resolution, ~10 bits used,
> + counting down from 1000 */
> + time = jiffies << 8;
> + time |= (TIMER0_DIV - *R_TIMER0_DATA);
> + num ^= *R_PRESCALE_STATUS ^ *R_TIMER_DATA;
> #else
> time = jiffies;
> #endif

-- 
 "Love the dolphins," she advised him. "Write by W.A.S.T.E.." 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/