Add Intel rdrand support
[fio.git] / lib / rand.c
index 32aec208b6c6fc6a01f1cd1ed1301b157286638a..1d189a277cca2e9fa0c6c5d32cd9a70b41f867a2 100644 (file)
@@ -38,6 +38,8 @@
 #include "rand.h"
 #include "../hash.h"
 
+int arch_random;
+
 static inline int __seed(unsigned int x, unsigned int m)
 {
        return (x < m) ? x + m : x;
@@ -72,23 +74,23 @@ void __fill_random_buf(void *buf, unsigned int len, unsigned long seed)
        void *ptr = buf;
 
        while (len) {
+               int this_len;
+
                if (len >= sizeof(int64_t)) {
                        *((int64_t *) ptr) = seed;
-                       ptr += sizeof(int64_t);
-                       len -= sizeof(int64_t);
+                       this_len = sizeof(int64_t);
                } else if (len >= sizeof(int32_t)) {
                        *((int32_t *) ptr) = seed;
-                       ptr += sizeof(int32_t);
-                       len -= sizeof(int32_t);
+                       this_len = sizeof(int32_t);
                } else if (len >= sizeof(int16_t)) {
                        *((int16_t *) ptr) = seed;
-                       ptr += sizeof(int16_t);
-                       len -= sizeof(int16_t);
+                       this_len = sizeof(int16_t);
                } else {
                        *((int8_t *) ptr) = seed;
-                       ptr += sizeof(int8_t);
-                       len -= sizeof(int8_t);
+                       this_len = sizeof(int8_t);
                }
+               ptr += this_len;
+               len -= this_len;
                seed *= GOLDEN_RATIO_PRIME;
                seed >>= 3;
        }