From: Helge Deller <deller@gmx.de>
To: John David Anglin <dave@hiauly1.hia.nrc.ca>,
Carlos O'Donell <carlos@systemhalted.org>,
Kyle McMartin <kyle@mcmartin.ca>
Cc: John David Anglin <dave.anglin@nrc-cnrc.gc.ca>,
linux-parisc <linux-parisc@vger.kernel.org>
Subject: Re: futex wait failure
Date: Tue, 02 Feb 2010 22:16:36 +0100 [thread overview]
Message-ID: <4B689634.8060408@gmx.de> (raw)
In-Reply-To: <20100108211733.852134EF4@hiauly1.hia.nrc.ca>
[-- Attachment #1: Type: text/plain, Size: 1049 bytes --]
I wonder if we have some problems with the LWS code path in the kernel
regarding atomic locking with futexes?
In arch/parisc/kernel/syscall.S we use a lock table called lws_lock_start[]
to guard the LWS code against other competing userspace processes.
I wonder if this really enough, esp. since we do implement futex syscalls
(e.g. clone/exit calls uses futex functions to change userspace values
because of CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID).
Do we maybe need to protect the LWS code path with the same locking table as the
generic kernel? Atomicity of futexes writing to userspace are not in sync
with the locking of the LWS/lws_lock_start[] code.
I tried to come up with a patch for that which I attached here, but sadly
it hangs as soon as the init process is started on a 64bit/SMP kernel.
So either my thinking here is stupid, or I do have a stupid coding bug.
Furthermore, the coding for futex_atomic_op_inuser() in
arch/parisc/include/asm/futex.h seems to miss real functionality.
I didn't looked closer into this though.
Helge
[-- Attachment #2: z1 --]
[-- Type: text/plain, Size: 2970 bytes --]
diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c
index ec787b4..50353bd 100644
--- a/arch/parisc/kernel/asm-offsets.c
+++ b/arch/parisc/kernel/asm-offsets.c
@@ -290,5 +290,11 @@ int main(void)
BLANK();
DEFINE(ASM_PDC_RESULT_SIZE, NUM_PDC_RESULT * sizeof(unsigned long));
BLANK();
+
+#ifdef CONFIG_SMP
+ DEFINE(ASM_ATOMIC_HASH_SIZE_SHIFT, __builtin_ffs(ATOMIC_HASH_SIZE)-1);
+ DEFINE(ASM_ATOMIC_HASH_ENTRY_SHIFT, __builtin_ffs(sizeof(__atomic_hash[0]))-1);
+#endif
+
return 0;
}
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
index cb71f3d..878f42c 100644
--- a/arch/parisc/kernel/setup.c
+++ b/arch/parisc/kernel/setup.c
@@ -128,6 +131,14 @@ void __init setup_arch(char **cmdline_p)
printk(KERN_INFO "The 32-bit Kernel has started...\n");
#endif
+ /* Consistency check on the size and alignments of our spinlocks */
+#ifdef CONFIG_SMP
+ BUILD_BUG_ON(sizeof(arch_spinlock_t) != __PA_LDCW_ALIGNMENT);
+ BUG_ON((unsigned long)&__atomic_hash[0] & (__PA_LDCW_ALIGNMENT-1));
+ BUG_ON((unsigned long)&__atomic_hash[1] & (__PA_LDCW_ALIGNMENT-1));
+#endif
+ BUILD_BUG_ON((1<<L1_CACHE_SHIFT) != L1_CACHE_BYTES);
+
pdc_console_init();
#ifdef CONFIG_64BIT
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
index f5f9602..7925a68 100644
--- a/arch/parisc/kernel/syscall.S
+++ b/arch/parisc/kernel/syscall.S
@@ -11,6 +11,7 @@
#include <asm/unistd.h>
#include <asm/errno.h>
#include <asm/page.h>
+#include <asm/cache.h>
#include <asm/psw.h>
#include <asm/thread_info.h>
#include <asm/assembly.h>
@@ -530,18 +527,17 @@ lws_compare_and_swap32:
lws_compare_and_swap:
#ifdef CONFIG_SMP
- /* Load start of lock table */
- ldil L%lws_lock_start, %r20
- ldo R%lws_lock_start(%r20), %r28
+ /* Calculate lock table entry via ATOMIC_HASH(%r26) */
+ ldil L%__atomic_hash, %r20
+ ldo R%__atomic_hash(%r20), %r28
- /* Extract four bits from r26 and hash lock (Bits 4-7) */
- extru %r26, 27, 4, %r20
+#ifdef CONFIG_64BIT
+ extrd,u %r26, 63-L1_CACHE_SHIFT, ASM_ATOMIC_HASH_SIZE_SHIFT, %r20
+#else
+ extru %r26, 31-L1_CACHE_SHIFT, ASM_ATOMIC_HASH_SIZE_SHIFT, %r20
+#endif
+ shladd,l %r20, ASM_ATOMIC_HASH_ENTRY_SHIFT, %r28, %r20
- /* Find lock to use, the hash is either one of 0 to
- 15, multiplied by 16 (keep it 16-byte aligned)
- and add to the lock table offset. */
- shlw %r20, 4, %r20
- add %r20, %r28, %r20
# if ENABLE_LWS_DEBUG
/*
@@ -672,31 +668,6 @@ ENTRY(sys_call_table64)
END(sys_call_table64)
#endif
-#ifdef CONFIG_SMP
- /*
- All light-weight-syscall atomic operations
- will use this set of locks
-
- NOTE: The lws_lock_start symbol must be
- at least 16-byte aligned for safe use
- with ldcw.
- */
- .section .data
- .align PAGE_SIZE
-ENTRY(lws_lock_start)
- /* lws locks */
- .rept 16
- /* Keep locks aligned at 16-bytes */
- .word 1
- .word 0
- .word 0
- .word 0
- .endr
-END(lws_lock_start)
- .previous
-#endif
-/* CONFIG_SMP for lws_lock_start */
next prev parent reply other threads:[~2010-02-02 21:16 UTC|newest]
Thread overview: 194+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <no.id>
1999-06-10 18:32 ` [parisc-linux] booting problems Stan Sieler
1999-06-21 17:03 ` Hack to head.S John David Anglin
1999-06-21 19:38 ` John David Anglin
2000-10-11 20:11 ` [parisc-linux] __hp9000s700 predefined John David Anglin
2000-11-09 17:39 ` testcase for hppa64 gcc bug John David Anglin
2000-12-06 4:12 ` Jeffrey A Law
2000-12-06 4:14 ` John David Anglin
2000-12-06 5:28 ` Alan Modra
2001-02-01 1:19 ` [parisc-linux] " Jeffrey A Law
2000-11-09 23:57 ` abort in eliminate_regs compiling glob.c from glibc John David Anglin
2000-11-10 0:36 ` Alan Modra
2000-11-10 2:50 ` John David Anglin
2000-11-14 21:40 ` John David Anglin
2001-01-27 20:12 ` Richard Henderson
2000-12-14 0:48 ` pa reload problem John David Anglin
2000-12-14 3:43 ` Jeffrey A Law
2000-12-14 16:40 ` John David Anglin
2000-12-27 20:08 ` Jeffrey A Law
2000-12-28 5:18 ` John David Anglin
2000-12-16 20:38 ` [parisc-linux] PATCH: Adjust label usage count for new insns [was Re: pa reload problem] John David Anglin
2001-01-02 9:51 ` Jeffrey A Law
2002-01-07 18:39 ` [parisc-linux] PIC assembly John David Anglin
2002-01-09 1:05 ` Grant Grundler
2002-01-11 20:45 ` Grant Grundler
2002-07-15 17:21 ` [parisc-linux] compiling kernels with gcc-3.1 John David Anglin
2002-07-15 17:32 ` Randolph Chung
2002-07-15 17:43 ` Matthew Wilcox
2002-07-15 18:18 ` John David Anglin
2002-07-16 9:02 ` joel.soete
2002-07-16 17:01 ` [parisc-linux] gcc-3.[02] alignment problem John David Anglin
2002-07-16 17:22 ` Randolph Chung
2002-07-16 17:22 ` Randolph Chung
2002-07-16 17:24 ` Matthew Wilcox
2002-07-17 3:19 ` Randolph Chung
2002-07-17 3:19 ` Randolph Chung
2002-07-16 17:24 ` Matthew Wilcox
2002-07-16 20:21 ` Richard Henderson
2002-07-16 20:21 ` Richard Henderson
2002-07-16 17:01 ` John David Anglin
2002-07-16 17:27 ` [parisc-linux] gcc-3.2 bootstrap? John David Anglin
2003-01-31 21:27 ` [parisc-linux] PATCH hppa ordered load absolute ops John David Anglin
2003-01-31 21:27 ` John David Anglin
2003-08-31 19:10 ` [parisc-linux] Re: [glibc] tststatic failues, reduced to simp le testcase John David Anglin
2003-08-31 20:22 ` Carlos O'Donell
2003-08-31 20:47 ` John David Anglin
2003-09-01 6:05 ` Carlos O'Donell
2003-12-15 22:05 ` [parisc-linux] dlopen failed on 'libthread_db.so.1' - /lib/libthread_db.so.1: undefined symbol: ps_pglobal_lookup John David Anglin
2003-12-17 15:32 ` [parisc-linux] " Carlos O'Donell
2003-12-17 15:53 ` Carlos O'Donell
2003-12-17 16:43 ` [parisc-linux] Re: dlopen failed on 'libthread_db.so.1' - John David Anglin
2003-12-17 18:35 ` Carlos O'Donell
2003-12-18 0:21 ` John David Anglin
2003-12-18 0:32 ` John David Anglin
2003-12-18 0:42 ` [parisc-linux] Re: dlopen failed on 'libthread_db.so.1' -g John David Anglin
2004-01-07 21:14 ` [parisc-linux] [Testers wanted] New glibc with profiling fixed John David Anglin
2004-01-07 21:14 ` John David Anglin
2004-08-31 4:23 ` [parisc-linux] Re: linux signal race fixes, patches against hppa tree, please test John David Anglin
2004-08-31 20:43 ` [parisc-linux] Re: linux signal race fixes, patches against hppa tree, please te John David Anglin
2004-09-01 20:08 ` John David Anglin
2004-09-11 7:24 ` [parisc-linux] Another SIGSEGV, this time in /bin/sh John David Anglin
2004-09-13 15:01 ` [parisc-linux] " Carlos O'Donell
2004-09-02 6:29 ` [parisc-linux] Re: linux signal race fixes, patches against hppa tree, please te Carlos O'Donell
2005-03-05 21:53 ` [parisc-linux] Re: Comments? John David Anglin
2005-03-06 0:22 ` John David Anglin
2005-03-08 17:32 ` Carlos O'Donell
2005-03-08 17:44 ` John David Anglin
2005-03-08 17:54 ` Carlos O'Donell
2005-03-08 19:02 ` John David Anglin
2005-03-08 21:08 ` [parisc-linux] OPD's on hppa-linux, and what to do about __cffc's fragility Carlos O'Donell
2005-03-08 21:48 ` [parisc-linux] " John David Anglin
2005-03-08 21:52 ` John David Anglin
2005-03-08 22:25 ` Alan Modra
2005-03-10 15:31 ` Carlos O'Donell
2005-03-10 22:27 ` Alan Modra
2005-03-11 18:05 ` [parisc-linux] Solution to OPD's in hppa-linux, including a transition plan? Carlos O'Donell
2005-03-12 0:49 ` [parisc-linux] " John David Anglin
[not found] ` <20050315220842.GC22872@baldric.uwo.ca>
[not found] ` <20050315224142.GC21148@bubble.modra.org>
2005-03-16 20:36 ` Carlos O'Donell
2005-03-16 23:54 ` Alan Modra
[not found] ` <200503160410.j2G4ALcu021219@hiauly1.hia.nrc.ca>
2005-03-16 21:37 ` Carlos O'Donell
2005-03-17 3:51 ` John David Anglin
2005-07-16 2:55 ` [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression) John David Anglin
2005-07-16 16:16 ` Carlos O'Donell
2005-07-16 17:37 ` John David Anglin
2005-07-16 17:54 ` John David Anglin
2005-07-16 19:41 ` Carlos O'Donell
2005-07-16 19:56 ` John David Anglin
2005-07-16 19:15 ` Carlos O'Donell
2005-08-16 3:32 ` [parisc-linux] Re: gsyprf11 and 2.6.13-rc3-pa1 John David Anglin
2005-12-26 19:58 ` [parisc-linux] strtold John David Anglin
2006-01-07 21:07 ` [parisc-linux] strtold Carlos O'Donell
2006-01-07 22:41 ` John David Anglin
2006-01-07 23:42 ` Carlos O'Donell
2006-01-07 23:49 ` John David Anglin
2006-01-07 23:56 ` John David Anglin
2006-01-08 4:28 ` Grant Grundler
2005-12-26 21:54 ` [parisc-linux] Re: nscd: error while loading shared libraries: unexpected reloc type 0x42 John David Anglin
2006-01-07 23:53 ` Carlos O'Donell
2006-01-08 0:16 ` [parisc-linux] Re: nscd: error while loading shared libraries: John David Anglin
2006-02-04 23:41 ` [parisc-linux] long double on hppa64-*-linux* John David Anglin
2006-02-05 0:45 ` Grant Grundler
2006-02-05 3:42 ` John David Anglin
2006-03-12 20:15 ` [parisc-linux] Re: gcj can't make shared libs on hppa John David Anglin
2006-03-13 14:24 ` Carlos O'Donell
2006-03-13 20:50 ` John David Anglin
2006-06-09 0:56 ` [parisc-linux] User space locks -- what's wrong John David Anglin
2007-01-03 1:41 ` [parisc-linux] Re: PA8800 Status (Happy New Year) John David Anglin
2007-01-03 4:24 ` John David Anglin
2007-02-17 20:32 ` [parisc-linux] Re: call_init in libc6 2.3.6.ds1-11 John David Anglin
2007-09-04 1:19 ` [parisc-linux] 2.6.23-rc5 warnings John David Anglin
2008-08-23 16:48 ` X won't start with VisEG and 2.6.22.19 John David Anglin
2008-08-24 10:35 ` Helge Deller
2008-08-24 14:09 ` John David Anglin
2008-08-24 14:38 ` Helge Deller
2009-05-03 0:48 ` Kernel Panic during init with 2.6.29-gb609308 (fresh clone of git John David Anglin
2009-08-23 21:21 ` Reproducible random python crash John David Anglin
2009-12-23 22:18 ` futex wait failure John David Anglin
2009-12-24 2:22 ` Carlos O'Donell
2009-12-28 18:59 ` John David Anglin
2009-12-29 13:47 ` Helge Deller
2009-12-29 15:00 ` John David Anglin
2009-12-30 10:49 ` Randolph Chung
2009-12-31 18:14 ` Carlos O'Donell
2009-12-31 19:11 ` Helge Deller
2010-01-01 3:49 ` John David Anglin
2010-01-01 5:02 ` John David Anglin
2010-01-04 16:27 ` Helge Deller
2010-01-04 17:16 ` Carlos O'Donell
2010-01-04 18:11 ` John David Anglin
2010-01-04 18:29 ` John David Anglin
2010-01-04 20:51 ` Helge Deller
2010-01-04 21:39 ` John David Anglin
2010-01-05 22:27 ` John David Anglin
2010-01-06 23:33 ` John David Anglin
2010-01-07 16:13 ` Helge Deller
2010-01-08 16:37 ` John David Anglin
2010-01-08 21:17 ` John David Anglin
2010-02-02 21:16 ` Helge Deller [this message]
2010-02-03 3:44 ` John David Anglin
2010-02-03 22:03 ` Helge Deller
2010-03-07 17:12 ` John David Anglin
2010-03-07 20:32 ` John David Anglin
2010-03-11 3:20 ` John David Anglin
2010-03-11 13:54 ` Kyle McMartin
2010-03-11 22:40 ` John David Anglin
2010-03-11 23:32 ` John David Anglin
2010-03-13 2:06 ` John David Anglin
2010-03-15 1:10 ` John David Anglin
2010-03-16 11:49 ` Carlos O'Donell
2010-03-21 18:19 ` John David Anglin
2010-03-22 14:26 ` Carlos O'Donell
2010-03-23 21:32 ` Carlos O'Donell
2010-03-23 22:23 ` John David Anglin
2010-02-03 22:44 ` Carlos O'Donell
2010-01-08 21:18 ` Helge Deller
2010-01-08 21:43 ` John David Anglin
2010-01-08 21:44 ` Carlos O'Donell
2010-01-08 21:44 ` Carlos O'Donell
2010-01-08 21:56 ` Kyle McMartin
2010-01-08 22:28 ` John David Anglin
2010-01-08 22:33 ` Kyle McMartin
2010-01-08 22:31 ` John David Anglin
2010-01-16 23:17 ` Helge Deller
2010-01-18 15:50 ` John David Anglin
2010-01-18 20:44 ` John David Anglin
2010-01-18 20:49 ` Carlos O'Donell
2010-01-29 17:53 ` Carlos O'Donell
2010-01-31 21:14 ` Helge Deller
2010-01-01 0:26 ` John David Anglin
2010-02-01 12:58 ` Carlos O'Donell
2010-02-01 15:47 ` John David Anglin
2010-02-01 19:02 ` Helge Deller
2010-02-01 19:11 ` John David Anglin
2010-02-01 21:36 ` Carlos O'Donell
2010-01-04 17:32 ` John David Anglin
2010-01-04 18:02 ` Carlos O'Donell
2010-01-04 18:22 ` John David Anglin
2010-01-04 21:24 ` Helge Deller
2009-12-31 22:38 ` John David Anglin
2010-01-01 0:36 ` John David Anglin
2009-12-22 15:03 John David Anglin
2009-12-22 15:52 ` Carlos O'Donell
[not found] <20091222164810.DBF3B516F@hiauly1.hia.nrc.ca>
2009-12-22 20:30 ` Carlos O'Donell
2009-12-22 22:05 ` John David Anglin
2009-12-23 15:01 ` Carlos O'Donell
2009-12-23 16:15 ` John David Anglin
2009-12-23 16:48 ` John David Anglin
2009-12-23 20:39 ` John David Anglin
2009-12-23 20:45 ` Carlos O'Donell
2009-12-23 20:46 ` Carlos O'Donell
2009-12-23 21:08 ` John David Anglin
2009-12-23 21:48 ` Carlos O'Donell
2009-12-23 20:36 ` Carlos O'Donell
2009-12-23 20:57 ` John David Anglin
[not found] ` <20091222212950.8E5F74EA9@hiauly1.hia.nrc.ca>
2009-12-23 14:56 ` Carlos O'Donell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B689634.8060408@gmx.de \
--to=deller@gmx.de \
--cc=carlos@systemhalted.org \
--cc=dave.anglin@nrc-cnrc.gc.ca \
--cc=dave@hiauly1.hia.nrc.ca \
--cc=kyle@mcmartin.ca \
--cc=linux-parisc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox