我对 Sparse 很陌生。在稀疏运行期间,我看到了这个警告:
警告:参数 2 中的类型不正确(不同的地址空间)
expected void volatile [noderef] <asn:2>*addr
got void *
基本上,这是因为以下原因而发生的:
struct context{
void __iomem *base;
};
readl(const volatile void __iomem* add){
....
....
}
function: foo(){
struct context *var;
readl(var->base); //---> here i got the above mentioned warning
}
为了解决这个问题,我做了以下操作:
struct context{
- void __iomem *base;
+ volatile void __iomem *base;
};
并删除警告。
我的问题: - 在这种情况下使用“volatile”是否有害。如果是,那么为什么? - 我认为我不应该将结构的成员设置为“易变”。但是,我们如何摆脱 Csparse 警告。
根据@ https://www.kernel.org/doc/Documentation/volatile-considered-harmful.txt 给出的文档 @ http://lwn.net/Articles/233482/ . 我们应该始终避免使用 volatile。
最佳答案
不,它没有害处。不知道为什么它应该或可能对什么有害?
如果您调用的代码需要一个 volatile
指针,那么传递一个非 volatile
指针是不正确的,因为调用上下文中的代码可能不是在这种情况下,适本地适应 volatile
值的要求。
关于c - 在 C 中使用 "volatile"有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338366/