I have no objection to this patch going in for now.

Longer term, surely we want to track what mode the PFNs are mapped in?  There 
are various bizarre suppositions out there about how persistent memory should 
be mapped, and it's probably better if the kernel ignores what the user 
specifies and keeps everything sane.  I've read the dire warnings in the Intel 
architecture manual and I have no desire to deal with the inevitable bug 
reports on some hardware I don't own and requires twenty weeks of operation in 
order to observe the bug.

-----Original Message-----
From: Dan Williams [mailto:[email protected]] 
Sent: Tuesday, September 6, 2016 12:50 PM
To: [email protected]
Cc: Toshi Kani <[email protected]>; Matthew Wilcox <[email protected]>; 
Nilesh Choudhury <[email protected]>; [email protected]; 
[email protected]; [email protected]; [email protected]; Ross 
Zwisler <[email protected]>; Kirill A. Shutemov 
<[email protected]>; Kai Zhang <[email protected]>
Subject: [PATCH 4/5] mm: fix cache mode of dax pmd mappings

track_pfn_insert() is marking dax mappings as uncacheable.

It is used to keep mappings attributes consistent across a remapped range.
However, since dax regions are never registered via track_pfn_remap(), the 
caching mode lookup for dax pfns always returns _PAGE_CACHE_MODE_UC.  We do not 
use track_pfn_insert() in the dax-pte path, and we always want to use the 
pgprot of the vma itself, so drop this call.

Cc: Ross Zwisler <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Kirill A. Shutemov <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Nilesh Choudhury <[email protected]>
Reported-by: Kai Zhang <[email protected]>
Reported-by: Toshi Kani <[email protected]>
Cc: <[email protected]>
Signed-off-by: Dan Williams <[email protected]>
---
 mm/huge_memory.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 
a6abd76baa72..338eff05c77a 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -676,8 +676,6 @@ int vmf_insert_pfn_pmd(struct vm_area_struct *vma, unsigned 
long addr,
 
        if (addr < vma->vm_start || addr >= vma->vm_end)
                return VM_FAULT_SIGBUS;
-       if (track_pfn_insert(vma, &pgprot, pfn))
-               return VM_FAULT_SIGBUS;
        insert_pfn_pmd(vma, addr, pmd, pfn, pgprot, write);
        return VM_FAULT_NOPAGE;
 }

Reply via email to