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

📄 semaphore-helper.h

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 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 + -