On ma, 2016-12-12 at 11:53 +0000, Chris Wilson wrote: > For testing, we want a reproducible PRNG, a plain linear congruent > generator is suitable for our very limited selftests. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> <SNIP> > +++ b/drivers/gpu/drm/lib/drm_rand.c > @@ -0,0 +1,51 @@ > +#include <linux/kernel.h> > +#include <linux/slab.h> > +#include <linux/types.h> > + > +#include "drm_rand.h" > + > +u32 drm_lcg_random(u32 *state) > +{ > + u32 s = *state; > + > +#define rol(x, k) (((x) << (k)) | ((x) >> (32 - (k)))) > + s = (s ^ rol(s, 5) ^ rol(s, 24)) + 0x37798849; > +#undef rol > + > + *state = s; > + return s; > +} Do state your source for checking purposes. Code is bound to be copied and there's no reason to have it good. > +EXPORT_SYMBOL(drm_lcg_random); > + > +int *drm_random_reorder(int *order, int count, u32 *state) > +{ > + int n; > + > + for (n = count-1; n > 1; n--) { > + int r = drm_lcg_random(state) % (n + 1); > + if (r != n) { > + int tmp = order[n]; > + order[n] = order[r]; > + order[r] = tmp; > + } > + } > + > + return order; > +} If you have two items... So definitely add big disclaimers of not being random, or use some more proven algorithm :) Regards, Joonas -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel