为什么ioremap分配的区域有这么大的对齐?

时间:2014-01-31 09:05:48

标签: linux-kernel ram ioremap

我的代码无法为4M区域调用ioremap()。试图调试原因,我发现如果你调用ioremap,它将尝试分配具有非常大的对齐的连续地址(取决于你想要分配的区域的大小)。计算此对齐的代码位于__get_vm_area_node()函数(mm/vmalloc.c)中,它看起来像这样:

if (flags & VM_IOREMAP) {
    int bit = fls(size);

    if (bit > IOREMAP_MAX_ORDER)
        bit = IOREMAP_MAX_ORDER;
    else if (bit < PAGE_SHIFT)
        bit = PAGE_SHIFT;

    align = 1ul << bit;
}

在ARM上,IOREMAP_MAX_ORDER定义为23。这意味着在我的情况下,ioremap不仅需要vmalloc区域中的4M继续寻址,而且还必须与4M对齐。

我无法找到有关为何需要此对齐的任何信息。我甚至尝试使用git blame来查看引入此更改的提交,但似乎代码比git历史旧,所以我找不到任何内容。

0 个答案:

没有答案