diff options
| -rw-r--r-- | tools/lib/lockdep/tests/AA.c | 8 | ||||
| -rw-r--r-- | tools/lib/lockdep/tests/ABA.c | 13 | ||||
| -rw-r--r-- | tools/lib/lockdep/tests/ABBA_2threads.c | 46 | 
3 files changed, 63 insertions, 4 deletions
diff --git a/tools/lib/lockdep/tests/AA.c b/tools/lib/lockdep/tests/AA.c index 0f782ff404ac..18211a5f354f 100644 --- a/tools/lib/lockdep/tests/AA.c +++ b/tools/lib/lockdep/tests/AA.c @@ -1,13 +1,13 @@  #include <liblockdep/mutex.h> -void main(void) +int main(void)  { -	pthread_mutex_t a, b; +	pthread_mutex_t a;  	pthread_mutex_init(&a, NULL); -	pthread_mutex_init(&b, NULL);  	pthread_mutex_lock(&a); -	pthread_mutex_lock(&b);  	pthread_mutex_lock(&a); + +	return 0;  } diff --git a/tools/lib/lockdep/tests/ABA.c b/tools/lib/lockdep/tests/ABA.c new file mode 100644 index 000000000000..0f782ff404ac --- /dev/null +++ b/tools/lib/lockdep/tests/ABA.c @@ -0,0 +1,13 @@ +#include <liblockdep/mutex.h> + +void main(void) +{ +	pthread_mutex_t a, b; + +	pthread_mutex_init(&a, NULL); +	pthread_mutex_init(&b, NULL); + +	pthread_mutex_lock(&a); +	pthread_mutex_lock(&b); +	pthread_mutex_lock(&a); +} diff --git a/tools/lib/lockdep/tests/ABBA_2threads.c b/tools/lib/lockdep/tests/ABBA_2threads.c new file mode 100644 index 000000000000..cd807d736361 --- /dev/null +++ b/tools/lib/lockdep/tests/ABBA_2threads.c @@ -0,0 +1,46 @@ +#include <stdio.h> +#include <pthread.h> + +pthread_mutex_t a = PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t b = PTHREAD_MUTEX_INITIALIZER; +pthread_barrier_t bar; + +void *ba_lock(void *arg) +{ +	int ret, i; + +	pthread_mutex_lock(&b); + +	if (pthread_barrier_wait(&bar) == PTHREAD_BARRIER_SERIAL_THREAD) +		pthread_barrier_destroy(&bar); + +	pthread_mutex_lock(&a); + +	pthread_mutex_unlock(&a); +	pthread_mutex_unlock(&b); +} + +int main(void) +{ +	pthread_t t; + +	pthread_barrier_init(&bar, NULL, 2); + +	if (pthread_create(&t, NULL, ba_lock, NULL)) { +		fprintf(stderr, "pthread_create() failed\n"); +		return 1; +	} +	pthread_mutex_lock(&a); + +	if (pthread_barrier_wait(&bar) == PTHREAD_BARRIER_SERIAL_THREAD) +		pthread_barrier_destroy(&bar); + +	pthread_mutex_lock(&b); + +	pthread_mutex_unlock(&b); +	pthread_mutex_unlock(&a); + +	pthread_join(t, NULL); + +	return 0; +}  | 

