X-Git-Url: https://git.lttng.org/?p=urcu.git;a=blobdiff_plain;f=tests%2Fcommon%2Fapi.h;h=a260463ad09ea212bb7ee4517a2fd995f21b2d74;hp=4fe6969f424652e5d18081ae285d621c74d785e4;hb=HEAD;hpb=a142df4e35dcf835439bf6714e49e95a2a68f7a6 diff --git a/tests/common/api.h b/tests/common/api.h index 4fe6969..ec3ce1e 100644 --- a/tests/common/api.h +++ b/tests/common/api.h @@ -1,31 +1,20 @@ +// SPDX-FileCopyrightText: 2006 Paul E. McKenney, IBM. +// +// SPDX-License-Identifier: GPL-2.0-only + #ifndef _INCLUDE_API_H #define _INCLUDE_API_H /* * common.h: Common Linux kernel-isms. * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; but version 2 of the License only due - * to code included from the Linux kernel. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright (c) 2006 Paul E. McKenney, IBM. - * * Much code taken from the Linux kernel. For such code, the option * to redistribute under later versions of GPL might not be available. */ #include #include +#include /* * Machine parameters. @@ -34,27 +23,6 @@ #define ____cacheline_internodealigned_in_smp \ __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))) -/* - * api_pthreads.h: API mapping to pthreads environment. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. However, please note that much - * of the code in this file derives from the Linux kernel, and that such - * code may not be available except under GPLv2. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright (c) 2006 Paul E. McKenney, IBM. - */ #include #include @@ -135,7 +103,7 @@ static int __smp_thread_id(void) thread_id_t tid = pthread_self(); for (i = 0; i < NR_THREADS; i++) { - if (__thread_id_map[i] == tid) { + if (uatomic_read(&__thread_id_map[i]) == tid) { long v = i + 1; /* must be non-NULL. */ if (pthread_setspecific(thread_id_key, (void *)v) != 0) { @@ -165,7 +133,7 @@ static int smp_thread_id(void) id = pthread_getspecific(thread_id_key); if (id == NULL) return __smp_thread_id(); - return (long)(id - 1); + return ((long) id - 1); } static thread_id_t create_thread(void *(*func)(void *), void *arg) @@ -184,12 +152,13 @@ static thread_id_t create_thread(void *(*func)(void *), void *arg) exit(-1); } __thread_id_map[i] = __THREAD_ID_MAP_WAITING; - spin_unlock(&__thread_id_map_mutex); + if (pthread_create(&tid, NULL, func, arg) != 0) { perror("create_thread:pthread_create"); exit(-1); } - __thread_id_map[i] = tid; + uatomic_set(&__thread_id_map[i], tid); + spin_unlock(&__thread_id_map_mutex); return tid; } @@ -199,7 +168,7 @@ static void *wait_thread(thread_id_t tid) void *vp; for (i = 0; i < NR_THREADS; i++) { - if (__thread_id_map[i] == tid) + if (uatomic_read(&__thread_id_map[i]) == tid) break; } if (i >= NR_THREADS){ @@ -211,7 +180,7 @@ static void *wait_thread(thread_id_t tid) perror("wait_thread:pthread_join"); exit(-1); } - __thread_id_map[i] = __THREAD_ID_MAP_EMPTY; + uatomic_set(&__thread_id_map[i], __THREAD_ID_MAP_EMPTY); return vp; }