gpt4 book ai didi

c - 如果我使用两个 alloc_pages 进行检查,则 alloc_pages 返回的地址相同

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

我正在尝试分析 alloc_pages() 功能。我知道它返回它指向的第一页结构的物理地址。我想用下面的代码确认一下。

struct page *page;
page = alloc_pages(GFP_KERNEL, 0);
pr_info("physical address GFP_KERNEL - %p\n", page);
page = alloc_pages(GFP_HIGHUSER, 2);
pr_info("physical address of GFP_High - %p\n", page);

如您所见,我使用了 alloc_pages() 两次,但返回的地址相同。我不应该得到一个不同的地址吗?

我从 &page -> pr_info 函数中的页面编辑它

最佳答案

应该直接打印出page的值,而不是page的地址。

如下:

struct page *page;
page = alloc_pages(GFP_KERNEL, 0);
pr_info("physical address GFP_KERNEL - %p\n", page);

page = alloc_pages(GFP_HIGHUSER, 2);
pr_info("physical address of GFP_High - %p\n", page);

模块完整代码:

#include <linux/kernel.h>
#include <linux/module.h>

struct page *page1;
struct page *page2;

static int __init test_alloc_pages_init(void)
{
struct page *page;
page = alloc_pages(GFP_KERNEL, 0);
pr_info("physical address GFP_KERNEL - %p\n", page);
page1 = page;

page = alloc_pages(GFP_HIGHUSER, 2);
pr_info("physical address of GFP_High - %p\n", page);
page2 = page;

return 0;
}

static void __exit test_alloc_pages_exit(void)
{
if (page1) {
pr_info("free page1: %p\n", page1);
__free_pages(page1, 0);
}
if (page2) {
pr_info("free page2: %p\n", page2);
__free_pages(page2, 2);
}
return;
}

module_init(test_alloc_pages_init);
module_exit(test_alloc_pages_exit);

MODULE_LICENSE("GPL");

dmesg 信息:

[117582.127432] physical address GFP_KERNEL - ffffea002e1cf2c0
[117582.127434] physical address of GFP_High - ffffea002e0ec500
[117584.214921] free page1: ffffea002e1cf2c0
[117584.214922] free page2: ffffea002e0ec500

关于c - 如果我使用两个 alloc_pages 进行检查,则 alloc_pages 返回的地址相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014058/

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