cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

drm_random.c (1010B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/bitops.h>
      3#include <linux/kernel.h>
      4#include <linux/random.h>
      5#include <linux/slab.h>
      6#include <linux/types.h>
      7
      8#include "drm_random.h"
      9
     10u32 drm_prandom_u32_max_state(u32 ep_ro, struct rnd_state *state)
     11{
     12	return upper_32_bits((u64)prandom_u32_state(state) * ep_ro);
     13}
     14EXPORT_SYMBOL(drm_prandom_u32_max_state);
     15
     16void drm_random_reorder(unsigned int *order, unsigned int count,
     17			struct rnd_state *state)
     18{
     19	unsigned int i, j;
     20
     21	for (i = 0; i < count; ++i) {
     22		BUILD_BUG_ON(sizeof(unsigned int) > sizeof(u32));
     23		j = drm_prandom_u32_max_state(count, state);
     24		swap(order[i], order[j]);
     25	}
     26}
     27EXPORT_SYMBOL(drm_random_reorder);
     28
     29unsigned int *drm_random_order(unsigned int count, struct rnd_state *state)
     30{
     31	unsigned int *order, i;
     32
     33	order = kmalloc_array(count, sizeof(*order), GFP_KERNEL);
     34	if (!order)
     35		return order;
     36
     37	for (i = 0; i < count; i++)
     38		order[i] = i;
     39
     40	drm_random_reorder(order, count, state);
     41	return order;
     42}
     43EXPORT_SYMBOL(drm_random_order);