local.h
来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 71 行
H
71 行
#ifndef _ARCH_I386_LOCAL_H#define _ARCH_I386_LOCAL_H#include <linux/percpu.h>typedef struct{ volatile unsigned long 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. */#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 + -
显示快捷键?