Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Mar 2009 23:47:18 +0000 (UTC)
From:      Olivier Houchard <cognet@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r190603 - head/sys/arm/include
Message-ID:  <200903312347.n2VNlIZk013220@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cognet
Date: Tue Mar 31 23:47:18 2009
New Revision: 190603
URL: http://svn.freebsd.org/changeset/base/190603

Log:
  Fix the userland, RAS, version of atomic_fetchadd_32 :
  return the correct value, and do not store the wrong one in the supplied
  pointer.
  
  Submitted by:	Mark Tinguely <tinguely casselton net>

Modified:
  head/sys/arm/include/atomic.h

Modified: head/sys/arm/include/atomic.h
==============================================================================
--- head/sys/arm/include/atomic.h	Tue Mar 31 23:06:20 2009	(r190602)
+++ head/sys/arm/include/atomic.h	Tue Mar 31 23:47:18 2009	(r190603)
@@ -264,22 +264,23 @@ atomic_clear_32(volatile uint32_t *addre
 static __inline uint32_t
 atomic_fetchadd_32(volatile uint32_t *p, uint32_t v)
 {
-	uint32_t start, ras_start = ARM_RAS_START;
+	uint32_t start, tmp, ras_start = ARM_RAS_START;
 
 	__asm __volatile("1:\n"
 	    "adr	%1, 1b\n"
 	    "str	%1, [%0]\n"
 	    "adr	%1, 2f\n"
 	    "str	%1, [%0, #4]\n"
-	    "ldr	%1, [%2]\n"
-	    "add	%1, %1, %3\n"
-	    "str	%0, [%2]\n"
+	    "ldr	%1, [%3]\n"
+	    "mov	%2, %1\n"
+	    "add	%2, %2, %4\n"
+	    "str	%2, [%3]\n"
 	    "2:\n"
-	    "mov	%3, #0\n"
-	    "str	%3, [%0]\n"
-	    "mov	%3, #0xffffffff\n"
-	    "str	%3, [%0, #4]\n"
-	    : "+r" (ras_start), "=r" (start), "+r" (p), "+r" (v)
+	    "mov	%2, #0\n"
+	    "str	%2, [%0]\n"
+	    "mov	%2, #0xffffffff\n"
+	    "str	%2, [%0, #4]\n"
+	    : "+r" (ras_start), "=r" (start), "=r" (tmp), "+r" (p), "+r" (v)
 	    : : "memory");
 	return (start);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903312347.n2VNlIZk013220>