Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch After lots of testing I'm not convinced of the bene...



details:   https://anonhg.NetBSD.org/src/rev/ad137b082f84
branches:  trunk
changeset: 465999:ad137b082f84
user:      ad <ad%NetBSD.org@localhost>
date:      Sun Dec 08 20:00:56 2019 +0000

description:
After lots of testing I'm not convinced of the benefit to the tweak
I made to rw_enter(), so undo it to return to baseline.

diffstat:

 sys/arch/amd64/amd64/lock_stubs.S |  20 +++++++++-----------
 sys/arch/i386/i386/lock_stubs.S   |  21 +++++++++------------
 2 files changed, 18 insertions(+), 23 deletions(-)

diffs (138 lines):

diff -r a958a2ca0ab7 -r ad137b082f84 sys/arch/amd64/amd64/lock_stubs.S
--- a/sys/arch/amd64/amd64/lock_stubs.S Sun Dec 08 19:52:37 2019 +0000
+++ b/sys/arch/amd64/amd64/lock_stubs.S Sun Dec 08 20:00:56 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lock_stubs.S,v 1.34 2019/11/23 16:36:38 ad Exp $       */
+/*     $NetBSD: lock_stubs.S,v 1.35 2019/12/08 20:00:56 ad Exp $       */
 
 /*
  * Copyright (c) 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -191,15 +191,13 @@
  * Acquire one hold on a RW lock.
  */
 ENTRY(rw_enter)
-       xorl    %eax, %eax
-       testl   %esi, %esi      /* RW_READER = 0 */
+       cmpl    $RW_READER, %esi
        jne     2f
 
        /*
-        * Reader, and no existing readers on the lock: this is a most
-        * common case.  Instead of reading from the lock word, use cmpxchg
-        * and get the cache line into the EXCLUSIVE state to begin with.
+        * Reader: this is the most common case.
         */
+       movq    (%rdi), %rax
 0:
        testb   $(RW_WRITE_LOCKED|RW_WRITE_WANTED), %al
        jnz     3f
@@ -215,6 +213,7 @@
         * Writer: if the compare-and-set fails, don't bother retrying.
         */
 2:     movq    CPUVAR(CURLWP), %rcx
+       xorq    %rax, %rax
        orq     $RW_WRITE_LOCKED, %rcx
        LOCK
        cmpxchgq %rcx, (%rdi)
@@ -269,15 +268,13 @@
  * Try to acquire one hold on a RW lock.
  */
 ENTRY(rw_tryenter)
-       xorl    %eax, %eax
-       testl   %esi, %esi      /* RW_READER = 0 */
+       cmpl    $RW_READER, %esi
        jne     2f
 
        /*
-        * Reader, and no existing readers on the lock: this is a most
-        * common case.  Instead of reading from the lock word, use cmpxchg
-        * and get the cache line into the EXCLUSIVE state to begin with.
+        * Reader: this is the most common case.
         */
+       movq    (%rdi), %rax
 0:
        testb   $(RW_WRITE_LOCKED|RW_WRITE_WANTED), %al
        jnz     4f
@@ -294,6 +291,7 @@
         * Writer: if the compare-and-set fails, don't bother retrying.
         */
 2:     movq    CPUVAR(CURLWP), %rcx
+       xorq    %rax, %rax
        orq     $RW_WRITE_LOCKED, %rcx
        LOCK
        cmpxchgq %rcx, (%rdi)
diff -r a958a2ca0ab7 -r ad137b082f84 sys/arch/i386/i386/lock_stubs.S
--- a/sys/arch/i386/i386/lock_stubs.S   Sun Dec 08 19:52:37 2019 +0000
+++ b/sys/arch/i386/i386/lock_stubs.S   Sun Dec 08 20:00:56 2019 +0000
@@ -1,7 +1,7 @@
-/*     $NetBSD: lock_stubs.S,v 1.31 2019/11/23 16:36:38 ad Exp $       */
+/*     $NetBSD: lock_stubs.S,v 1.32 2019/12/08 20:00:56 ad Exp $       */
 
 /*-
- * Copyright (c) 2006, 2007, 2008, 2009, 2019 The NetBSD Foundation, Inc.
+ * Copyright (c) 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
@@ -35,7 +35,7 @@
  */
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: lock_stubs.S,v 1.31 2019/11/23 16:36:38 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lock_stubs.S,v 1.32 2019/12/08 20:00:56 ad Exp $");
 
 #include "opt_lockdebug.h"
 
@@ -104,15 +104,13 @@
  */
 ENTRY(rw_enter)
        movl    4(%esp), %edx
-       xorl    %eax, %eax
        cmpl    $RW_READER, 8(%esp)
        jne     2f
 
        /*
-        * Reader, and no existing readers on the lock: this is a most
-        * common case.  Instead of reading from the lock word, use cmpxchg
-        * and get the cache line into the EXCLUSIVE state to begin with.
+        * Reader
         */
+       movl    (%edx), %eax
 0:
        testb   $(RW_WRITE_LOCKED|RW_WRITE_WANTED), %al
        jnz     3f
@@ -127,7 +125,7 @@
        /*
         * Writer
         */
-2:
+2:     xorl    %eax, %eax
        movl    %fs:CPU_INFO_CURLWP(%eax), %ecx
        orl     $RW_WRITE_LOCKED, %ecx
        LOCK(3)
@@ -188,15 +186,13 @@
  */
 ENTRY(rw_tryenter)
        movl    4(%esp), %edx
-       xorl    %eax, %eax
        cmpl    $RW_READER, 8(%esp)
        jne     2f
 
        /*
-        * Reader, and no existing readers on the lock: this is a most
-        * common case.  Instead of reading from the lock word, use cmpxchg
-        * and get the cache line into the EXCLUSIVE state to begin with.
+        * Reader
         */
+       movl    (%edx), %eax
 0:
        testb   $(RW_WRITE_LOCKED|RW_WRITE_WANTED), %al
        jnz     4f
@@ -213,6 +209,7 @@
         * Writer
         */
 2:
+       xorl    %eax, %eax
        movl    %fs:CPU_INFO_CURLWP(%eax), %ecx
        orl     $RW_WRITE_LOCKED, %ecx
        LOCK(13)



Home | Main Index | Thread Index | Old Index