From: Anton Blanchard <anton@samba.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-kernel@vger.kernel.org, akpm@osdl.org
Subject: Re: Using get_cycles for add_timer_randomness
Date: Wed, 11 Aug 2004 02:24:35 +1000 [thread overview]
Message-ID: <20040810162435.GK24690@krispykreme> (raw)
In-Reply-To: <200308160303.17612.arnd@arndb.de>
This sounded like a good idea at the time, any reason we cant merge
this?
Anton
On Sat, Aug 16, 2003 at 03:03:17AM +0200, Arnd Bergmann wrote:
> I noticed that only i386 and x86-64 are currently using
> a high resolution timer source when adding randomness.
> Since many architectures have a working get_cycles()
> implementation, it seems rather straightforward to use
> that.
>
> Has this been discussed before, or can anyone comment
> on the implementation below?
>
> This patch attempts to take into account the size of
> cycles_t, which is either 32 or 64 bits wide but
> independent of the architecture's word size.
>
> The behavior should be nearly identical to the
> old one on i386, x86-64 and all architectures
> without a time stamp counter, while finding
> more entropy on the other architectures.
>
> Arnd <><
>
> ===== drivers/char/random.c 1.35 vs edited =====
> --- 1.35/drivers/char/random.c Wed Aug 6 19:59:31 2003
> +++ edited/drivers/char/random.c Sat Aug 16 02:05:34 2003
> @@ -711,8 +711,8 @@
>
> /* There is one of these per entropy source */
> struct timer_rand_state {
> - __u32 last_time;
> - __s32 last_delta,last_delta2;
> + cycles_t last_time;
> + long last_delta,last_delta2;
> int dont_count_entropy:1;
> };
>
> @@ -729,27 +729,28 @@
> * The number "num" is also added to the pool - it should somehow describe
> * the type of event which just happened. This is currently 0-255 for
> * keyboard scan codes, and 256 upwards for interrupts.
> - * On the i386, this is assumed to be at most 16 bits, and the high bits
> - * are used for a high-resolution timer.
> + * This is assumed to be at most 16 bits, and the high bits are used for
> + * high-resolution timers.
> *
> */
> static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
> {
> - __u32 time;
> - __s32 delta, delta2, delta3;
> + cycles_t time;
> + long delta, delta2, delta3;
> int entropy = 0;
>
> -#if defined (__i386__) || defined (__x86_64__)
> - if (cpu_has_tsc) {
> - __u32 high;
> - rdtsc(time, high);
> - num ^= high;
> + /*
> + * Use get_cycles() if implemented, otherwise fall back to
> + * jiffies.
> + */
> + time = get_cycles();
> + if (time != 0) {
> + if (sizeof (time) > 4) {
> + num ^= (u32)(time >> 32);
> + }
> } else {
> time = jiffies;
> }
> -#else
> - time = jiffies;
> -#endif
>
> /*
> * Calculate number of bits of randomness we probably added.
> ===== include/asm-i386/timex.h 1.5 vs edited =====
> --- 1.5/include/asm-i386/timex.h Mon Jun 9 14:41:23 2003
> +++ edited/include/asm-i386/timex.h Sat Aug 16 02:17:05 2003
> @@ -7,7 +7,7 @@
> #define _ASMi386_TIMEX_H
>
> #include <linux/config.h>
> -#include <asm/msr.h>
> +#include <asm/processor.h>
>
> #ifdef CONFIG_X86_PC9800
> extern int CLOCK_TICK_RATE;
> @@ -44,14 +44,17 @@
>
> static inline cycles_t get_cycles (void)
> {
> + unsigned long long ret=0;
> +
> #ifndef CONFIG_X86_TSC
> - return 0;
> -#else
> - unsigned long long ret;
> + if (!cpu_has_tsc)
> + return 0;
> +#endif
>
> +#if defined(CONFIG_X86_GENERIC) || defined(CONFIG_X86_TSC)
> rdtscll(ret);
> - return ret;
> #endif
> + return ret;
> }
>
> extern unsigned long cpu_khz;
> -
> 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/
next prev parent reply other threads:[~2004-08-10 16:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-08-16 1:03 Using get_cycles for add_timer_randomness Arnd Bergmann
2004-08-10 16:24 ` Anton Blanchard [this message]
2004-08-14 18:36 ` Anton Blanchard
2004-08-15 22:48 ` Andrew Morton
2004-08-15 23:46 ` Richard Mortimer
2004-08-15 23:59 ` David S. Miller
2004-08-16 16:17 ` Theodore Ts'o
2004-08-16 16:22 ` William Lee Irwin III
2004-08-16 16:44 ` Ralf Baechle
2004-08-16 16:49 ` William Lee Irwin III
2004-08-19 18:26 ` Ralf Baechle
-- strict thread matches above, loose matches on Subject: below --
2004-08-16 18:53 Luck, Tony
2004-08-16 21:29 Luck, Tony
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040810162435.GK24690@krispykreme \
--to=anton@samba.org \
--cc=akpm@osdl.org \
--cc=arnd@arndb.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.