Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752775AbcDBQ0m (ORCPT ); Sat, 2 Apr 2016 12:26:42 -0400 Received: from bombadil.infradead.org ([198.137.202.9]:37281 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751299AbcDBQ0l (ORCPT ); Sat, 2 Apr 2016 12:26:41 -0400 Date: Sat, 2 Apr 2016 18:26:32 +0200 From: Peter Zijlstra To: Thomas Gleixner Cc: LKML , Sebastian Andrzej Siewior , Darren Hart , Ingo Molnar , Michael Kerrisk , Davidlohr Bueso , Chris Mason , "Carlos O'Donell" , Torvald Riegel , Eric Dumazet Subject: Re: [RFC patch 4/7] futex: Add support for attached futexes Message-ID: <20160402162632.GQ3448@twins.programming.kicks-ass.net> References: <20160402095108.894519835@linutronix.de> <20160402110035.753145539@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160402110035.753145539@linutronix.de> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1064 Lines: 34 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?