From: tip-bot for Toshi Kani <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mingo@redhat.com, elliott@hpe.com, mingo@kernel.org,
hpa@zytor.com, konrad.wilk@oracle.com, tglx@linutronix.de,
bp@alien8.de, toshi.kani@hpe.com, linux-kernel@vger.kernel.org,
jgross@suse.com, akpm@linux-foundation.org
Subject: [tip:x86/mm] x86/mm: Fix gup_huge_p?d() to handle large PAT bit
Date: Tue, 22 Sep 2015 12:44:57 -0700 [thread overview]
Message-ID: <tip-daf3e35c5888e8bd6a2f5ed15ed392b2df362ecf@git.kernel.org> (raw)
In-Reply-To: <1442514264-12475-9-git-send-email-toshi.kani@hpe.com>
Commit-ID: daf3e35c5888e8bd6a2f5ed15ed392b2df362ecf
Gitweb: http://git.kernel.org/tip/daf3e35c5888e8bd6a2f5ed15ed392b2df362ecf
Author: Toshi Kani <toshi.kani@hpe.com>
AuthorDate: Thu, 17 Sep 2015 12:24:21 -0600
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 22 Sep 2015 21:27:33 +0200
x86/mm: Fix gup_huge_p?d() to handle large PAT bit
gup_huge_pud() and gup_huge_pmd() cast *pud and *pmd to *pte,
and use pte_xxx() interfaces to obtain the flags and PFN.
However, the pte_xxx() interface does not handle the large
PAT bit properly for PUD/PMD.
Fix gup_huge_pud() and gup_huge_pmd() to use pud_xxx() and
pmd_xxx() interfaces according to their type.
Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Juergen Gross <jgross@suse.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Konrad Wilk <konrad.wilk@oracle.com>
Cc: Robert Elliot <elliott@hpe.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/1442514264-12475-9-git-send-email-toshi.kani@hpe.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/mm/gup.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/arch/x86/mm/gup.c b/arch/x86/mm/gup.c
index 81bf3d2..ae9a37b 100644
--- a/arch/x86/mm/gup.c
+++ b/arch/x86/mm/gup.c
@@ -118,21 +118,20 @@ static noinline int gup_huge_pmd(pmd_t pmd, unsigned long addr,
unsigned long end, int write, struct page **pages, int *nr)
{
unsigned long mask;
- pte_t pte = *(pte_t *)&pmd;
struct page *head, *page;
int refs;
mask = _PAGE_PRESENT|_PAGE_USER;
if (write)
mask |= _PAGE_RW;
- if ((pte_flags(pte) & mask) != mask)
+ if ((pmd_flags(pmd) & mask) != mask)
return 0;
/* hugepages are never "special" */
- VM_BUG_ON(pte_flags(pte) & _PAGE_SPECIAL);
- VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
+ VM_BUG_ON(pmd_flags(pmd) & _PAGE_SPECIAL);
+ VM_BUG_ON(!pfn_valid(pmd_pfn(pmd)));
refs = 0;
- head = pte_page(pte);
+ head = pmd_page(pmd);
page = head + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
do {
VM_BUG_ON_PAGE(compound_head(page) != head, page);
@@ -195,21 +194,20 @@ static noinline int gup_huge_pud(pud_t pud, unsigned long addr,
unsigned long end, int write, struct page **pages, int *nr)
{
unsigned long mask;
- pte_t pte = *(pte_t *)&pud;
struct page *head, *page;
int refs;
mask = _PAGE_PRESENT|_PAGE_USER;
if (write)
mask |= _PAGE_RW;
- if ((pte_flags(pte) & mask) != mask)
+ if ((pud_flags(pud) & mask) != mask)
return 0;
/* hugepages are never "special" */
- VM_BUG_ON(pte_flags(pte) & _PAGE_SPECIAL);
- VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
+ VM_BUG_ON(pud_flags(pud) & _PAGE_SPECIAL);
+ VM_BUG_ON(!pfn_valid(pud_pfn(pud)));
refs = 0;
- head = pte_page(pte);
+ head = pud_page(pud);
page = head + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
do {
VM_BUG_ON_PAGE(compound_head(page) != head, page);
next prev parent reply other threads:[~2015-09-22 19:45 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-17 18:24 [PATCH v4 RESEND 0/11] x86/mm: Handle large PAT bit in pud/pmd interfaces Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 1/11] x86/vdso32: Define PGTABLE_LEVELS to 32bit VDSO Toshi Kani
2015-09-22 19:42 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 2/11] x86/asm: Move PUD_PAGE macros to page_types.h Toshi Kani
2015-09-22 19:42 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 3/11] x86/asm: Add pud/pmd mask interfaces to handle large PAT bit Toshi Kani
2015-09-22 19:43 ` [tip:x86/mm] x86/asm: Add pud/ pmd " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 4/11] x86/asm: Fix pud/pmd " Toshi Kani
2015-09-22 19:43 ` [tip:x86/mm] x86/asm: Fix pud/ pmd " tip-bot for Toshi Kani
2015-11-09 18:06 ` [PATCH v4 RESEND 4/11] x86/asm: Fix pud/pmd " Boris Ostrovsky
2015-11-09 19:16 ` Toshi Kani
2015-11-09 19:39 ` Boris Ostrovsky
2015-11-09 20:47 ` Kirill A. Shutemov
2015-11-09 22:36 ` Boris Ostrovsky
2015-11-09 23:18 ` Toshi Kani
2015-11-10 0:40 ` Toshi Kani
2015-11-09 20:10 ` Kirill A. Shutemov
2015-11-09 21:01 ` Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 5/11] x86/asm: Add pud_pgprot() and pmd_pgprot() Toshi Kani
2015-09-22 19:43 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 6/11] x86/mm: Fix page table dump to show PAT bit Toshi Kani
2015-09-22 19:44 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 7/11] x86/mm: Fix slow_virt_to_phys() to handle large " Toshi Kani
2015-09-22 19:44 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 8/11] x86/mm: Fix gup_huge_p?d() " Toshi Kani
2015-09-22 19:44 ` tip-bot for Toshi Kani [this message]
2015-09-17 18:24 ` [PATCH v4 RESEND 9/11] x86/mm: Fix try_preserve_large_page() " Toshi Kani
2015-09-22 19:45 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 10/11] x86/mm: Fix __split_large_page() " Toshi Kani
2015-09-22 19:45 ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 11/11] x86/mm: Fix no-change case in try_preserve_large_page() Toshi Kani
2015-09-22 19:45 ` [tip:x86/mm] " tip-bot for Toshi Kani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-daf3e35c5888e8bd6a2f5ed15ed392b2df362ecf@git.kernel.org \
--to=tipbot@zytor.com \
--cc=akpm@linux-foundation.org \
--cc=bp@alien8.de \
--cc=elliott@hpe.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=toshi.kani@hpe.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox