@ptentp: Pointer to a COPY of the first page table entry whose flags we update
if appropriate.
And then update the description of folio_pte_batch_flags() both the brief one to
add 'updates ptentp to set flags if appropriate' and maybe in the larger
description bit.
[...]
VM_WARN_ON_FOLIO(!pte_present(pte), folio);
VM_WARN_ON_FOLIO(!folio_test_large(folio) || max_nr < 1, folio);
VM_WARN_ON_FOLIO(page_folio(pfn_to_page(pte_pfn(pte))) != folio, folio);
+ VM_WARN_ON(virt_addr_valid(ptentp) && PageTable(virt_to_page(ptentp)));
Hm so if !virt_addr_valid(ptentp) we're ok? :P
I had the same question when writing that. Obviously,
PageTable(virt_to_page(ptentp)) faulted when called on something on the
stack. (ran into that ... :) )
Maybe "VM_WARN_ON(virt_addr_valid(ptentp));" would work as well, but I am
not sure how that function behaves on all architectures ...
Well you wouldn't want to limit callers to only working on stack values...
I guess just add a comment, or rather update the the one below to something like:
/*
* Ensure this is a pointer to a copy not a pointer into a page table.
* If this is a stack value, it won't be a valid virtual address, but that's
* fine because it also cannot be pointing into the page table.
*/
Which would clarify.