All of lore.kernel.org
 help / color / mirror / Atom feed
* Another ldcw inline assembler patch
@ 2008-06-28 22:07 John David Anglin
  2008-06-28 23:34 ` Matthew Wilcox
  0 siblings, 1 reply; 5+ messages in thread
From: John David Anglin @ 2008-06-28 22:07 UTC (permalink / raw)
  To: linux-parisc

Below is my take on how to write the ldcw asm.  I believe that Helge's
patch was essentially correct.

There are two reasons to expose the memory *a in the asm:

1) To prevent the compiler from discarding a preceeding write to *a, and
2) to prevent it from caching *a in a register over the asm.

The change has had a few days testing with a SMP build of 2.6.22.19
running on a rp3440.

Signed-off-by: Dave Anglin <dave.anglin@nrc-cnrc.gc.ca>

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

diff --git a/include/asm-parisc/system.h b/include/asm-parisc/system.h
index ee80c92..d91357b 100644
--- a/include/asm-parisc/system.h
+++ b/include/asm-parisc/system.h
@@ -168,8 +168,8 @@ static inline void set_eiem(unsigned long val)
 /* LDCW, the only atomic read-write operation PA-RISC has. *sigh*.  */
 #define __ldcw(a) ({						\
 	unsigned __ret;						\
-	__asm__ __volatile__(__LDCW " 0(%1),%0"			\
-		: "=r" (__ret) : "r" (a));			\
+	__asm__ __volatile__(__LDCW " 0(%2),%0"			\
+		: "=r" (__ret), "+m" (*(a)) : "r" (a));		\
 	__ret;							\
 })
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-06-29 21:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-28 22:07 Another ldcw inline assembler patch John David Anglin
2008-06-28 23:34 ` Matthew Wilcox
2008-06-29  0:43   ` John David Anglin
2008-06-29 20:55   ` Grant Grundler
2008-06-29 21:09     ` James Bottomley

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.