Add convenient pthread wrappers
Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
diff --git a/host/xtest/xtest_helpers.c b/host/xtest/xtest_helpers.c
index 7a91acd..879bf48 100644
--- a/host/xtest/xtest_helpers.c
+++ b/host/xtest/xtest_helpers.c
@@ -11,16 +11,17 @@
* GNU General Public License for more details.
*/
-#include "xtest_helpers.h"
-#include "xtest_test.h"
-
+#include <assert.h>
+#include <err.h>
+#include <malloc.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <string.h>
#include <ta_crypt.h>
#include <utee_defines.h>
-#include <string.h>
-#include <stdio.h>
-#include <malloc.h>
-#include <assert.h>
+#include "xtest_helpers.h"
+#include "xtest_test.h"
/* Round up the even multiple of size, size has to be a multiple of 2 */
#define ROUNDUP(v, size) (((v) + (size - 1)) & ~(size - 1))
@@ -408,3 +409,61 @@
p_uuid->clockSeqAndNode[6],
p_uuid->clockSeqAndNode[7]);
}
+
+
+void xtest_mutex_init(pthread_mutex_t *mutex)
+{
+ int e = pthread_mutex_init(mutex, NULL);
+
+ if (e)
+ errx(1, "pthread_mutex_init: %s", strerror(e));
+}
+
+void xtest_mutex_destroy(pthread_mutex_t *mutex)
+{
+ int e = pthread_mutex_destroy(mutex);
+
+ if (e)
+ errx(1, "pthread_mutex_destroy: %s", strerror(e));
+}
+
+void xtest_mutex_lock(pthread_mutex_t *mutex)
+{
+ int e = pthread_mutex_lock(mutex);
+
+ if (e)
+ errx(1, "pthread_mutex_lock: %s", strerror(e));
+}
+
+void xtest_mutex_unlock(pthread_mutex_t *mutex)
+{
+ int e = pthread_mutex_unlock(mutex);
+
+ if (e)
+ errx(1, "pthread_mutex_unlock: %s", strerror(e));
+}
+
+void xtest_barrier_init(pthread_barrier_t *barrier, unsigned count)
+{
+ int e = pthread_barrier_init(barrier, NULL, count);
+
+ if (e)
+ errx(1, "pthread_barrier_init: %s", strerror(e));
+}
+
+void xtest_barrier_destroy(pthread_barrier_t *barrier)
+{
+ int e = pthread_barrier_destroy(barrier);
+
+ if (e)
+ errx(1, "pthread_barrier_destroy: %s", strerror(e));
+}
+
+int xtest_barrier_wait(pthread_barrier_t *barrier)
+{
+ int e = pthread_barrier_wait(barrier);
+
+ if (e && e != PTHREAD_BARRIER_SERIAL_THREAD)
+ errx(1, "pthread _barrier_wait: %s", strerror(e));
+ return e;
+}
diff --git a/host/xtest/xtest_helpers.h b/host/xtest/xtest_helpers.h
index 2339db2..66d372c 100644
--- a/host/xtest/xtest_helpers.h
+++ b/host/xtest/xtest_helpers.h
@@ -14,9 +14,10 @@
#ifndef XTEST_HELPERS_H
#define XTEST_HELPERS_H
-#include <tee_client_api.h>
-#include <tee_api_types.h>
#include <adbg.h>
+#include <pthread.h>
+#include <tee_api_types.h>
+#include <tee_client_api.h>
extern unsigned int level;
@@ -103,4 +104,13 @@
int ree_fs_get_ta_dirname(TEEC_UUID *p_uuid, char *buffer, uint32_t len);
+void xtest_mutex_init(pthread_mutex_t *mutex);
+void xtest_mutex_destroy(pthread_mutex_t *mutex);
+void xtest_mutex_lock(pthread_mutex_t *mutex);
+void xtest_mutex_unlock(pthread_mutex_t *mutex);
+
+void xtest_barrier_init(pthread_barrier_t *barrier, unsigned count);
+void xtest_barrier_destroy(pthread_barrier_t *barrier);
+int xtest_barrier_wait(pthread_barrier_t *barrier);
+
#endif /*XTEST_HELPERS_H*/