This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

glibc pthreads support for HPPA


libc-alpha,

This is the first of the of ~nine hppa patches; it is by far the
largest of all the patches (think orders of magnitude).

HPPA has a single atomic operation, namely 'ldcw', which requires
that we initialize locks to one instead of zero. Please keep
this in mind when reviewing the code.

Comments and feedback would be wonderful :)

This is my first time doing a forward-feed of something like
this, so please be patient if the first try takes a little 
iteration.

---
2002-18-09	Carlos O'Donell	<carlos@baldric.uwo.ca>

	2002-10-09 Carlos O'Donell <carlos@baldric.uwo.ca>

	* linuxthreads/descr.h:
	In "struct pthread_atomic" change "int p_spinlock" 
	to "__atomic_lock_t p_spinlock"

	2001-11-14 Matthew Wilcox <willy@debian.org>

	* linuxthreads/oldsemaphore.c:
	(__old_sem_init): Change "__LT_SPINLOCK_INIT" to 
	"__ATOMIC_LOCK_INIT".

	* linuxthreads/pt-machine.c: Define extern for "try_lock"
	function call.

	* linuxthreads/spinlock.c:
	Change "int * spinlock" to "__atomic_lock_t * spinlock",
	"__LT_SPINLOCK_INIT" to "__ATOMIC_LOCK_INIT", and
	"0" to "__ATOMIC_LOCK_INIT", where required.
	In "struct wait_node" change "int abandoned" to
	"__atomic_lock_t abandoned"
	
	(__pthread_release): Function call argument changed from
	"int * spinlock" to "__atomic_lock_t * spinlock", and 
	"__LT_SPINLOCK_INIT" changed to "__ATOMIC_LOCK_INIT".
	
	(__pthread_alt_timedlock): "0" to "__ATOMIC_LOCK_INIT" and
	change calls from "testandset" to "try_lock";
	
	(__pthread_alt_unlock): "0" to "__ATOMIC_LOCK_INIT", and
	"p_node->abandoned" to "lock_held(&p_node->abandoned)", and
	changed calls from "testandset" to "try_lock" where required.

	(__pthread_compare_and_swap): Function call argument changed from
        "int * spinlock" to "__atomic_lock_t * spinlock".

	(__pthread_acquire): Function call argument changed from
        "int * spinlock" to "__atomic_lock_t * spinlock", and 		
	changed calls from "testandset" to "try_lock" where required.

	* linuxthreads/spinlock.h:
	Remove testandset macro.
	(__pthread_compare_and_swap): Extern changed to match function.
	(compare_and_swap): Likewise.
	(compare_and_swap_with_release_semantics): Function arg. type change.
	(compare_and_swap): Function arg. type change.
	(__pthread_compare_and_swap): Extern changed to match function.
	(__pthread_init_lock): "__LT_SPINLOCK_INIT" changed to
	"__ATOMIC_LOCK_INIT".
	(__pthread_alt_trylock): "__LT_SPINLOCK_INIT" to 
	"__ATOMIC_LOCK_INIT" and change calls from "testandset" to 
	"try_lock".
			
	* linuxthreads/sysdeps/alpha/pt-machine.h:
	(testandset): Deleted (renamed to try_lock).
	(try_lock): New. 
	(lock_held): New.
	* linuxthreads/sysdeps/arm/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/cris/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/i386/i686/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/i386/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/ia64/pt-machine.h: Likewise.	
	* linuxthreads/sysdeps/m68k/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/mips/pt-machine.h: Likewise.	
	* linuxthreads/sysdeps/powerpc/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/s390/s390-32/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/s390/s390-64/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/sh/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/sparc/sparc32/pt-machine.h: Likewise.
	* linuxthreads/sysdeps/sparc/sparc64/pt-machine.h: Likewise.

	* linuxthreads/sysdeps/pthread/bits/pthreadtypes.h:
	typedef __atomic_lock_t to int for all other arches
	leaving them the same as before.
	(_pthread_fastlock): Change "int" to "__atomic_lock_t".
	* linuxthreads/sysdeps/pthread/bits/libc-lock.h:
	Include the use of PTHREAD_MUTEX_INITIALIZER for
	the case of __LOCK_INITIALISER_NOT_ZERO.
	* linuxthreads/sysdeps/pthread/bits/initspin.h: 
	Define __ATOMIC_LOCK_INIT as 0 for all arches.
	Include changes to associated macros.
	* linuxthreads/sysdeps/hppa/pspinlock.c :
	(__ldcw): New.
	(__pthread_spin_lock): Cleanup.
	(__pthread_spin_trylock): Cleanup.
	* linuxthreads/sysdeps/hppa/pt-machine.h:
	(__get_cr27): New.
	(__set_cr27): New.
	(testandset): Deleted (renamed to try_lock).
        (try_lock): New.
	(lock_held): New.

	* linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/initspin.h:
	Remove "__LT_SPINLOCK_INIT" and define "__ATOMIC_LOCK_INIT"
	to "((__atomic_lock_t) { 1 })" while changing the associated
	macros that relied on this.

	* linuxthreads/sysdeps/unix/sysv/linux/hppa/bits/pthreadtypes.h:
	New file.
	* sysdeps/hppa/dl-fptr.c:
	Change the use of "1" to "__ATOMIC_LOCK_INIT".
	(__hppa_make_fptr): Call 'try_lock' instead of 'testandset',
	and change the use of "1" to "__ATOMIC_LOCK_INIT".
	(_dl_unmap): Likewise.
	(_dl_lookup_address): Likewise.
        * sysdeps/ia64/dl-fptr.c:
	In "static struct local" change "int lock" to
	"__atomic_lock_t lock"
	(lock): Change calls from "testandset" to "try_lock",
	and change "0" to "__ATOMIC_LOCK_INIT" where needed.
        * sysdeps/unix/sysv/linux/hppa/bits/ipc.h:
        New file.
        * sysdeps/unix/sysv/linux/hppa/bits/msq.h:
        New file.
        * sysdeps/unix/sysv/linux/hppa/bits/sem.h:
        New file.
        * sysdeps/unix/sysv/linux/hppa/bits/shm.h:
        New file.

Attachment: 00-glibc23-hppa-pthreads
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]