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

📄 percpu.h

📁 Axis 221 camera embedded programing interface
💻 H
字号:
#ifndef __LINUX_PERCPU_H#define __LINUX_PERCPU_H#include <linux/spinlock.h> /* For preempt_disable() */#include <linux/slab.h> /* For kmalloc() */#include <linux/smp.h>#include <linux/string.h> /* For memset() */#include <linux/cpumask.h>#include <asm/percpu.h>/* Enough to cover all DEFINE_PER_CPUs in kernel, including modules. */#ifndef PERCPU_ENOUGH_ROOM#define PERCPU_ENOUGH_ROOM 32768#endif/* * Must be an lvalue. Since @var must be a simple identifier, * we force a syntax error here if it isn't. */#define get_cpu_var(var) (*({				\	extern int simple_identifier_##var(void);	\	preempt_disable();				\	&__get_cpu_var(var); }))#define put_cpu_var(var) preempt_enable()#ifdef CONFIG_SMPstruct percpu_data {	void *ptrs[NR_CPUS];};#define __percpu_disguise(pdata) (struct percpu_data *)~(unsigned long)(pdata)/*  * Use this to get to a cpu's version of the per-cpu object dynamically * allocated. Non-atomic access to the current CPU's version should * probably be combined with get_cpu()/put_cpu(). */ #define percpu_ptr(ptr, cpu)                              \({                                                        \        struct percpu_data *__p = __percpu_disguise(ptr); \        (__typeof__(ptr))__p->ptrs[(cpu)];	          \})extern void *percpu_populate(void *__pdata, size_t size, gfp_t gfp, int cpu);extern void percpu_depopulate(void *__pdata, int cpu);extern int __percpu_populate_mask(void *__pdata, size_t size, gfp_t gfp,				  cpumask_t *mask);extern void __percpu_depopulate_mask(void *__pdata, cpumask_t *mask);extern void *__percpu_alloc_mask(size_t size, gfp_t gfp, cpumask_t *mask);extern void percpu_free(void *__pdata);#else /* CONFIG_SMP */#define percpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); })static inline void percpu_depopulate(void *__pdata, int cpu){}static inline void __percpu_depopulate_mask(void *__pdata, cpumask_t *mask){}static inline void *percpu_populate(void *__pdata, size_t size, gfp_t gfp,				    int cpu){	return percpu_ptr(__pdata, cpu);}static inline int __percpu_populate_mask(void *__pdata, size_t size, gfp_t gfp,					 cpumask_t *mask){	return 0;}static __always_inline void *__percpu_alloc_mask(size_t size, gfp_t gfp, cpumask_t *mask){	return kzalloc(size, gfp);}static inline void percpu_free(void *__pdata){	kfree(__pdata);}#endif /* CONFIG_SMP */#define percpu_populate_mask(__pdata, size, gfp, mask) \	__percpu_populate_mask((__pdata), (size), (gfp), &(mask))#define percpu_depopulate_mask(__pdata, mask) \	__percpu_depopulate_mask((__pdata), &(mask))#define percpu_alloc_mask(size, gfp, mask) \	__percpu_alloc_mask((size), (gfp), &(mask))#define percpu_alloc(size, gfp) percpu_alloc_mask((size), (gfp), cpu_online_map)/* (legacy) interface for use without CPU hotplug handling */#define __alloc_percpu(size)	percpu_alloc_mask((size), GFP_KERNEL, \						  cpu_possible_map)#define alloc_percpu(type)	(type *)__alloc_percpu(sizeof(type))#define free_percpu(ptr)	percpu_free((ptr))#define per_cpu_ptr(ptr, cpu)	percpu_ptr((ptr), (cpu))#endif /* __LINUX_PERCPU_H */

⌨️ 快捷键说明

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