Messages in this thread | | | From | "Zi Yan" <> | Subject | Re: [PATCH v9 06/10] mm: thp: check pmd migration entry in common path | Date | Wed, 19 Jul 2017 11:01:33 -0400 |
| |
On 19 Jul 2017, at 4:02, Michal Hocko wrote:
> On Mon 17-07-17 15:39:51, Zi Yan wrote: >> From: Zi Yan <zi.yan@cs.rutgers.edu> >> >> If one of callers of page migration starts to handle thp, >> memory management code start to see pmd migration entry, so we need >> to prepare for it before enabling. This patch changes various code >> point which checks the status of given pmds in order to prevent race >> between thp migration and the pmd-related works. > > I am sorry to nitpick on the changelog but the patch is scary large and > it would deserve much better description. What are those "various code > point" and how do you "prevent race". How can we double check that none > of them were missed?
Thanks for pointing this out.
Let me know if the following new description looks good to you:
When THP migration is being used, memory management code needs to handle pmd migration entries properly. This patch uses !pmd_present() or is_swap_pmd() (depending on whether pmd_none() needs separate code or not) to check pmd migration entries at the places where a pmd entry is present.
Since pmd-related code uses split_huge_page(), split_huge_pmd(), pmd_trans_huge(), pmd_trans_unstable(), or pmd_none_or_trans_huge_or_clear_bad(), this patch: 1. adds pmd migration entry split code in split_huge_pmd(), 2. takes care of pmd migration entries whenever pmd_trans_huge() is present, 3. makes pmd_none_or_trans_huge_or_clear_bad() pmd migration entry aware. Since split_huge_page() uses split_huge_pmd() and pmd_trans_unstable() is equivalent to pmd_none_or_trans_huge_or_clear_bad(), we do not change them.
Until this commit, a pmd entry should be: 1. pointing to a pte page, 2. is_swap_pmd(), 3. pmd_trans_huge(), 4. pmd_devmap(), or 5. pmd_none().
-- Best Regards Yan Zi [unhandled content-type:application/pgp-signature] | |