Re: [PATCH v2] mm: make page_mapped_in_vma() hugetlb walk aware

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 26.02.25 16:49, David Hildenbrand wrote:
On 24.02.25 22:14, Jane Chu wrote:
When a process consumes a UE in a page, the memory failure handler
attempts to collect information for a potential SIGBUS.
If the page is an anonymous page, page_mapped_in_vma(page, vma) is
invoked in order to
    1. retrieve the vaddr from the process' address space,
    2. verify that the vaddr is indeed mapped to the poisoned page,
where 'page' is the precise small page with UE.

It's been observed that when injecting poison to a non-head subpage
of an anonymous hugetlb page, no SIGBUS show up; while injecting to
the head page produces a SIGBUS. The casue is that, though hugetlb_walk()
returns a valid pmd entry (on x86), but check_pte() detects mismatch
between the head page per the pmd and the input subpage. Thus the vaddr
is considered not mapped to the subpage and the process is not collected
for SIGBUS purpose.  This is the calling stack
        collect_procs_anon
          page_mapped_in_vma
            page_vma_mapped_walk
              hugetlb_walk
                huge_pte_lock
                  check_pte


Why can't we require callers to never pass in subpages of hugetlb pages,
and sanity check that this is the case?

To be precise: in collect_procs_anon() pass the head page of the hugetlb page, or in page_mapped_in_vma(), use the head page of the folio for hugetlb folios.

hugetlb folios are always entirely mapped, adding logic to detect if sub-pages are mapped doesn't make too much sense.

--
Cheers,

David / dhildenb





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux