NetBSD-Bugs archive

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

PR/57199 CVS commit: src/common/lib/libc/arch/x86_64/atomic



The following reply was made to PR kern/57199; it has been noted by GNATS.

From: "Taylor R Campbell" <riastradh%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/57199 CVS commit: src/common/lib/libc/arch/x86_64/atomic
Date: Tue, 16 Jul 2024 22:45:10 +0000

 Module Name:	src
 Committed By:	riastradh
 Date:		Tue Jul 16 22:45:10 UTC 2024
 
 Modified Files:
 	src/common/lib/libc/arch/x86_64/atomic: atomic.S
 
 Log Message:
 amd64: Fix performance regression in uniprocessor atomics/membars.
 
 Back in 2022, I eliminated the MFENCE hotpatch in membar_sync because
 it's essentially always more expensive than LOCK ADD with no benefit
 for CPU/CPU store-before-load ordering.  (It is relevant only for
 non-temporal stores or write-combining memory.)
 
 https://mail-index.netbsd.org/source-changes/2022/07/30/msg140047.html
 
 But in that change, I made a mistake and _also_ eliminated the LOCK
 hotpatch on uniprocessor amd64.  And our assembler gas helpfully
 interprets uppercase LOCK just like lowercase lock and assembles them
 the same way, so I didn't notice.
 
 This change restores the LOCK hotpatch, so that when booting on a
 uniprocessor system (or a uniprocessor guest on a multicore host),
 the LOCK prefix is replaced by NOP for a cheaper instruction.
 
 Found by puzzling over how my explanation for PR kern/57199 could
 possibly be correct when (on an amd64 guest) ddb x/i membar_sync kept
 showing the lock prefix even in uniprocessor boots.
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.30 -r1.31 src/common/lib/libc/arch/x86_64/atomic/atomic.S
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.
 


Home | Main Index | Thread Index | Old Index