NetBSD-Bugs archive

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

PR/57437 CVS commit: [netbsd-10] src/lib/libpthread



The following reply was made to PR port-arm/57437; it has been noted by GNATS.

From: "Martin Husemann" <martin%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/57437 CVS commit: [netbsd-10] src/lib/libpthread
Date: Tue, 1 Aug 2023 16:21:07 +0000

 Module Name:	src
 Committed By:	martin
 Date:		Tue Aug  1 16:21:07 UTC 2023
 
 Modified Files:
 	src/lib/libpthread [netbsd-10]: pthread_int.h pthread_spin.c
 	src/lib/libpthread/arch/aarch64 [netbsd-10]: pthread_md.h
 	src/lib/libpthread/arch/arm [netbsd-10]: pthread_md.h
 	src/lib/libpthread/arch/i386 [netbsd-10]: pthread_md.h
 	src/lib/libpthread/arch/x86_64 [netbsd-10]: pthread_md.h
 
 Log Message:
 Pull up following revision(s) (requested by riastradh in ticket #296):
 
 	lib/libpthread/arch/x86_64/pthread_md.h: revision 1.13
 	lib/libpthread/pthread_int.h: revision 1.110
 	lib/libpthread/pthread_int.h: revision 1.111
 	lib/libpthread/arch/i386/pthread_md.h: revision 1.21
 	lib/libpthread/arch/arm/pthread_md.h: revision 1.12
 	lib/libpthread/arch/arm/pthread_md.h: revision 1.13
 	lib/libpthread/pthread_spin.c: revision 1.11
 	lib/libpthread/arch/aarch64/pthread_md.h: revision 1.2
 
 libpthread: Use __nothing, not /* nothing */, for empty macros.
 
 No functional change intended -- just safer to do it this way in case
 the macros are used in if branches or comma expressions.
 
 PR port-arm/57437 (pthread__smt_pause/wake issue)
 
 libpthread: New pthread__smt_wait to put CPU in low power for spin.
 
 This is now distinct from pthread__smt_pause, which is for spin lock
 backoff with no paired wakeup.
 
 On Arm, there is a single-bit event register per CPU, and there are two
 instructions to manage it:
 - wfe, wait for event -- if event register is clear, enter low power
   mode and wait until event register is set; then exit low power mode
   and clear event register
 - sev, signal event -- sets event register on all CPUs (other
   circumstances like interrupts also set the event register and cause
   wfe to wake)
 
 These can be used to reduce the power consumption of spinning for a
 lock, but only if they are actually paired -- if there's no sev, wfe
 might hang indefinitely.  Currently only pthread_spin(3) actually
 pairs them; the other lock primitives (internal lock, mutex, rwlock)
 do not -- they have spin lock backoff loops, but no corresponding
 wakeup to cancel a wfe.
 
 It may be worthwhile to teach the other lock primitives to pair
 wfe/sev, but that requires some performance measurement to verify
 it's actually worthwhile.  So for now, we just make sure not to use
 wfe when there's no sev, and keep everything else the same -- this
 should fix severe performance degredation in libpthread on Arm
 without hurting anything else.
 
 No change in the generated code on amd64 and i386.  No change in the
 generated code for pthread_spin.c on arm and aarch64 -- changes only
 the generated code for pthread_lock.c, pthread_mutex.c, and
 pthread_rwlock.c, as intended.
 
 PR port-arm/57437
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.109 -r1.109.2.1 src/lib/libpthread/pthread_int.h
 cvs rdiff -u -r1.10 -r1.10.2.1 src/lib/libpthread/pthread_spin.c
 cvs rdiff -u -r1.1 -r1.1.36.1 src/lib/libpthread/arch/aarch64/pthread_md.h
 cvs rdiff -u -r1.11 -r1.11.10.1 src/lib/libpthread/arch/arm/pthread_md.h
 cvs rdiff -u -r1.20 -r1.20.42.1 src/lib/libpthread/arch/i386/pthread_md.h
 cvs rdiff -u -r1.12 -r1.12.54.1 src/lib/libpthread/arch/x86_64/pthread_md.h
 
 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