parisc: Fix mask used to select futex spinlock
commitd3a5a68cff
upstream. The address bits used to select the futex spinlock need to match those used in the LWS code in syscall.S. The mask 0x3f8 only selects 7 bits. It should select 8 bits. This change fixes the glibc nptl/tst-cond24 and nptl/tst-cond25 tests. Signed-off-by: John David Anglin <dave.anglin@bell.net> Fixes:53a42b6324
("parisc: Switch to more fine grained lws locks") Cc: stable@vger.kernel.org # 5.10+ Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
7c6567979c
Коммит
c576d7a197
|
@ -16,7 +16,7 @@ static inline void
|
||||||
_futex_spin_lock_irqsave(u32 __user *uaddr, unsigned long int *flags)
|
_futex_spin_lock_irqsave(u32 __user *uaddr, unsigned long int *flags)
|
||||||
{
|
{
|
||||||
extern u32 lws_lock_start[];
|
extern u32 lws_lock_start[];
|
||||||
long index = ((long)uaddr & 0x3f8) >> 1;
|
long index = ((long)uaddr & 0x7f8) >> 1;
|
||||||
arch_spinlock_t *s = (arch_spinlock_t *)&lws_lock_start[index];
|
arch_spinlock_t *s = (arch_spinlock_t *)&lws_lock_start[index];
|
||||||
local_irq_save(*flags);
|
local_irq_save(*flags);
|
||||||
arch_spin_lock(s);
|
arch_spin_lock(s);
|
||||||
|
@ -26,7 +26,7 @@ static inline void
|
||||||
_futex_spin_unlock_irqrestore(u32 __user *uaddr, unsigned long int *flags)
|
_futex_spin_unlock_irqrestore(u32 __user *uaddr, unsigned long int *flags)
|
||||||
{
|
{
|
||||||
extern u32 lws_lock_start[];
|
extern u32 lws_lock_start[];
|
||||||
long index = ((long)uaddr & 0x3f8) >> 1;
|
long index = ((long)uaddr & 0x7f8) >> 1;
|
||||||
arch_spinlock_t *s = (arch_spinlock_t *)&lws_lock_start[index];
|
arch_spinlock_t *s = (arch_spinlock_t *)&lws_lock_start[index];
|
||||||
arch_spin_unlock(s);
|
arch_spin_unlock(s);
|
||||||
local_irq_restore(*flags);
|
local_irq_restore(*flags);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче