futexes: Fix futex_hashsize initialization
"futexes: Increase hash table size for better performance" introduces a new alloc_large_system_hash() call. alloc_large_system_hash() however may allocate less memory than requested, e.g. limited by MAX_ORDER. Hence pass a pointer to alloc_large_system_hash() which will contain the hash shift when the function returns. Afterwards correctly set futex_hashsize. Fixes a crash on s390 where the requested allocation size was 4MB but only 1MB was allocated. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Darren Hart <dvhart@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Waiman Long <Waiman.Long@hp.com> Cc: Jason Low <jason.low2@hp.com> Cc: Davidlohr Bueso <davidlohr@hp.com> Link: http://lkml.kernel.org/r/20140116135450.GA4345@osiris Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
f549ed1abc
commit
63b1a81699
1 changed files with 4 additions and 2 deletions
|
@ -2844,6 +2844,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||||
static int __init futex_init(void)
|
static int __init futex_init(void)
|
||||||
{
|
{
|
||||||
u32 curval;
|
u32 curval;
|
||||||
|
unsigned int futex_shift;
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
|
||||||
#if CONFIG_BASE_SMALL
|
#if CONFIG_BASE_SMALL
|
||||||
|
@ -2855,8 +2856,9 @@ static int __init futex_init(void)
|
||||||
futex_queues = alloc_large_system_hash("futex", sizeof(*futex_queues),
|
futex_queues = alloc_large_system_hash("futex", sizeof(*futex_queues),
|
||||||
futex_hashsize, 0,
|
futex_hashsize, 0,
|
||||||
futex_hashsize < 256 ? HASH_SMALL : 0,
|
futex_hashsize < 256 ? HASH_SMALL : 0,
|
||||||
NULL, NULL, futex_hashsize, futex_hashsize);
|
&futex_shift, NULL,
|
||||||
|
futex_hashsize, futex_hashsize);
|
||||||
|
futex_hashsize = 1UL << futex_shift;
|
||||||
/*
|
/*
|
||||||
* This will fail and we want it. Some arch implementations do
|
* This will fail and we want it. Some arch implementations do
|
||||||
* runtime detection of the futex_atomic_cmpxchg_inatomic()
|
* runtime detection of the futex_atomic_cmpxchg_inatomic()
|
||||||
|
|
Loading…
Reference in a new issue