1#include "pthread_impl.h"
2#include "syscall.h"
3#include <unsupported_api.h>
4
5static volatile int check_pi_result = -1;
6
7int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol)
8{
9	int r;
10
11	UNSUPPORTED_API_VOID(LITEOS_A);
12	switch (protocol) {
13	case PTHREAD_PRIO_NONE:
14		a->__attr &= ~8;
15		return 0;
16	case PTHREAD_PRIO_INHERIT:
17		r = check_pi_result;
18		if (r < 0) {
19			volatile int lk = 0;
20			r = -__syscall(SYS_futex, &lk, FUTEX_LOCK_PI, 0, 0);
21			a_store(&check_pi_result, r);
22		}
23		if (r) return r;
24		a->__attr |= 8;
25		return 0;
26	case PTHREAD_PRIO_PROTECT:
27		return ENOTSUP;
28	default:
29		return EINVAL;
30	}
31}
32