📄 semaphore-helper.h
字号:
#ifndef _SPARC64_SEMAPHORE_HELPER_H#define _SPARC64_SEMAPHORE_HELPER_H/* * SMP- and interrupt-safe semaphore helper functions, sparc64 version. * * (C) Copyright 1999 David S. Miller (davem@redhat.com) * (C) Copyright 1999 Jakub Jelinek (jj@ultra.linux.cz) */#define wake_one_more(__sem) atomic_inc(&((__sem)->waking));#define waking_non_zero(__sem) \({ int __ret; \ __asm__ __volatile__( \"1: ldsw [%1], %%g5\n\t" \ "brlez,pt %%g5, 2f\n\t" \ " mov 0, %0\n\t" \ "sub %%g5, 1, %%g7\n\t" \ "cas [%1], %%g5, %%g7\n\t" \ "cmp %%g5, %%g7\n\t" \ "bne,pn %%icc, 1b\n\t" \ " mov 1, %0\n" \"2:" : "=&r" (__ret) \ : "r" (&((__sem)->waking)) \ : "g5", "g7", "cc", "memory"); \ __ret; \})#define waking_non_zero_interruptible(__sem, __tsk) \({ int __ret; \ __asm__ __volatile__( \"1: ldsw [%1], %%g5\n\t" \ "brlez,pt %%g5, 2f\n\t" \ " mov 0, %0\n\t" \ "sub %%g5, 1, %%g7\n\t" \ "cas [%1], %%g5, %%g7\n\t" \ "cmp %%g5, %%g7\n\t" \ "bne,pn %%icc, 1b\n\t" \ " mov 1, %0\n" \"2:" : "=&r" (__ret) \ : "r" (&((__sem)->waking)) \ : "g5", "g7", "cc", "memory"); \ if(__ret == 0 && signal_pending(__tsk)) { \ atomic_inc(&((__sem)->count)); \ __ret = -EINTR; \ } \ __ret; \})#define waking_non_zero_trylock(__sem) \({ int __ret; \ __asm__ __volatile__( \"1: ldsw [%1], %%g5\n\t" \ "brlez,pt %%g5, 2f\n\t" \ " mov 1, %0\n\t" \ "sub %%g5, 1, %%g7\n\t" \ "cas [%1], %%g5, %%g7\n\t" \ "cmp %%g5, %%g7\n\t" \ "bne,pn %%icc, 1b\n\t" \ " mov 0, %0\n" \"2:" : "=&r" (__ret) \ : "r" (&((__sem)->waking)) \ : "g5", "g7", "cc", "memory"); \ if(__ret == 1) \ atomic_inc(&((__sem)->count)); \ __ret; \})#endif /* !(_SPARC64_SEMAPHORE_HELPER_H) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -