diff options
-rw-r--r-- | kernel/futex/core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/futex/core.c b/kernel/futex/core.c index b652d2f60c409..90d53fb0ee9e1 100644 --- a/kernel/futex/core.c +++ b/kernel/futex/core.c @@ -1629,6 +1629,16 @@ again: mm->futex_phash_new = NULL; if (fph) { + if (cur && (!cur->hash_mask || cur->immutable)) { + /* + * If two threads simultaneously request the global + * hash then the first one performs the switch, + * the second one returns here. + */ + free = fph; + mm->futex_phash_new = new; + return -EBUSY; + } if (cur && !new) { /* * If we have an existing hash, but do not yet have |