local.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 74 行

H
74
字号
#ifndef _ARCH_X8664_LOCAL_H#define _ARCH_X8664_LOCAL_H#include <linux/percpu.h>typedef struct{	volatile unsigned int counter;} local_t;#define LOCAL_INIT(i)	{ (i) }#define local_read(v)	((v)->counter)#define local_set(v,i)	(((v)->counter) = (i))static __inline__ void local_inc(local_t *v){	__asm__ __volatile__(		"incl %0"		:"=m" (v->counter)		:"m" (v->counter));}static __inline__ void local_dec(local_t *v){	__asm__ __volatile__(		"decl %0"		:"=m" (v->counter)		:"m" (v->counter));}static __inline__ void local_add(unsigned long i, local_t *v){	__asm__ __volatile__(		"addl %1,%0"		:"=m" (v->counter)		:"ir" (i), "m" (v->counter));}static __inline__ void local_sub(unsigned long i, local_t *v){	__asm__ __volatile__(		"subl %1,%0"		:"=m" (v->counter)		:"ir" (i), "m" (v->counter));}/* On x86, these are no better than the atomic variants. */#define __local_inc(l)		local_inc(l)#define __local_dec(l)		local_dec(l)#define __local_add(i,l)	local_add((i),(l))#define __local_sub(i,l)	local_sub((i),(l))/* Use these for per-cpu local_t variables: on some archs they are * much more efficient than these naive implementations.  Note they take * a variable, not an address. * * This could be done better if we moved the per cpu data directly * after GS. */#define cpu_local_read(v)	local_read(&__get_cpu_var(v))#define cpu_local_set(v, i)	local_set(&__get_cpu_var(v), (i))#define cpu_local_inc(v)	local_inc(&__get_cpu_var(v))#define cpu_local_dec(v)	local_dec(&__get_cpu_var(v))#define cpu_local_add(i, v)	local_add((i), &__get_cpu_var(v))#define cpu_local_sub(i, v)	local_sub((i), &__get_cpu_var(v))#define __cpu_local_inc(v)	cpu_local_inc(v)#define __cpu_local_dec(v)	cpu_local_dec(v)#define __cpu_local_add(i, v)	cpu_local_add((i), (v))#define __cpu_local_sub(i, v)	cpu_local_sub((i), (v))#endif /* _ARCH_I386_LOCAL_H */

⌨️ 快捷键说明

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