From c42be504c92d76d2e06d0fc8ebd05fc913376d2d Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 16 Nov 2016 14:50:09 +0100 Subject: posix: Add self-contained pthread spinlock Turn pthread_spinlock_t into a self-contained object. On uni-processor configurations, interrupts are disabled in the lock/trylock operations and the previous interrupt status is restored in the corresponding unlock operations. On SMP configurations, a ticket lock is a acquired and released in addition. The self-contained pthread_spinlock_t object is defined by Newlib in . typedef struct { struct _Ticket_lock_Control _lock; __uint32_t _interrupt_state; } pthread_spinlock_t; This implementation is simple and efficient. However, this test case of the Linux Test Project would fail due to call of printf() and sleep() during spin lock ownership: https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_spin_lock/1-2.c There is only limited support for profiling on SMP configurations. Delete CORE spinlock implementation. Update #2674. --- testsuites/sptests/spsysinit01/init.c | 17 ----------------- 1 file changed, 17 deletions(-) (limited to 'testsuites/sptests/spsysinit01') diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c index 1ce22d5c08..b81fbabbac 100644 --- a/testsuites/sptests/spsysinit01/init.c +++ b/testsuites/sptests/spsysinit01/init.c @@ -43,7 +43,6 @@ #include #include #include -#include #include #endif /* RTEMS_POSIX_API */ #include @@ -118,8 +117,6 @@ typedef enum { POSIX_BARRIER_POST, POSIX_RWLOCK_PRE, POSIX_RWLOCK_POST, - POSIX_SPINLOCK_PRE, - POSIX_SPINLOCK_POST, POSIX_CLEANUP_PRE, POSIX_CLEANUP_POST, #endif /* RTEMS_POSIX_API */ @@ -527,18 +524,6 @@ LAST(RTEMS_SYSINIT_POSIX_RWLOCK) next_step(POSIX_RWLOCK_POST); } -FIRST(RTEMS_SYSINIT_POSIX_SPINLOCK) -{ - assert(_POSIX_Spinlock_Information.maximum == 0); - next_step(POSIX_SPINLOCK_PRE); -} - -LAST(RTEMS_SYSINIT_POSIX_SPINLOCK) -{ - assert(_POSIX_Spinlock_Information.maximum != 0); - next_step(POSIX_SPINLOCK_POST); -} - static size_t user_extensions_pre_posix_cleanup; FIRST(RTEMS_SYSINIT_POSIX_CLEANUP) @@ -767,8 +752,6 @@ static void *POSIX_Init(void *arg) #define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 1 -#define CONFIGURE_MAXIMUM_POSIX_SPINLOCKS 1 - #define CONFIGURE_MAXIMUM_POSIX_TIMERS 1 #define CONFIGURE_MAXIMUM_POSIX_THREADS 1 -- cgit v1.2.3