On Sat, 2 Apr 2016, Peter Zijlstra wrote: > On Sat, Apr 02, 2016 at 11:09:18AM -0000, Thomas Gleixner wrote: > > +/** > > + * hash_local_futex - Return the hash bucket in the task local cache > > + * @uaddr: The user space address of the futex > > + * @prime: The prime number for the modulo operation > > + * > > + * That's a primitive hash function, but it turned out to be the most > > + * efficient one for the task local cache as we don't have anything to > > + * mix in like we have for the global hash. > > + */ > > +static inline unsigned int > > +hash_local_futex(void __user *uaddr, unsigned int prime) > > +{ > > + return ((unsigned long) uaddr) % prime; > > +} > > > +static unsigned int hash_prime(unsigned int size) > > +{ > > + switch(size) { > > + case 16: > > + default: return 13; > > + case 32: return 31; > > + case 64: return 61; > > + case 128: return 127; > > + case 256: return 251; > > + case 512: return 509; > > + case 1024: return 1021; > > + case 2048: return 2039; > > + case 4096: return 4093; > > + } > > +} > > One wonders what's wrong with include/linux/hash.h ? It appears to me > hash_ptr() is pretty much what you want, no?
Nothing is wrong with that. Just my futex fried brain not being able to see the obvious:) Thanks, tglx