gpt4 book ai didi

linux - Linux 内核 2.6.27 中的 per-cpu 变量定义

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:43 26 4
gpt4 key购买 nike

在 2.6.27 中有定义 per-cpu 变量的宏 DEFINE_PER_CPU(type, variable)。

我可以使用这个宏在全局范围内定义一个变量。但是如果它是一个结构内部的变量,我在编译时会看到一个错误..

例如:

struct port_stats {
... ....
DEFINE_PER_CPU(long *, stats);
}

我看到的错误是..

*错误:“per_cpu__stats”不允许使用节属性*

如果在结构之外,相同的定义是可以的。不确定这个错误是什么意思。有什么建议 ?

最佳答案

如果你想在 Linux 内核的 struct 中定义一个 per-cpu 变量,你需要让它成为一个指向所需类型的指针(所以,在这种情况下 long * *) 与 __percpu 属性:

struct port_stats {
... ....
long __percpu **stats;
}

(在缺少 __percpu 宏的旧内核上,只需将其声明为 long **stats; 并注释为指向 per- CPU 变量)。

然后当您创建结构的实例时,使用 alloc_percpu() 分配 per-cpu 变量(这可能会失败):

pstats->stats = alloc_percpu(long *);

if (!pstats->stats)
return -ENOMEM;

然后要访问 percpu 实例,您需要使用 get_cpu()put_cpu():

long **stats;

stats = per_cpu_ptr(pstats->stats, get_cpu());

/* Read or write *stats, the per-cpu (long *) value for this cpu */

put_cpu();

释放结构时,还必须执行 free_percpu(pstats->stats);

关于linux - Linux 内核 2.6.27 中的 per-cpu 变量定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com