Merge branch 'akpm' (patches from Andrew)
Merge updates from Andrew Morton: "Incoming: - a small number of updates to scripts/, ocfs2 and fs/buffer.c - most of MM I still have quite a lot of material (mostly not MM) staged after linux-next due to -next dependencies. I'll send those across next week as the preprequisites get merged up" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (135 commits) mm/page_io.c: annotate refault stalls from swap_readpage mm/Kconfig: fix trivial help text punctuation mm/Kconfig: fix indentation mm/memory_hotplug.c: remove __online_page_set_limits() mm: fix typos in comments when calling __SetPageUptodate() mm: fix struct member name in function comments mm/shmem.c: cast the type of unmap_start to u64 mm: shmem: use proper gfp flags for shmem_writepage() mm/shmem.c: make array 'values' static const, makes object smaller userfaultfd: require CAP_SYS_PTRACE for UFFD_FEATURE_EVENT_FORK fs/userfaultfd.c: wp: clear VM_UFFD_MISSING or VM_UFFD_WP during userfaultfd_register() userfaultfd: wrap the common dst_vma check into an inlined function userfaultfd: remove unnecessary WARN_ON() in __mcopy_atomic_hugetlb() userfaultfd: use vma_pagesize for all huge page size calculation mm/madvise.c: use PAGE_ALIGN[ED] for range checking mm/madvise.c: replace with page_size() in madvise_inject_error() mm/mmap.c: make vma_merge() comment more easy to understand mm/hwpoison-inject: use DEFINE_DEBUGFS_ATTRIBUTE to define debugfs fops autonuma: reduce cache footprint when scanning page tables autonuma: fix watermark checking in migrate_balanced_pgdat() ...
This commit is contained in:
@@ -30,7 +30,6 @@
|
||||
#undef pud_free_tlb
|
||||
#define pud_free_tlb(tlb, x, addr) do { } while (0)
|
||||
#define pud_free(mm, x) do { } while (0)
|
||||
#define __pud_free_tlb(tlb, x, addr) do { } while (0)
|
||||
|
||||
#undef pud_addr_end
|
||||
#define pud_addr_end(addr, end) (end)
|
||||
|
||||
@@ -51,7 +51,6 @@ static inline int p4d_present(p4d_t p4d)
|
||||
#undef p4d_free_tlb
|
||||
#define p4d_free_tlb(tlb, x, addr) do { } while (0)
|
||||
#define p4d_free(mm, x) do { } while (0)
|
||||
#define __p4d_free_tlb(tlb, x, addr) do { } while (0)
|
||||
|
||||
#undef p4d_addr_end
|
||||
#define p4d_addr_end(addr, end) (end)
|
||||
|
||||
@@ -50,7 +50,7 @@ static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
|
||||
*/
|
||||
#define p4d_alloc_one(mm, address) NULL
|
||||
#define p4d_free(mm, x) do { } while (0)
|
||||
#define __p4d_free_tlb(tlb, x, a) do { } while (0)
|
||||
#define p4d_free_tlb(tlb, x, a) do { } while (0)
|
||||
|
||||
#undef p4d_addr_end
|
||||
#define p4d_addr_end(addr, end) (end)
|
||||
|
||||
@@ -60,7 +60,7 @@ static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
|
||||
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
||||
{
|
||||
}
|
||||
#define __pmd_free_tlb(tlb, x, a) do { } while (0)
|
||||
#define pmd_free_tlb(tlb, x, a) do { } while (0)
|
||||
|
||||
#undef pmd_addr_end
|
||||
#define pmd_addr_end(addr, end) (end)
|
||||
|
||||
@@ -59,7 +59,7 @@ static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
|
||||
*/
|
||||
#define pud_alloc_one(mm, address) NULL
|
||||
#define pud_free(mm, x) do { } while (0)
|
||||
#define __pud_free_tlb(tlb, x, a) do { } while (0)
|
||||
#define pud_free_tlb(tlb, x, a) do { } while (0)
|
||||
|
||||
#undef pud_addr_end
|
||||
#define pud_addr_end(addr, end) (end)
|
||||
|
||||
@@ -558,8 +558,19 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||
* Do the tests inline, but report and clear the bad entry in mm/memory.c.
|
||||
*/
|
||||
void pgd_clear_bad(pgd_t *);
|
||||
|
||||
#ifndef __PAGETABLE_P4D_FOLDED
|
||||
void p4d_clear_bad(p4d_t *);
|
||||
#else
|
||||
#define p4d_clear_bad(p4d) do { } while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __PAGETABLE_PUD_FOLDED
|
||||
void pud_clear_bad(pud_t *);
|
||||
#else
|
||||
#define pud_clear_bad(p4d) do { } while (0)
|
||||
#endif
|
||||
|
||||
void pmd_clear_bad(pmd_t *);
|
||||
|
||||
static inline int pgd_none_or_clear_bad(pgd_t *pgd)
|
||||
@@ -903,6 +914,21 @@ static inline int pud_write(pud_t pud)
|
||||
}
|
||||
#endif /* pud_write */
|
||||
|
||||
#if !defined(CONFIG_ARCH_HAS_PTE_DEVMAP) || !defined(CONFIG_TRANSPARENT_HUGEPAGE)
|
||||
static inline int pmd_devmap(pmd_t pmd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pud_devmap(pud_t pud)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pgd_devmap(pgd_t pgd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_TRANSPARENT_HUGEPAGE) || \
|
||||
(defined(CONFIG_TRANSPARENT_HUGEPAGE) && \
|
||||
!defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD))
|
||||
@@ -912,6 +938,31 @@ static inline int pud_trans_huge(pud_t pud)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* See pmd_none_or_trans_huge_or_clear_bad for discussion. */
|
||||
static inline int pud_none_or_trans_huge_or_dev_or_clear_bad(pud_t *pud)
|
||||
{
|
||||
pud_t pudval = READ_ONCE(*pud);
|
||||
|
||||
if (pud_none(pudval) || pud_trans_huge(pudval) || pud_devmap(pudval))
|
||||
return 1;
|
||||
if (unlikely(pud_bad(pudval))) {
|
||||
pud_clear_bad(pud);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* See pmd_trans_unstable for discussion. */
|
||||
static inline int pud_trans_unstable(pud_t *pud)
|
||||
{
|
||||
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \
|
||||
defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)
|
||||
return pud_none_or_trans_huge_or_dev_or_clear_bad(pud);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef pmd_read_atomic
|
||||
static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
|
||||
{
|
||||
|
||||
@@ -584,7 +584,6 @@ static inline void tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vm
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef __ARCH_HAS_4LEVEL_HACK
|
||||
#ifndef pud_free_tlb
|
||||
#define pud_free_tlb(tlb, pudp, address) \
|
||||
do { \
|
||||
@@ -594,9 +593,7 @@ static inline void tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vm
|
||||
__pud_free_tlb(tlb, pudp, address); \
|
||||
} while (0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __ARCH_HAS_5LEVEL_HACK
|
||||
#ifndef p4d_free_tlb
|
||||
#define p4d_free_tlb(tlb, pudp, address) \
|
||||
do { \
|
||||
@@ -605,7 +602,6 @@ static inline void tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vm
|
||||
__p4d_free_tlb(tlb, pudp, address); \
|
||||
} while (0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user