X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=tests%2Fapi_gcc.h;h=be437cccba7d7a04458053a6a4506a1412051ad5;hp=872c873f9760da2b812c54aa19a2dc4d0c7894f0;hb=3d02c34dba0edc4a3554a3862a2ae96d77b3b4e8;hpb=1a43bbd8f98d5dcf1404b16ab4dc4bfddd65c3b0 diff --git a/tests/api_gcc.h b/tests/api_gcc.h index 872c873..be437cc 100644 --- a/tests/api_gcc.h +++ b/tests/api_gcc.h @@ -2,6 +2,8 @@ #ifndef _INCLUDE_API_H #define _INCLUDE_API_H +#include "../config.h" + /* * common.h: Common Linux kernel-isms. * @@ -289,13 +291,6 @@ cmpxchg(volatile long *ptr, long oldval, long newval) #include /* #include "atomic.h" */ -/* - * Compiler magic. - */ -#define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) - /* * Default machine parameters. */ @@ -461,13 +456,25 @@ static void wait_all_threads(void) } } +#ifndef HAVE_CPU_SET_T +typedef unsigned long cpu_set_t; +# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0) +# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0) +#endif + 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 */ } /* @@ -638,10 +645,6 @@ static void smp_init(void) #define LIST_POISON1 ((void *) 0x00100100) #define LIST_POISON2 ((void *) 0x00200200) -#define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) - #if 0 /* * Simple doubly linked list implementation.