Broken in https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commitdiff;h=8d404a629167d67ed56e45de3e65d1e0b7cdeb24;hp=3b34bd6e178614d6021ee7d1140646f7c8ed7519
https://dev.gnupg.org/T5277
https://bugs.gentoo.org/767859

This is a revert of that commit, as suggested by upstream in the linked bug.
diff --git a/random/rand-internal.h b/random/rand-internal.h
index 34221569..d99c6671 100644
--- a/random/rand-internal.h
+++ b/random/rand-internal.h
@@ -141,7 +141,7 @@ void _gcry_rndhw_poll_fast (void (*add)(const void*, size_t,
                             enum random_origins origin);
 size_t _gcry_rndhw_poll_slow (void (*add)(const void*, size_t,
                                           enum random_origins),
-                              enum random_origins origin, size_t req_length);
+                              enum random_origins origin);
 
 
 
diff --git a/random/rndhw.c b/random/rndhw.c
index 3cf9acc3..2829382c 100644
--- a/random/rndhw.c
+++ b/random/rndhw.c
@@ -198,33 +198,24 @@ _gcry_rndhw_poll_fast (void (*add)(const void*, size_t, enum random_origins),
 
 
 /* Read 64 bytes from a hardware RNG and return the number of bytes
-   actually read.  However hardware source is let account only
-   for up to 50% (or 25% for RDRAND) of the requested bytes.  */
+   actually read.  */
 size_t
 _gcry_rndhw_poll_slow (void (*add)(const void*, size_t, enum random_origins),
-                       enum random_origins origin, size_t req_length)
+                       enum random_origins origin)
 {
   size_t nbytes = 0;
 
   (void)add;
   (void)origin;
 
-  req_length /= 2; /* Up to 50%. */
-
 #ifdef USE_DRNG
   if ((_gcry_get_hw_features () & HWF_INTEL_RDRAND))
-    {
-      req_length /= 2; /* Up to 25%. */
-      nbytes += poll_drng (add, origin, 0);
-    }
+    nbytes += poll_drng (add, origin, 0);
 #endif
 #ifdef USE_PADLOCK
   if ((_gcry_get_hw_features () & HWF_PADLOCK_RNG))
     nbytes += poll_padlock (add, origin, 0);
 #endif
 
-  if (nbytes > req_length)
-    nbytes = req_length;
-
   return nbytes;
 }
diff --git a/random/rndlinux.c b/random/rndlinux.c
index a22db177..f378a549 100644
--- a/random/rndlinux.c
+++ b/random/rndlinux.c
@@ -190,10 +190,19 @@ _gcry_rndlinux_gather_random (void (*add)(const void*, size_t,
     }
 
 
-  /* First read from a hardware source.  Note that _gcry_rndhw_poll_slow lets
-     it account only for up to 50% (or 25% for RDRAND) of the requested
-     bytes.  */
-  n_hw = _gcry_rndhw_poll_slow (add, origin, length);
+  /* First read from a hardware source.  However let it account only
+     for up to 50% (or 25% for RDRAND) of the requested bytes.  */
+  n_hw = _gcry_rndhw_poll_slow (add, origin);
+  if ((_gcry_get_hw_features () & HWF_INTEL_RDRAND))
+    {
+      if (n_hw > length/4)
+        n_hw = length/4;
+    }
+  else
+    {
+      if (n_hw > length/2)
+        n_hw = length/2;
+    }
   if (length > 1)
     length -= n_hw;
 
diff --git a/src/g10lib.h b/src/g10lib.h
index 243997eb..cba2e237 100644
--- a/src/g10lib.h
+++ b/src/g10lib.h
@@ -217,8 +217,6 @@ char **_gcry_strtokenize (const char *string, const char *delim);
 
 
 /*-- src/hwfeatures.c --*/
-#if defined(HAVE_CPU_ARCH_X86)
-
 #define HWF_PADLOCK_RNG         (1 << 0)
 #define HWF_PADLOCK_AES         (1 << 1)
 #define HWF_PADLOCK_SHA         (1 << 2)
@@ -238,28 +236,20 @@ char **_gcry_strtokenize (const char *string, const char *delim);
 #define HWF_INTEL_RDTSC         (1 << 15)
 #define HWF_INTEL_SHAEXT        (1 << 16)
 
-#elif defined(HAVE_CPU_ARCH_ARM)
-
-#define HWF_ARM_NEON            (1 << 0)
-#define HWF_ARM_AES             (1 << 1)
-#define HWF_ARM_SHA1            (1 << 2)
-#define HWF_ARM_SHA2            (1 << 3)
-#define HWF_ARM_PMULL           (1 << 4)
-
-#elif defined(HAVE_CPU_ARCH_PPC)
+#define HWF_ARM_NEON            (1 << 17)
+#define HWF_ARM_AES             (1 << 18)
+#define HWF_ARM_SHA1            (1 << 19)
+#define HWF_ARM_SHA2            (1 << 20)
+#define HWF_ARM_PMULL           (1 << 21)
 
-#define HWF_PPC_VCRYPTO         (1 << 0)
-#define HWF_PPC_ARCH_3_00       (1 << 1)
-#define HWF_PPC_ARCH_2_07       (1 << 2)
+#define HWF_PPC_VCRYPTO         (1 << 22)
+#define HWF_PPC_ARCH_3_00       (1 << 23)
+#define HWF_PPC_ARCH_2_07       (1 << 24)
 
-#elif defined(HAVE_CPU_ARCH_S390X)
-
-#define HWF_S390X_MSA           (1 << 0)
-#define HWF_S390X_MSA_4         (1 << 1)
-#define HWF_S390X_MSA_8         (1 << 2)
-#define HWF_S390X_VX            (1 << 3)
-
-#endif
+#define HWF_S390X_MSA           (1 << 25)
+#define HWF_S390X_MSA_4         (1 << 26)
+#define HWF_S390X_MSA_8         (1 << 27)
+#define HWF_S390X_VX            (1 << 28)
 
 gpg_err_code_t _gcry_disable_hw_feature (const char *name);
 void _gcry_detect_hw_features (void);
