On 06/02/23 21:17, Matthew Wilcox wrote:
On Fri, Jun 02, 2023 at 09:54:08AM +0800, Peng Zhang wrote:That may not be technically true in some arch specific cases such as
From: ZhangPeng <zhangpeng362@xxxxxxxxxx>Do we? It's my understanding (and I am far from an expert here ...)
We can replace nine implict calls to compound_head() with one by using
old_folio. However, we still need to keep old_page because we need to
know which page in the folio we are copying.
that the 'pte_t *' we are passed *inside hugetlbfs* is not in fact a pte
pointer at all but actually a pmd or pud pointer.
arm64 with CONT_PTES and CONT_PMDS.
See how we do this:However, it is true that ptep will always be associated with the head
pte_t pte = huge_ptep_get(ptep);
and so the page we get back is always a head page, and we can go
directly to a folio. ie this is different from the THP cases.
page. This is because the associated virtual address is hugetlb page
aligned.
So, I agree with Matthew that there is no need to keep old_page.
Note that if old_page was NOT the head page, then
copy_user_huge_page(&new_folio->page, old_page, address, vma,
pages_per_huge_page(h));
would write beyond the end of range as it assumes old_page is head.