⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spinlock.h

📁 xen虚拟机源代码安装包
💻 H
字号:
#ifndef __SPINLOCK_H__#define __SPINLOCK_H__#include <xen/config.h>#include <asm/system.h>#define spin_lock_irqsave(lock, flags) \    do { local_irq_save(flags); spin_lock(lock); } while ( 0 )#define spin_lock_irq(lock) \    do { local_irq_disable(); spin_lock(lock); } while ( 0 )#define read_lock_irqsave(lock, flags) \    do { local_irq_save(flags); read_lock(lock); } while ( 0 )#define read_lock_irq(lock) \    do { local_irq_disable(); read_lock(lock); } while ( 0 )#define write_lock_irqsave(lock, flags) \    do { local_irq_save(flags); write_lock(lock); } while ( 0 )#define write_lock_irq(lock) \    do { local_irq_disable(); write_lock(lock); } while ( 0 )#define spin_unlock_irqrestore(lock, flags) \    do { spin_unlock(lock); local_irq_restore(flags); } while ( 0 )#define spin_unlock_irq(lock) \    do { spin_unlock(lock); local_irq_enable(); } while ( 0 )#define read_unlock_irqrestore(lock, flags) \    do { read_unlock(lock); local_irq_restore(flags); } while ( 0 )#define read_unlock_irq(lock) \    do { read_unlock(lock); local_irq_enable(); } while ( 0 )#define write_unlock_irqrestore(lock, flags) \    do { write_unlock(lock); local_irq_restore(flags); } while ( 0 )#define write_unlock_irq(lock) \    do { write_unlock(lock); local_irq_enable(); } while ( 0 )#ifdef CONFIG_SMP#include <asm/spinlock.h>#else#if (__GNUC__ > 2)typedef struct { } spinlock_t;#define SPIN_LOCK_UNLOCKED /*(spinlock_t)*/ { }#elsetypedef struct { int gcc_is_buggy; } spinlock_t;#define SPIN_LOCK_UNLOCKED /*(spinlock_t)*/ { 0 }#endif#define spin_lock_init(lock)             do { } while(0)#define spin_is_locked(lock)             (0)#define _raw_spin_lock(lock)             (void)(lock)#define _raw_spin_trylock(lock)          ({1; })#define _raw_spin_unlock(lock)           do { } while(0)#define _raw_spin_lock_recursive(lock)   do { } while(0)#define _raw_spin_unlock_recursive(lock) do { } while(0)#if (__GNUC__ > 2)typedef struct { } rwlock_t;#define RW_LOCK_UNLOCKED /*(rwlock_t)*/ { }#elsetypedef struct { int gcc_is_buggy; } rwlock_t;#define RW_LOCK_UNLOCKED /*(rwlock_t)*/ { 0 }#endif#define rwlock_init(lock)            do { } while(0)#define _raw_read_lock(lock)         (void)(lock) /* Not "unused variable". */#define _raw_read_unlock(lock)       do { } while(0)#define _raw_write_lock(lock)        (void)(lock) /* Not "unused variable". */#define _raw_write_unlock(lock)      do { } while(0)#endif#define spin_lock(_lock)             _raw_spin_lock(_lock)#define spin_trylock(_lock)          _raw_spin_trylock(_lock)#define spin_unlock(_lock)           _raw_spin_unlock(_lock)#define spin_lock_recursive(_lock)   _raw_spin_lock_recursive(_lock)#define spin_unlock_recursive(_lock) _raw_spin_unlock_recursive(_lock)#define read_lock(_lock)             _raw_read_lock(_lock)#define read_unlock(_lock)           _raw_read_unlock(_lock)#define write_lock(_lock)            _raw_write_lock(_lock)#define write_unlock(_lock)          _raw_write_unlock(_lock)/* Ensure a lock is quiescent between two critical operations. */static inline void spin_barrier(spinlock_t *lock){    do { mb(); } while ( spin_is_locked(lock) );    mb();}#define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED#define DEFINE_RWLOCK(x) rwlock_t x = RW_LOCK_UNLOCKED#endif /* __SPINLOCK_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -