多CPU支持下的 percpu 变量分析

本文详细解析了在多CPU系统中如何处理percpu变量,包括使用per_cpu_offset获取每个CPU的变量偏移量,per_cpu_var声明变量,以及通过汇编指令进行高效读写操作。同时,介绍了在不同架构下的实现差异,如32位和64位CPU的不同处理方式。
摘要由CSDN通过智能技术生成

/*

 *使用一个数组,来记录对于每个特定的CPU的变量的地址偏移量。

 *有些CPU有自己独特的技术来实现。

 */

#ifndef __per_cpu_offset
extern unsigned long __per_cpu_offset[NR_CPUS];

#define per_cpu_offset(x) (__per_cpu_offset[x])
#endif

 

/*

 *使用标准方式声明多CPU共存变量时,其实是声明了per_cpu__varname这个变量名的变量。
 */
#define per_cpu_var(var) per_cpu__##var

 

/*
 * 加入偏移量来取得最终的某CPU变量的位置。

 *
 * S390有独有的技术来实现这种偏移功能。
 */
#ifndef SHIFT_PERCPU_PTR
#define SHIFT_PERCPU_PTR(__p, __offset) RELOC_HIDE((__p), (__offset))
#endif

 

/*

 *RELOC_HIDE 使用ptr变量类型指针后加入相就的偏移量。

 */

#ifndef RELOC_HIDE
# define RELOC_HIDE(ptr, off)     /
  ({ unsigned long __ptr;     /
     __ptr = (unsigned long)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值