1 #ifndef __SMP_H 2 #define __SMP_H 3 4 #define mb() asm volatile("mfence":::"memory") 5 #define rmb() asm volatile("lfence":::"memory") 6 #define wmb() asm volatile("sfence" ::: "memory") 7 8 struct spinlock { 9 int v; 10 }; 11 12 void smp_init(void); 13 14 int cpu_count(void); 15 int smp_id(void); 16 void on_cpu(int cpu, void (*function)(void *data), void *data); 17 void on_cpu_async(int cpu, void (*function)(void *data), void *data); 18 void spin_lock(struct spinlock *lock); 19 void spin_unlock(struct spinlock *lock); 20 21 #endif 22