summaryrefslogtreecommitdiffstats
path: root/kmod/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'kmod/util.c')
-rwxr-xr-xkmod/util.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/kmod/util.c b/kmod/util.c
index 166ec3e..1932c9b 100755
--- a/kmod/util.c
+++ b/kmod/util.c
@@ -20,16 +20,22 @@ prng_bytes(uint8_t *dst, size_t size)
void
random_perm(uint32_t *arr, uint32_t arr_len)
{
- uint32_t i, idx, tmp;
+ uint32_t i, mid; // idx, tmp;
- for (i = arr_len - 1; i > 0; --i) {
- prng_bytes((void*)&idx, 4);
- idx = idx % i;
-
- tmp = arr[idx];
- arr[idx] = arr[i];
- arr[i] = tmp;
+ /* defeat stream prefetcher by preventing access direction */
+ mid = arr_len / 2;
+ for (i = 0; i < arr_len; i++) {
+ arr[i] = mid + (i % 2 ? -1 : 1) * ((i + 1) / 2);
}
+
+ // for (i = arr_len - 1; i > 0; --i) {
+ // prng_bytes((void*)&idx, 4);
+ // idx = idx % i;
+
+ // tmp = arr[idx];
+ // arr[idx] = arr[i];
+ // arr[i] = tmp;
+ // }
}
void