X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=share%2Fkernelcompat.h;h=052f7688bb9f36d804529eca4ca65176fc04c428;hb=1ae7f0744f280e97ab1a2adc548b8fd9f2cb21a4;hp=9139e75275ddf4c8c3e86d7d30c0916b32233b6d;hpb=98963de4a2dfae12d8aafa0f9a6d97cf4a44e12d;p=ust.git diff --git a/share/kernelcompat.h b/share/kernelcompat.h index 9139e75..052f768 100644 --- a/share/kernelcompat.h +++ b/share/kernelcompat.h @@ -1,6 +1,8 @@ #ifndef KERNELCOMPAT_H #define KERNELCOMPAT_H +#include + #include "compiler.h" #include @@ -40,12 +42,12 @@ static inline long IS_ERR(const void *ptr) /* FIXED SIZE INTEGERS */ -#include +//#include -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef uint64_t u64; +//typedef uint8_t u8; +//typedef uint16_t u16; +//typedef uint32_t u32; +//typedef uint64_t u64; #define min_t(type, x, y) ({ \ type __min1 = (x); \ @@ -98,28 +100,20 @@ typedef int spinlock_t; /* MEMORY BARRIERS */ -#define smp_rmb() do {} while(0) -#define smp_wmb() do {} while(0) -#define smp_mb() do {} while(0) #define smp_mb__after_atomic_inc() do {} while(0) -#define read_barrier_depends() do {} while(0) -#define smp_read_barrier_depends() do {} while(0) - /* RCU */ -#define rcu_assign_pointer(a, b) do {} while(0) -#define call_rcu_sched(a,b) do {} while(0) -#define rcu_barrier_sched() do {} while(0) -#define rcu_read_lock_sched_notrace() do{} while (0) -#define rcu_read_unlock_sched_notrace() do{} while (0) +#include "urcu.h" +#define call_rcu_sched(a,b) b(a); synchronize_rcu() +#define rcu_barrier_sched() do {} while(0) /* this nop is ok if call_rcu_sched does a synchronize_rcu() */ +#define rcu_read_lock_sched_notrace() rcu_read_lock() +#define rcu_read_unlock_sched_notrace() rcu_read_unlock() /* ATOMICITY */ #include -typedef struct { sig_atomic_t counter; } atomic_t; - static inline int atomic_dec_and_test(atomic_t *p) { (p->counter)--; @@ -147,45 +141,12 @@ static int atomic_read(atomic_t *p) #include "asm.h" -#define __xg(x) ((volatile long *)(x)) +//#define __xg(x) ((volatile long *)(x)) #define cmpxchg(ptr, o, n) \ ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), \ (unsigned long)(n), sizeof(*(ptr)))) -static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, - unsigned long new, int size) -{ - unsigned long prev; - switch (size) { - case 1: - asm volatile("lock; cmpxchgb %b1,%2" - : "=a"(prev) - : "q"(new), "m"(*__xg(ptr)), "0"(old) - : "memory"); - return prev; - case 2: - asm volatile("lock; cmpxchgw %w1,%2" - : "=a"(prev) - : "r"(new), "m"(*__xg(ptr)), "0"(old) - : "memory"); - return prev; - case 4: - asm volatile("lock; cmpxchgl %k1,%2" - : "=a"(prev) - : "r"(new), "m"(*__xg(ptr)), "0"(old) - : "memory"); - return prev; - case 8: - asm volatile("lock; cmpxchgq %1,%2" - : "=a"(prev) - : "r"(new), "m"(*__xg(ptr)), "0"(old) - : "memory"); - return prev; - } - return old; -} - //#define local_cmpxchg cmpxchg #define local_cmpxchg(l, o, n) (cmpxchg(&((l)->a.counter), (o), (n)))