aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/archrandom.h9
-rw-r--r--arch/x86/include/asm/archrandom.h3
-rw-r--r--drivers/char/random.c3
-rw-r--r--include/linux/random.h8
4 files changed, 23 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/archrandom.h b/arch/powerpc/include/asm/archrandom.h
index 801beba4e64b..bde531103638 100644
--- a/arch/powerpc/include/asm/archrandom.h
+++ b/arch/powerpc/include/asm/archrandom.h
@@ -25,6 +25,11 @@ static inline int arch_get_random_int(unsigned int *v)
25 return rc; 25 return rc;
26} 26}
27 27
28static inline int arch_has_random(void)
29{
30 return !!ppc_md.get_random_long;
31}
32
28int powernv_get_random_long(unsigned long *v); 33int powernv_get_random_long(unsigned long *v);
29 34
30static inline int arch_get_random_seed_long(unsigned long *v) 35static inline int arch_get_random_seed_long(unsigned long *v)
@@ -35,6 +40,10 @@ static inline int arch_get_random_seed_int(unsigned int *v)
35{ 40{
36 return 0; 41 return 0;
37} 42}
43static inline int arch_has_random_seed(void)
44{
45 return 0;
46}
38 47
39#endif /* CONFIG_ARCH_RANDOM */ 48#endif /* CONFIG_ARCH_RANDOM */
40 49
diff --git a/arch/x86/include/asm/archrandom.h b/arch/x86/include/asm/archrandom.h
index 6ad7f6d3f97f..69f1366f1aa3 100644
--- a/arch/x86/include/asm/archrandom.h
+++ b/arch/x86/include/asm/archrandom.h
@@ -114,6 +114,9 @@ GET_SEED(arch_get_random_seed_int, unsigned int, RDSEED_INT, ASM_NOP4);
114 114
115#endif /* CONFIG_X86_64 */ 115#endif /* CONFIG_X86_64 */
116 116
117#define arch_has_random() static_cpu_has(X86_FEATURE_RDRAND)
118#define arch_has_random_seed() static_cpu_has(X86_FEATURE_RDSEED)
119
117#else 120#else
118 121
119static inline int rdrand_long(unsigned long *v) 122static inline int rdrand_long(unsigned long *v)
diff --git a/drivers/char/random.c b/drivers/char/random.c
index c35cee268e13..6b75713d953a 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1307,6 +1307,9 @@ static int arch_random_refill(void)
1307 unsigned int i; 1307 unsigned int i;
1308 unsigned long buf[nlongs]; 1308 unsigned long buf[nlongs];
1309 1309
1310 if (!arch_has_random_seed())
1311 return 0;
1312
1310 for (i = 0; i < nlongs; i++) { 1313 for (i = 0; i < nlongs; i++) {
1311 if (arch_get_random_seed_long(&buf[n])) 1314 if (arch_get_random_seed_long(&buf[n]))
1312 n++; 1315 n++;
diff --git a/include/linux/random.h b/include/linux/random.h
index c2f08131050d..57fbbffd77a0 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -88,6 +88,10 @@ static inline int arch_get_random_int(unsigned int *v)
88{ 88{
89 return 0; 89 return 0;
90} 90}
91static inline int arch_has_random(void)
92{
93 return 0;
94}
91static inline int arch_get_random_seed_long(unsigned long *v) 95static inline int arch_get_random_seed_long(unsigned long *v)
92{ 96{
93 return 0; 97 return 0;
@@ -96,6 +100,10 @@ static inline int arch_get_random_seed_int(unsigned int *v)
96{ 100{
97 return 0; 101 return 0;
98} 102}
103static inline int arch_has_random_seed(void)
104{
105 return 0;
106}
99#endif 107#endif
100 108
101/* Pseudo random number generator from numerical recipes. */ 109/* Pseudo random number generator from numerical recipes. */