17d36db35SAvi Kivity #ifndef __SMP_H 27d36db35SAvi Kivity #define __SMP_H 37d36db35SAvi Kivity 4*762b9476SJason Wang #define mb() asm volatile("mfence":::"memory") 5*762b9476SJason Wang #define rmb() asm volatile("lfence":::"memory") 6*762b9476SJason Wang #define wmb() asm volatile("sfence" ::: "memory") 7*762b9476SJason Wang 87d36db35SAvi Kivity struct spinlock { 97d36db35SAvi Kivity int v; 107d36db35SAvi Kivity }; 117d36db35SAvi Kivity 127d36db35SAvi Kivity void smp_init(void); 137d36db35SAvi Kivity 147d36db35SAvi Kivity int cpu_count(void); 157d36db35SAvi Kivity int smp_id(void); 167d36db35SAvi Kivity void on_cpu(int cpu, void (*function)(void *data), void *data); 177d36db35SAvi Kivity void on_cpu_async(int cpu, void (*function)(void *data), void *data); 187d36db35SAvi Kivity void spin_lock(struct spinlock *lock); 197d36db35SAvi Kivity void spin_unlock(struct spinlock *lock); 207d36db35SAvi Kivity 217d36db35SAvi Kivity #endif 22