Commit 606ee44d authored by Jan Beulich's avatar Jan Beulich Committed by Ingo Molnar

x86: make mm/gup.c more virtualization friendly

Since pte_flags() is much cheaper than pte_val() in some virtualized
environments (namely, Xen), use the former whereever possible.
Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
Cc: "Nick Piggin" <npiggin@suse.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 5e72d9e4
...@@ -82,7 +82,7 @@ static noinline int gup_pte_range(pmd_t pmd, unsigned long addr, ...@@ -82,7 +82,7 @@ static noinline int gup_pte_range(pmd_t pmd, unsigned long addr,
pte_t pte = gup_get_pte(ptep); pte_t pte = gup_get_pte(ptep);
struct page *page; struct page *page;
if ((pte_val(pte) & (mask | _PAGE_SPECIAL)) != mask) { if ((pte_flags(pte) & (mask | _PAGE_SPECIAL)) != mask) {
pte_unmap(ptep); pte_unmap(ptep);
return 0; return 0;
} }
...@@ -116,10 +116,10 @@ static noinline int gup_huge_pmd(pmd_t pmd, unsigned long addr, ...@@ -116,10 +116,10 @@ static noinline int gup_huge_pmd(pmd_t pmd, unsigned long addr,
mask = _PAGE_PRESENT|_PAGE_USER; mask = _PAGE_PRESENT|_PAGE_USER;
if (write) if (write)
mask |= _PAGE_RW; mask |= _PAGE_RW;
if ((pte_val(pte) & mask) != mask) if ((pte_flags(pte) & mask) != mask)
return 0; return 0;
/* hugepages are never "special" */ /* hugepages are never "special" */
VM_BUG_ON(pte_val(pte) & _PAGE_SPECIAL); VM_BUG_ON(pte_flags(pte) & _PAGE_SPECIAL);
VM_BUG_ON(!pfn_valid(pte_pfn(pte))); VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
refs = 0; refs = 0;
...@@ -173,10 +173,10 @@ static noinline int gup_huge_pud(pud_t pud, unsigned long addr, ...@@ -173,10 +173,10 @@ static noinline int gup_huge_pud(pud_t pud, unsigned long addr,
mask = _PAGE_PRESENT|_PAGE_USER; mask = _PAGE_PRESENT|_PAGE_USER;
if (write) if (write)
mask |= _PAGE_RW; mask |= _PAGE_RW;
if ((pte_val(pte) & mask) != mask) if ((pte_flags(pte) & mask) != mask)
return 0; return 0;
/* hugepages are never "special" */ /* hugepages are never "special" */
VM_BUG_ON(pte_val(pte) & _PAGE_SPECIAL); VM_BUG_ON(pte_flags(pte) & _PAGE_SPECIAL);
VM_BUG_ON(!pfn_valid(pte_pfn(pte))); VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
refs = 0; refs = 0;
......
...@@ -206,7 +206,7 @@ static inline int pte_exec(pte_t pte) ...@@ -206,7 +206,7 @@ static inline int pte_exec(pte_t pte)
static inline int pte_special(pte_t pte) static inline int pte_special(pte_t pte)
{ {
return pte_val(pte) & _PAGE_SPECIAL; return pte_flags(pte) & _PAGE_SPECIAL;
} }
static inline unsigned long pte_pfn(pte_t pte) static inline unsigned long pte_pfn(pte_t pte)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment