#include <pthread.h>
#define DEFINE_MUTEX(m) pthread_mutex_t (m) = PTHREAD_MUTEX_INITIALIZER;
+#define DECLARE_MUTEX(m) extern pthread_mutex_t (m);
#define mutex_lock(m) pthread_mutex_lock(m)
#include <stdlib.h>
#define kmalloc(s, t) malloc(s)
-#define kzalloc(s, t) malloc(s)
+#define kzalloc(s, t) zmalloc(s)
#define kfree(p) free((void *)p)
#define kstrdup(s, t) strdup(s)
+#define zmalloc(s) calloc(1, s)
+
#define GFP_KERNEL
/* PRINTK */
#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)
/* ATOMICITY */
unsigned long prev;
switch (size) {
case 1:
- asm volatile("lock cmpxchgb %b1,%2"
+ 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"
+ 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"
+ 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"
+ asm volatile("lock; cmpxchgq %1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return old;
}
-#define local_cmpxchg cmpxchg
+//#define local_cmpxchg cmpxchg
+#define local_cmpxchg(l, o, n) (cmpxchg(&((l)->a.counter), (o), (n)))
+
#define atomic_long_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new)))
/* LOCAL OPS */
-typedef int local_t;
+//typedef int local_t;
+typedef struct
+{
+ atomic_long_t a;
+} local_t;
-static inline void local_inc(local_t *a)
+
+static inline void local_inc(local_t *l)
{
- (*a)++;
+ (l->a.counter)++;
}
-static inline void local_set(local_t *a, int v)
+static inline void local_set(local_t *l, int v)
{
- *a = v;
+ l->a.counter = v;
}
-static inline void local_add(int v, local_t *a)
+static inline void local_add(int v, local_t *l)
{
- *a += v;
+ l->a.counter += v;
}
-static int local_add_return(int v, local_t *a)
+static int local_add_return(int v, local_t *l)
{
- return *a += v;
+ return l->a.counter += v;
}
-static inline int local_read(local_t *a)
+static inline int local_read(local_t *l)
{
- return *a;
+ return l->a.counter;
}
return 0;
}
+
+/* LISTS */
+
+#define list_add_rcu list_add
+#define list_for_each_entry_rcu list_for_each_entry
+
+
+#define EXPORT_SYMBOL_GPL(a) /*nothing*/
+
+#define smp_processor_id() (-1)
+
#endif /* KERNELCOMPAT_H */