From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
To: akpm@linux-foundation.org, aarcange@redhat.com,
linux-mm@kvack.org, ak@linux.intel.com, hughd@google.com
Cc: linux-kernel@vger.kernel.org, schwidefsky@de.ibm.com,
heiko.carstens@de.ibm.com, gerald.schaefer@de.ibm.com
Subject: [RFC patch 2/7] thp: introduce pmdp_invalidate()
Date: Thu, 23 Aug 2012 19:17:35 +0200 [thread overview]
Message-ID: <20120823171854.473831303@de.ibm.com> (raw)
In-Reply-To: 20120823171733.595087166@de.ibm.com
[-- Attachment #1: linux-3.5-thp-pmd-flush.patch --]
[-- Type: text/plain, Size: 1847 bytes --]
On System z, a valid page table entry must not be changed while it is
attached to any CPU. So instead of pmd_mknotpresent() and set_pmd_at(),
an IDTE operation would be necessary there. This patch introduces the
pmdp_invalidate() function, to allow architecture-specific
implementations.
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
---
include/asm-generic/pgtable.h | 11 +++++++++++
mm/huge_memory.c | 3 +--
2 files changed, 12 insertions(+), 2 deletions(-)
--- a/include/asm-generic/pgtable.h
+++ b/include/asm-generic/pgtable.h
@@ -93,6 +93,17 @@ static inline pmd_t pmdp_get_and_clear(s
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
#endif
+#ifndef __HAVE_ARCH_PMDP_INVALIDATE
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
+static inline void pmdp_invalidate(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmdp)
+{
+ set_pmd_at(vma->vm_mm, address, pmd, pmd_mknotpresent(*pmd));
+ flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
+}
+#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
+#endif
+
#ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL
static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
unsigned long address, pte_t *ptep,
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1374,8 +1374,7 @@ static int __split_huge_page_map(struct
* SMP TLB and finally we write the non-huge version
* of the pmd entry with pmd_populate.
*/
- set_pmd_at(mm, address, pmd, pmd_mknotpresent(*pmd));
- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
+ pmdp_invalidate(vma, address, pmd);
pmd_populate(mm, pmd, pgtable);
ret = 1;
}
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
To: akpm@linux-foundation.org, aarcange@redhat.com,
linux-mm@kvack.org, ak@linux.intel.com, hughd@google.com
Cc: linux-kernel@vger.kernel.org, schwidefsky@de.ibm.com,
heiko.carstens@de.ibm.com, gerald.schaefer@de.ibm.com
Subject: [RFC patch 2/7] thp: introduce pmdp_invalidate()
Date: Thu, 23 Aug 2012 19:17:35 +0200 [thread overview]
Message-ID: <20120823171854.473831303@de.ibm.com> (raw)
In-Reply-To: 20120823171733.595087166@de.ibm.com
[-- Attachment #1: linux-3.5-thp-pmd-flush.patch --]
[-- Type: text/plain, Size: 1622 bytes --]
On System z, a valid page table entry must not be changed while it is
attached to any CPU. So instead of pmd_mknotpresent() and set_pmd_at(),
an IDTE operation would be necessary there. This patch introduces the
pmdp_invalidate() function, to allow architecture-specific
implementations.
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
---
include/asm-generic/pgtable.h | 11 +++++++++++
mm/huge_memory.c | 3 +--
2 files changed, 12 insertions(+), 2 deletions(-)
--- a/include/asm-generic/pgtable.h
+++ b/include/asm-generic/pgtable.h
@@ -93,6 +93,17 @@ static inline pmd_t pmdp_get_and_clear(s
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
#endif
+#ifndef __HAVE_ARCH_PMDP_INVALIDATE
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
+static inline void pmdp_invalidate(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmdp)
+{
+ set_pmd_at(vma->vm_mm, address, pmd, pmd_mknotpresent(*pmd));
+ flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
+}
+#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
+#endif
+
#ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL
static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
unsigned long address, pte_t *ptep,
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1374,8 +1374,7 @@ static int __split_huge_page_map(struct
* SMP TLB and finally we write the non-huge version
* of the pmd entry with pmd_populate.
*/
- set_pmd_at(mm, address, pmd, pmd_mknotpresent(*pmd));
- flush_tlb_range(vma, address, address + HPAGE_PMD_SIZE);
+ pmdp_invalidate(vma, address, pmd);
pmd_populate(mm, pmd, pgtable);
ret = 1;
}
next prev parent reply other threads:[~2012-08-23 17:19 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-23 17:17 [RFC patch 0/7] thp: transparent hugepages on System z Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-23 17:17 ` [RFC patch 1/7] thp: remove assumptions on pgtable_t type Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer [this message]
2012-08-23 17:17 ` [RFC patch 2/7] thp: introduce pmdp_invalidate() Gerald Schaefer
2012-08-25 12:36 ` Hillf Danton
2012-08-25 12:36 ` Hillf Danton
2012-08-27 10:27 ` Gerald Schaefer
2012-08-27 10:27 ` Gerald Schaefer
2012-08-23 17:17 ` [RFC patch 3/7] thp: make MADV_HUGEPAGE check for mm->def_flags Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-25 12:47 ` Hillf Danton
2012-08-25 12:47 ` Hillf Danton
2012-08-27 10:39 ` Gerald Schaefer
2012-08-27 10:39 ` Gerald Schaefer
2012-08-27 12:26 ` Hillf Danton
2012-08-27 12:26 ` Hillf Danton
2012-08-23 17:17 ` [RFC patch 4/7] thp, s390: thp splitting backend for System z Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-23 17:17 ` [RFC patch 5/7] thp, s390: thp pagetable pre-allocation " Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-23 17:17 ` [RFC patch 6/7] thp, s390: disable thp for kvm host on " Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-23 17:17 ` [RFC patch 7/7] thp, s390: architecture backend for thp " Gerald Schaefer
2012-08-23 17:17 ` Gerald Schaefer
2012-08-24 8:07 ` Heiko Carstens
2012-08-24 8:07 ` Heiko Carstens
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=20120823171854.473831303@de.ibm.com \
--to=gerald.schaefer@de.ibm.com \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=heiko.carstens@de.ibm.com \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=schwidefsky@de.ibm.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.