diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2022-08-01 08:59:31 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2022-08-01 08:59:31 -0300 |
commit | 18808564aa3bc9ae3309fd8a5c0a93f7f9a23f9a (patch) | |
tree | 4c1732a2dddb246f0d39a492cbf8e6db31f3af3e /mm/hmm.c | |
parent | 9a0b36266f7a83912592052035b84f13b12e30da (diff) | |
parent | 3d7cb6b04c3f3115719235cc6866b10326de34cd (diff) | |
download | linux-18808564aa3bc9ae3309fd8a5c0a93f7f9a23f9a.tar.gz linux-18808564aa3bc9ae3309fd8a5c0a93f7f9a23f9a.tar.bz2 linux-18808564aa3bc9ae3309fd8a5c0a93f7f9a23f9a.zip |
Merge remote-tracking branch 'torvalds/master' into perf/core
To pick up the fixes that went upstream via acme/perf/urgent and to get
to v5.19.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'mm/hmm.c')
-rw-r--r-- | mm/hmm.c | 19 |
1 files changed, 8 insertions, 11 deletions
@@ -212,14 +212,6 @@ int hmm_vma_handle_pmd(struct mm_walk *walk, unsigned long addr, unsigned long end, unsigned long hmm_pfns[], pmd_t pmd); #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ -static inline bool hmm_is_device_private_entry(struct hmm_range *range, - swp_entry_t entry) -{ - return is_device_private_entry(entry) && - pfn_swap_entry_to_page(entry)->pgmap->owner == - range->dev_private_owner; -} - static inline unsigned long pte_to_hmm_pfn_flags(struct hmm_range *range, pte_t pte) { @@ -252,10 +244,12 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr, swp_entry_t entry = pte_to_swp_entry(pte); /* - * Never fault in device private pages, but just report - * the PFN even if not present. + * Don't fault in device private pages owned by the caller, + * just report the PFN. */ - if (hmm_is_device_private_entry(range, entry)) { + if (is_device_private_entry(entry) && + pfn_swap_entry_to_page(entry)->pgmap->owner == + range->dev_private_owner) { cpu_flags = HMM_PFN_VALID; if (is_writable_device_private_entry(entry)) cpu_flags |= HMM_PFN_WRITE; @@ -273,6 +267,9 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr, if (!non_swap_entry(entry)) goto fault; + if (is_device_private_entry(entry)) + goto fault; + if (is_device_exclusive_entry(entry)) goto fault; |