All of lore.kernel.org
 help / color / mirror / Atom feed
From: Barret Rhoden <brho@google.com>
To: "Dan Williams" <dan.j.williams@intel.com>,
	"Dave Jiang" <dave.jiang@intel.com>,
	"Ross Zwisler" <zwisler@kernel.org>,
	"Vishal Verma" <vishal.l.verma@intel.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Borislav Petkov" <bp@alien8.de>,
	"Naoya Horiguchi" <n-horiguchi@ah.jp.nec.com>
Cc: linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org,
	"H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, kvm@vger.kernel.org, yu.c.zhang@intel.com,
	yi.z.zhang@intel.com, linux-mm@kvack.org
Subject: [PATCH 1/2] mm: make dev_pagemap_mapping_shift() externally visible
Date: Fri,  9 Nov 2018 15:39:20 -0500	[thread overview]
Message-ID: <20181109203921.178363-2-brho@google.com> (raw)
In-Reply-To: <20181109203921.178363-1-brho@google.com>

KVM has a use case for determining the size of a dax mapping.  The KVM
code has easy access to the address and the mm; hence the change in
parameters.

Signed-off-by: Barret Rhoden <brho@google.com>
---
 include/linux/mm.h  |  3 +++
 mm/memory-failure.c | 38 +++-----------------------------------
 mm/util.c           | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index 5411de93a363..51215d695753 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -935,6 +935,9 @@ static inline bool is_pci_p2pdma_page(const struct page *page)
 }
 #endif /* CONFIG_DEV_PAGEMAP_OPS */
 
+unsigned long dev_pagemap_mapping_shift(unsigned long address,
+					struct mm_struct *mm);
+
 static inline void get_page(struct page *page)
 {
 	page = compound_head(page);
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 0cd3de3550f0..c3f2c6a8607e 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -265,40 +265,6 @@ void shake_page(struct page *p, int access)
 }
 EXPORT_SYMBOL_GPL(shake_page);
 
-static unsigned long dev_pagemap_mapping_shift(struct page *page,
-		struct vm_area_struct *vma)
-{
-	unsigned long address = vma_address(page, vma);
-	pgd_t *pgd;
-	p4d_t *p4d;
-	pud_t *pud;
-	pmd_t *pmd;
-	pte_t *pte;
-
-	pgd = pgd_offset(vma->vm_mm, address);
-	if (!pgd_present(*pgd))
-		return 0;
-	p4d = p4d_offset(pgd, address);
-	if (!p4d_present(*p4d))
-		return 0;
-	pud = pud_offset(p4d, address);
-	if (!pud_present(*pud))
-		return 0;
-	if (pud_devmap(*pud))
-		return PUD_SHIFT;
-	pmd = pmd_offset(pud, address);
-	if (!pmd_present(*pmd))
-		return 0;
-	if (pmd_devmap(*pmd))
-		return PMD_SHIFT;
-	pte = pte_offset_map(pmd, address);
-	if (!pte_present(*pte))
-		return 0;
-	if (pte_devmap(*pte))
-		return PAGE_SHIFT;
-	return 0;
-}
-
 /*
  * Failure handling: if we can't find or can't kill a process there's
  * not much we can do.	We just print a message and ignore otherwise.
@@ -329,7 +295,9 @@ static void add_to_kill(struct task_struct *tsk, struct page *p,
 	tk->addr = page_address_in_vma(p, vma);
 	tk->addr_valid = 1;
 	if (is_zone_device_page(p))
-		tk->size_shift = dev_pagemap_mapping_shift(p, vma);
+		tk->size_shift =
+			dev_pagemap_mapping_shift(vma_address(page, vma),
+						  vma->vm_mm);
 	else
 		tk->size_shift = compound_order(compound_head(p)) + PAGE_SHIFT;
 
diff --git a/mm/util.c b/mm/util.c
index 8bf08b5b5760..61bc9bab931d 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -780,3 +780,37 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen)
 out:
 	return res;
 }
+
+unsigned long dev_pagemap_mapping_shift(unsigned long address,
+					struct mm_struct *mm)
+{
+	pgd_t *pgd;
+	p4d_t *p4d;
+	pud_t *pud;
+	pmd_t *pmd;
+	pte_t *pte;
+
+	pgd = pgd_offset(mm, address);
+	if (!pgd_present(*pgd))
+		return 0;
+	p4d = p4d_offset(pgd, address);
+	if (!p4d_present(*p4d))
+		return 0;
+	pud = pud_offset(p4d, address);
+	if (!pud_present(*pud))
+		return 0;
+	if (pud_devmap(*pud))
+		return PUD_SHIFT;
+	pmd = pmd_offset(pud, address);
+	if (!pmd_present(*pmd))
+		return 0;
+	if (pmd_devmap(*pmd))
+		return PMD_SHIFT;
+	pte = pte_offset_map(pmd, address);
+	if (!pte_present(*pte))
+		return 0;
+	if (pte_devmap(*pte))
+		return PAGE_SHIFT;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(dev_pagemap_mapping_shift);
-- 
2.19.1.930.g4563a0d9d0-goog

  reply	other threads:[~2018-11-09 20:39 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-09 20:39 [PATCH 0/2] kvm: Use huge pages for DAX-backed files Barret Rhoden
2018-11-09 20:39 ` Barret Rhoden [this message]
2018-11-13  9:28   ` [PATCH 1/2] mm: make dev_pagemap_mapping_shift() externally visible David Hildenbrand
2018-11-13  9:28     ` David Hildenbrand
2018-11-13  9:28     ` David Hildenbrand
2018-11-09 20:39 ` [PATCH 2/2] kvm: Use huge pages for DAX-backed files Barret Rhoden
2018-11-12 19:31   ` Paolo Bonzini
2018-11-12 19:31     ` Paolo Bonzini
     [not found]     ` <861c4adb-e2f0-2caf-8f6e-9f09ecb0b624-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-11-13 16:21       ` Barret Rhoden
2018-11-13 16:21         ` Barret Rhoden
2018-11-13 18:22         ` Paolo Bonzini
2018-11-13 18:22           ` Paolo Bonzini
2018-11-13  9:36   ` David Hildenbrand
2018-11-13  9:36     ` David Hildenbrand
2018-11-13  9:36     ` David Hildenbrand
2018-11-13 10:02     ` Pankaj Gupta
2018-11-13 10:02       ` Pankaj Gupta
2018-11-13 10:02       ` Pankaj Gupta
2018-11-13 12:41       ` Paolo Bonzini
     [not found]       ` <286665658.33247363.1542103353780.JavaMail.zimbra-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-11-13 15:56         ` Barret Rhoden
2018-11-13 15:56           ` Barret Rhoden
2018-11-14  9:09           ` Pankaj Gupta
2018-11-14  9:09             ` Pankaj Gupta
     [not found]     ` <043a592d-6592-3053-15a0-68cc54a26deb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-11-13 15:50       ` Barret Rhoden
2018-11-13 15:50         ` Barret Rhoden
     [not found] ` <20181109203921.178363-1-brho-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2018-11-14 21:51   ` [PATCH v2 0/3] " Barret Rhoden
2018-11-14 21:51     ` Barret Rhoden
2018-11-14 21:51     ` [PATCH v2 1/3] mm: make dev_pagemap_mapping_shift() externally visible Barret Rhoden
2018-11-14 21:51       ` Barret Rhoden
2018-11-14 21:51       ` Barret Rhoden
2018-11-26 16:50       ` Paolo Bonzini
2018-11-26 18:32       ` Dan Williams
2018-11-26 18:32         ` Dan Williams
     [not found]     ` <20181114215155.259978-1-brho-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2018-11-14 21:51       ` [PATCH v2 2/3] kvm: Use huge pages for DAX-backed files Barret Rhoden
2018-11-14 21:51         ` Barret Rhoden
2018-11-14 21:51       ` [PATCH v2 3/3] kvm: remove redundant PageReserved() check Barret Rhoden
2018-11-14 21:51         ` Barret Rhoden
2018-11-27 13:31         ` David Hildenbrand
2018-11-27 13:31           ` David Hildenbrand
2018-11-15  0:55     ` [PATCH v2 0/3] kvm: Use huge pages for DAX-backed files Dan Williams
2018-11-15  0:55       ` Dan Williams
2018-12-03 17:40       ` Barret Rhoden
2018-12-03 18:32         ` Alexander Duyck
2018-12-03 18:32           ` Alexander Duyck
2018-12-03 18:32           ` Alexander Duyck

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=20181109203921.178363-2-brho@google.com \
    --to=brho@google.com \
    --cc=bp@alien8.de \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=mingo@redhat.com \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=vishal.l.verma@intel.com \
    --cc=x86@kernel.org \
    --cc=yi.z.zhang@intel.com \
    --cc=yu.c.zhang@intel.com \
    --cc=zwisler@kernel.org \
    /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.