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

📄 spinlock.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 H
字号:
#ifndef __ASM_SPINLOCK_H#define __ASM_SPINLOCK_H#ifndef __SMP__/* * To be safe, we assume the only compiler that can cope with * empty initialisers is EGCS. */#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 90))#define EMPTY_INIT_OK#endif/* * Your basic spinlocks, allowing only a single CPU anywhere */#ifdef EMPTY_INIT_OK  typedef struct { } spinlock_t;# define SPIN_LOCK_UNLOCKED (spinlock_t) { }#else  typedef unsigned char spinlock_t;# define SPIN_LOCK_UNLOCKED 0#endif#define spin_lock_init(lock)	do { } while(0)#define spin_lock(lock)		do { } while(0)#define spin_trylock(lock)	do { } while(0)#define spin_unlock_wait(lock)	do { } while(0)#define spin_unlock(lock)	do { } while(0)#define spin_lock_irq(lock)	cli()#define spin_unlock_irq(lock)	sti()#define spin_lock_irqsave(lock, flags) \	do { __save_flags_cli(flags); } while (0)#define spin_unlock_irqrestore(lock, flags) \	restore_flags(flags)/* * Read-write spinlocks, allowing multiple readers * but only one writer. * * NOTE! it is quite common to have readers in interrupts * but no interrupt writers. For those circumstances we * can "mix" irq-safe locks - any writer needs to get a * irq-safe write-lock, but readers can get non-irqsafe * read-locks. */#ifdef EMPTY_INIT_OK  typedef struct { } rwlock_t;# define RW_LOCK_UNLOCKED (rwlock_t) { }#else  typedef unsigned char rwlock_t;# define RW_LOCK_UNLOCKED 0#endif#define read_lock(lock)		do { } while(0)#define read_unlock(lock)	do { } while(0)#define write_lock(lock)	do { } while(0)#define write_unlock(lock)	do { } while(0)#define read_lock_irq(lock)	cli()#define read_unlock_irq(lock)	sti()#define write_lock_irq(lock)	cli()#define write_unlock_irq(lock)	sti()#define read_lock_irqsave(lock, flags)	\	do { __save_flags_cli(flags); } while (0)#define read_unlock_irqrestore(lock, flags) \	restore_flags(flags)#define write_lock_irqsave(lock, flags)	\	do { __save_flags_cli(flags); } while (0)#define write_unlock_irqrestore(lock, flags) \	restore_flags(flags)#else#error ARM architecture does not support spin locks#endif /* SMP */#endif /* __ASM_SPINLOCK_H */

⌨️ 快捷键说明

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