+// SPDX-FileCopyrightText: 2006 Paul E. McKenney, IBM.
+//
+// SPDX-License-Identifier: GPL-2.0-only
+
#ifndef _INCLUDE_API_H
#define _INCLUDE_API_H
-#define _GNU_SOURCE
-#include "config.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 <urcu/compiler.h>
#include <urcu/arch.h>
-#include "cpuset.h"
/*
* Machine parameters.
#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 <stdio.h>
#include <stdlib.h>
typedef pthread_t thread_id_t;
-#define NR_THREADS 128
+#define NR_THREADS 4096
#define __THREAD_ID_MAP_EMPTY ((thread_id_t) 0)
#define __THREAD_ID_MAP_WAITING ((thread_id_t) 1)
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)
}
}
+#ifdef HAVE_SCHED_SETAFFINITY
static void run_on(int cpu)
{
-#if HAVE_SCHED_SETAFFINITY
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
- sched_setaffinity(0, &mask);
-#else
sched_setaffinity(0, sizeof(mask), &mask);
-#endif
-#endif /* HAVE_SCHED_SETAFFINITY */
}
+#else
+
+static void run_on(int cpu __attribute__((unused)))
+{}
+#endif /* HAVE_SCHED_SETAFFINITY */
/*
* timekeeping -- very crude -- should use MONOTONIC...
*/
+static inline
long long get_microseconds(void)
{
struct timeval tv;
struct { \
__typeof__(type) v \
__attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
- } __per_thread_##name[NR_THREADS];
+ } __per_thread_##name[NR_THREADS]
#define DECLARE_PER_THREAD(type, name) extern DEFINE_PER_THREAD(type, name)
#define per_thread(name, thread) __per_thread_##name[thread].v