什么是"对"在最新的内核中使用GFP_ZERO的方法?

时间:2013-11-03 04:40:44

标签: memory linux-kernel kmalloc

我发现linux 3.0+ GFP_ZERO不再在标题中定义。

我在gfp.h中找到的只是,

/* Plain integer GFP bitmasks. Do not use this directly. */
...
#define ___GFP_ZERO     0x8000u

我检查了那些“导出”位掩码,其中一个使用GFP_ZERO

作者说Do not use this directly,那么,我应该如何获得归零页面

kmalloc + memset是我现在唯一的选择吗?

1 个答案:

答案 0 :(得分:3)

我认为零的预期方式是kzalloc():

https://www.kernel.org/doc/htmldocs/kernel-api/API-kzalloc.html

但很明显alloc + memset也可以。

<强>更新

来自CFQ的示例差异显示预期的更新:

-   cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node);
+   cfqd = kzalloc_node(sizeof(*cfqd), GFP_KERNEL, q->node);

另见:https://stackoverflow.com/a/12095263/2908724