All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Toshi Kani <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: elliott@hpe.com, hpa@zytor.com, akpm@linux-foundation.org,
	mingo@kernel.org, toshi.kani@hpe.com, mingo@redhat.com,
	jgross@suse.com, tglx@linutronix.de,
	linux-kernel@vger.kernel.org, konrad.wilk@oracle.com,
	bp@alien8.de
Subject: [tip:x86/mm] x86/mm: Fix slow_virt_to_phys() to handle large PAT bit
Date: Tue, 22 Sep 2015 12:44:37 -0700	[thread overview]
Message-ID: <tip-34437e67a6727885bdf6cbfd8441b1ac43a1ee65@git.kernel.org> (raw)
In-Reply-To: <1442514264-12475-8-git-send-email-toshi.kani@hpe.com>

Commit-ID:  34437e67a6727885bdf6cbfd8441b1ac43a1ee65
Gitweb:     http://git.kernel.org/tip/34437e67a6727885bdf6cbfd8441b1ac43a1ee65
Author:     Toshi Kani <toshi.kani@hpe.com>
AuthorDate: Thu, 17 Sep 2015 12:24:20 -0600
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 22 Sep 2015 21:27:33 +0200

x86/mm: Fix slow_virt_to_phys() to handle large PAT bit

slow_virt_to_phys() calls lookup_address() to obtain *pte and
its level.  It then calls pte_pfn() to obtain a physical address
for any level.  However, this physical address is not correct
when the large PAT bit is set because pte_pfn() does not mask
the large PAT bit properly for PUD/PMD.

Fix slow_virt_to_phys() to use pud_pfn() and pmd_pfn() for 1GB
and 2MB mapping levels.

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-8-git-send-email-toshi.kani@hpe.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/mm/pageattr.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 2c44c07..1441368 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -414,18 +414,28 @@ pmd_t *lookup_pmd_address(unsigned long address)
 phys_addr_t slow_virt_to_phys(void *__virt_addr)
 {
 	unsigned long virt_addr = (unsigned long)__virt_addr;
-	phys_addr_t phys_addr;
-	unsigned long offset;
+	unsigned long phys_addr, offset;
 	enum pg_level level;
-	unsigned long pmask;
 	pte_t *pte;
 
 	pte = lookup_address(virt_addr, &level);
 	BUG_ON(!pte);
-	pmask = page_level_mask(level);
-	offset = virt_addr & ~pmask;
-	phys_addr = (phys_addr_t)pte_pfn(*pte) << PAGE_SHIFT;
-	return (phys_addr | offset);
+
+	switch (level) {
+	case PG_LEVEL_1G:
+		phys_addr = pud_pfn(*(pud_t *)pte) << PAGE_SHIFT;
+		offset = virt_addr & ~PUD_PAGE_MASK;
+		break;
+	case PG_LEVEL_2M:
+		phys_addr = pmd_pfn(*(pmd_t *)pte) << PAGE_SHIFT;
+		offset = virt_addr & ~PMD_PAGE_MASK;
+		break;
+	default:
+		phys_addr = pte_pfn(*pte) << PAGE_SHIFT;
+		offset = virt_addr & ~PAGE_MASK;
+	}
+
+	return (phys_addr_t)(phys_addr | offset);
 }
 EXPORT_SYMBOL_GPL(slow_virt_to_phys);
 

  reply	other threads:[~2015-09-22 19:50 UTC|newest]

Thread overview: 52+ 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 ` Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 1/11] x86/vdso32: Define PGTABLE_LEVELS to 32bit VDSO Toshi Kani
2015-09-17 18:24   ` 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-17 18:24   ` 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-17 18:24   ` 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-17 18:24   ` 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:16       ` Toshi Kani
2015-11-09 19:39       ` Boris Ostrovsky
2015-11-09 19:39         ` Boris Ostrovsky
2015-11-09 20:47         ` Kirill A. Shutemov
2015-11-09 20:47           ` Kirill A. Shutemov
2015-11-09 22:36           ` Boris Ostrovsky
2015-11-09 22:36             ` Boris Ostrovsky
2015-11-09 23:18             ` Toshi Kani
2015-11-09 23:18               ` Toshi Kani
2015-11-10  0:40               ` Toshi Kani
2015-11-10  0:40                 ` Toshi Kani
2015-11-09 20:10       ` Kirill A. Shutemov
2015-11-09 20:10         ` Kirill A. Shutemov
2015-11-09 21:01         ` Toshi Kani
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-17 18:24   ` 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-17 18:24   ` 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-17 18:24   ` Toshi Kani
2015-09-22 19:44   ` tip-bot for Toshi Kani [this message]
2015-09-17 18:24 ` [PATCH v4 RESEND 8/11] x86/mm: Fix gup_huge_p?d() " Toshi Kani
2015-09-17 18:24   ` Toshi Kani
2015-09-22 19:44   ` [tip:x86/mm] " tip-bot for Toshi Kani
2015-09-17 18:24 ` [PATCH v4 RESEND 9/11] x86/mm: Fix try_preserve_large_page() " Toshi Kani
2015-09-17 18:24   ` 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-17 18:24   ` 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-17 18:24   ` 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-34437e67a6727885bdf6cbfd8441b1ac43a1ee65@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.