clear_pages(9)
π clear_pages β the kernel API manual, bestie edition β¨
okay so this is a page from the Kernel API Manual (that's the manual name, we're just folding it in here π) and it's about clear_pages. Get comfy, this one's short but there are rules.
πΈ NAME πΈ
clear_pages β clears a page range for kernel-internal use. That's it, that's the whole job. π
β¨ SYNOPSIS β¨
void clear_pages (void *addr , unsigned int npages );
like. look at her. no return value, she just does it. π
π«Ά ARGUMENTS π«Ά
addrβ start address. where the clearing begins, bestie πnpagesβ number of pages. how many of them we're clearing β¨
π¦ DESCRIPTION π¦
lowkey let me say the most important thing first: if you're clearing a page range that's gonna get mapped to user space, use clear_user_pages instead. not this one. this one is not for that. iykyk π
second thing, and this is the one people forget: it does absolutely no exception handling. none. zero. not a single one. π
and here's the vibe check on scheduling β this is the part that gets people, so listen up π
even though the clearing operation is preemptible, clear_pages does not call cond_resched to check whether rescheduling is required. and on architectures where it reduces to a few long-running instructions, it might not even be able to. π«
so what does that mean for you?
- Under preemptible models? literally not a problem, you're fine, go off π
- Under cooperatively scheduled models? different story. the caller is expected to limit
npagesto no more thanPROCESS_PAGES_NON_PREEMPT_BATCH. that's on you, not on her. π
fr fr do not skip the PROCESS_PAGES_NON_PREEMPT_BATCH limit in cooperatively scheduled models. it's not a suggestion, it's the whole contract β¨
π SEE ALSO π
the absolute iconic lineup of friends, all of them, in order, no skips πβ¨:
Kernel file ./include/linux/mm.hβ the file itself, our source of truth πfolio_page_idx(9)vma_flag_t(9)fault_flag_allow_retry_first(9)vma_kernel_pagesize(9)folio_order(9)folio_reset_order(9)folio_mapcount(9)folio_mapped(9)thp_order(9)thp_size(9)folio_get(9)folio_put(9)folio_put_refs(9)folios_put(9)vma_flags_is_cow_mapping(9)vma_is_cow_mapping(9)vma_desc_is_cow_mapping(9)folio_pfn(9)folio_mk_pte(9)folio_mk_pmd(9)folio_mk_pud(9)folio_maybe_dma_pinned(9)is_zero_page(9)is_zero_folio(9)folio_nr_pages(9)folio_next(9)folio_shift(9)folio_size(9)folio_maybe_mapped_shared(9)folio_expected_ref_count(9)zap_vma(9)ptdesc_address(9)ptdesc_set_kernel(9)ptdesc_clear_kernel(9)ptdesc_test_kernel(9)pagetable_alloc(9)pagetable_free(9)vma_lookup(9)vma_start_pgoff(9)vma_end_pgoff(9)vma_last_pgoff(9)vma_start_anon_pgoff(9)vma_end_anon_pgoff(9)vma_last_anon_pgoff(9)mmap_action_remap(9)mmap_action_remap_full(9)mmap_action_ioremap(9)mmap_action_ioremap_full(9)mmap_action_simple_ioremap(9)mmap_action_map_kernel_pages(9)mmap_action_map_kernel_pages_full(9)range_is_subset(9)range_in_vma(9)range_in_vma_desc(9)
okay and that's the page!! π this one lives over in ./include/linux and the date on it is October 2026 β so like, mark your calendar bestie, that's the version you're reading πβ¨ slay, go clear some pages (kernel-internal ones only, please) π¦π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms