From 74e6a47563f8aa912cb0915e8fe9142cd84ac503 Mon Sep 17 00:00:00 2001 From: Helge Deller Date: Sun, 23 Nov 2008 21:14:59 +0000 Subject: [PATCH] linux-atomic.c (EBUSY): Define if not _LP64. * pa/linux-atomic.c (EBUSY): Define if not _LP64. (__kernel_cmpxchg): Return -EBUSY if the kernel LWS call succeeded and lws_ret is not equal to oldval. From-SVN: r142141 --- gcc/ChangeLog | 6 ++++++ gcc/config/pa/linux-atomic.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a7b3f9f93a3..1a5ab353a4f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-11-23 Helge Deller + + * pa/linux-atomic.c (EBUSY): Define if not _LP64. + (__kernel_cmpxchg): Return -EBUSY if the kernel LWS call + succeeded and lws_ret is not equal to oldval. + 2008-11-23 Kaz Kojima * config/sh/sh.md (consttable_4): Call mark_symbol_refs_as_used. diff --git a/gcc/config/pa/linux-atomic.c b/gcc/config/pa/linux-atomic.c index 4f9780feaa9..ca33ea6d9d6 100644 --- a/gcc/config/pa/linux-atomic.c +++ b/gcc/config/pa/linux-atomic.c @@ -33,8 +33,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #ifndef _LP64 #include #else +#define EFAULT 14 +#define EBUSY 16 #define ENOSYS 251 -#define EFAULT 14 #endif /* All PA-RISC implementations supported by linux have strongly @@ -74,6 +75,13 @@ __kernel_cmpxchg (int oldval, int newval, int *mem) ); if (__builtin_expect (lws_errno == -EFAULT || lws_errno == -ENOSYS, 0)) ABORT_INSTRUCTION; + + /* If the kernel LWS call succeeded (lws_errno == 0), lws_ret contains + the old value from memory. If this value is equal to OLDVAL, the + new value was written to memory. If not, return -EBUSY. */ + if (!lws_errno && lws_ret != oldval) + lws_errno = -EBUSY; + return lws_errno; } -- 2.30.2