diff options
Diffstat (limited to 'fs/proc/task_mmu.c')
| -rw-r--r-- | fs/proc/task_mmu.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index f46060eb91b5..2d04e3470d4c 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1421,6 +1421,8 @@ static pagemap_entry_t pte_to_pagemap_entry(struct pagemapread *pm,  		migration = is_migration_entry(entry);  		if (is_pfn_swap_entry(entry))  			page = pfn_swap_entry_to_page(entry); +		if (pte_marker_entry_uffd_wp(entry)) +			flags |= PM_UFFD_WP;  	}  	if (page && !PageAnon(page)) @@ -1556,10 +1558,15 @@ static int pagemap_hugetlb_range(pte_t *ptep, unsigned long hmask,  		if (page_mapcount(page) == 1)  			flags |= PM_MMAP_EXCLUSIVE; +		if (huge_pte_uffd_wp(pte)) +			flags |= PM_UFFD_WP; +  		flags |= PM_PRESENT;  		if (pm->show_pfn)  			frame = pte_pfn(pte) +  				((addr & ~hmask) >> PAGE_SHIFT); +	} else if (pte_swp_uffd_wp_any(pte)) { +		flags |= PM_UFFD_WP;  	}  	for (; addr != end; addr += PAGE_SIZE) { @@ -1873,8 +1880,6 @@ static int gather_hugetlb_stats(pte_t *pte, unsigned long hmask,  		return 0;  	page = pte_page(huge_pte); -	if (!page) -		return 0;  	md = walk->private;  	gather_stats(page, md, pte_dirty(huge_pte), 1);  | 
