Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  • Qi Zheng's avatar
    mm: remove redundant smp_wmb() · ed33b5a6
    Qi Zheng authored
    The smp_wmb() which is in the __pte_alloc() is used to ensure all ptes
    setup is visible before the pte is made visible to other CPUs by being
    put into page tables.  We only need this when the pte is actually
    populated, so move it to pmd_install().  __pte_alloc_kernel(),
    __p4d_alloc(), __pud_alloc() and __pmd_alloc() are similar to this case.
    
    We can also defer smp_wmb() to the place where the pmd entry is really
    populated by preallocated pte.  There are two kinds of user of
    preallocated pte, one is filemap & finish_fault(), another is THP.  The
    former does not need another smp_wmb() because the smp_wmb() has been
    done by pmd_install().  Fortunately, the latter also does not need
    another smp_wmb() because there is already a smp_wmb() before populating
    the new pte when the THP uses a preallocated pte to split a huge pmd.
    
    Link: https://lkml.kernel.org/r/20210901102722.47686-3-zhengqi.arch@bytedance.com
    
    
    Signed-off-by: default avatarQi Zheng <zhengqi.arch@bytedance.com>
    Reviewed-by: Muchun So...
    ed33b5a6