Messages in this thread | | | Date | Mon, 7 Mar 2022 11:27:59 +0800 | Subject | Re: [PATCH v2 2/2] kfence: Alloc kfence_pool after system startup | From | Tianchen Ding <> |
| |
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@linux.alibaba.com> >> 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 >
| |