Re: [PATCH v2 2/2] kfence: Alloc kfence_pool after system startup

From: Tianchen Ding
Date: Sun Mar 06 2022 - 22:28:07 EST


On 2022/3/7 10:23, Tianchen Ding wrote:
On 2022/3/7 07:52, Marco Elver wrote:
On Sat, 5 Mar 2022 at 15:49, Tianchen Ding <dtcccc@xxxxxxxxxxxxxxxxx> wrote:
[...]
+static int kfence_init_late(void)
+{
+       const unsigned long nr_pages = KFENCE_POOL_SIZE / PAGE_SIZE;
+       struct page *pages;
+
+       pages = alloc_contig_pages(nr_pages, GFP_KERNEL, first_online_node, NULL);

mm/kfence/core.c:836:17: error: implicit declaration of function ‘alloc_contig_pages’ [-Werror=implicit-function-declaration]

This doesn't build without CMA. See ifdef CONFIG_CONTIG_ALLOC in
gfp.h, which declares alloc_contig_pages.

Will alloc_pages() work as you expect? If so, perhaps only use
alloc_contig_pages() #ifdef CONFIG_CONTIG_ALLOC.


alloc_pages() will be fine. We could free "tail" pages after inited.
Will send v3 soon.


Oh, I remember why we use alloc_contig_pages()...
alloc_pages() (or alloc_pages_exact()) only support pages less than MAX_ORDER (default 11). The alloc would fail when KFENCE_NUM_OBJECTS >= 512.

So the design would be:
ifndef CONFIG_CONTIG_ALLOC and KFENCE_NUM_OBJECTS exceeds MAX_ORDER, we do not support alloc KFENCE pool after system startup.

Thanks,
-- Marco