mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 18:13:04 +00:00
3bd4abc07a
In the event that random_get_entropy() can't access a cycle counter or similar, falling back to returning 0 is suboptimal. Instead, fallback to calling random_get_entropy_fallback(), which isn't extremely high precision or guaranteed to be entropic, but is certainly better than returning zero all the time. If CONFIG_X86_TSC=n, then it's possible for the kernel to run on systems without RDTSC, such as 486 and certain 586, so the fallback code is only required for that case. As well, fix up both the new function and the get_cycles() function from which it was derived to use cpu_feature_enabled() rather than boot_cpu_has(), and use !IS_ENABLED() instead of #ifndef. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Borislav Petkov <bp@alien8.de> Cc: x86@kernel.org
23 lines
546 B
C
23 lines
546 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_TIMEX_H
|
|
#define _ASM_X86_TIMEX_H
|
|
|
|
#include <asm/processor.h>
|
|
#include <asm/tsc.h>
|
|
|
|
static inline unsigned long random_get_entropy(void)
|
|
{
|
|
if (!IS_ENABLED(CONFIG_X86_TSC) &&
|
|
!cpu_feature_enabled(X86_FEATURE_TSC))
|
|
return random_get_entropy_fallback();
|
|
return rdtsc();
|
|
}
|
|
#define random_get_entropy random_get_entropy
|
|
|
|
/* Assume we use the PIT time source for the clock tick */
|
|
#define CLOCK_TICK_RATE PIT_TICK_RATE
|
|
|
|
#define ARCH_HAS_READ_CURRENT_TIMER
|
|
|
|
#endif /* _ASM_X86_TIMEX_H */
|