From: Andrea Arcangeli <aarcange@redhat.com>
To: linux-mm@kvack.org
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Subject: [PATCH 20 of 25] add page_check_address_pmd to find the pmd mapping a transparent hugepage
Date: Sat, 14 Nov 2009 17:38:38 -0000 [thread overview]
Message-ID: <60403ce8fbd2afde28f1.1258220318@v2.random> (raw)
In-Reply-To: <patchbomb.1258220298@v2.random>
From: Andrea Arcangeli <aarcange@redhat.com>
page_check_address_pmd is used to find the pmds that might be mapping the
hugepage through the anon_vma in order to freeze and unfreeze them.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
---
diff --git a/mm/rmap.c b/mm/rmap.c
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -55,8 +55,10 @@
#include <linux/memcontrol.h>
#include <linux/mmu_notifier.h>
#include <linux/migrate.h>
+#include <linux/hugetlb.h>
#include <asm/tlbflush.h>
+#include <asm/pgalloc.h>
#include "internal.h"
@@ -260,6 +262,42 @@ unsigned long page_address_in_vma(struct
return vma_address(page, vma);
}
+#ifdef CONFIG_TRANSPARENT_HUGEPAGE
+static pmd_t *__page_check_address_pmd(struct page *page, struct mm_struct *mm,
+ unsigned long address, int notfrozen)
+{
+ pgd_t *pgd;
+ pud_t *pud;
+ pmd_t *pmd, *ret = NULL;
+
+ pgd = pgd_offset(mm, address);
+ if (!pgd_present(*pgd))
+ goto out;
+
+ pud = pud_offset(pgd, address);
+ if (!pud_present(*pud))
+ goto out;
+
+ pmd = pmd_offset(pud, address);
+ if (pmd_none(*pmd))
+ goto out;
+ VM_BUG_ON(notfrozen == 1 && pmd_trans_frozen(*pmd));
+ if (pmd_trans_huge(*pmd) && pmd_pgtable(*pmd) == page) {
+ VM_BUG_ON(notfrozen == -1 && !pmd_trans_frozen(*pmd));
+ ret = pmd;
+ }
+out:
+ return ret;
+}
+
+#define page_check_address_pmd(__page, __mm, __address) \
+ __page_check_address_pmd(__page, __mm, __address, 0)
+#define page_check_address_pmd_notfrozen(__page, __mm, __address) \
+ __page_check_address_pmd(__page, __mm, __address, 1)
+#define page_check_address_pmd_frozen(__page, __mm, __address) \
+ __page_check_address_pmd(__page, __mm, __address, -1)
+#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
+
/*
* Check that @page is mapped at @address into @mm.
*
--
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>
next prev parent reply other threads:[~2009-11-14 18:10 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-14 17:38 [PATCH 00 of 25] Transparent Hugepage support #1 Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 01 of 25] bit_lock smp memory barriers Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 02 of 25] compound_lock Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 03 of 25] alter compound get_page/put_page Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 04 of 25] clear compound mapping Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 05 of 25] add native_set_pmd_at Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 06 of 25] add pmd paravirt ops Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 07 of 25] no paravirt version of pmd ops Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 08 of 25] export maybe_mkwrite Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 09 of 25] comment reminder in destroy_compound_page Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 10 of 25] config_transparent_hugepage Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 11 of 25] add pmd mangling functions to x86 Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 12 of 25] add pmd mangling generic functions Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 13 of 25] special pmd_trans_* functions Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 14 of 25] bail out gup_fast on freezed pmd Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 15 of 25] pte alloc trans frozen Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 16 of 25] add pmd mmu_notifier helpers Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 17 of 25] clear page compound Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 18 of 25] add pmd_huge_pte to mm_struct Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 19 of 25] ensure mapcount is taken on head pages Andrea Arcangeli
2009-11-14 17:38 ` Andrea Arcangeli [this message]
2009-11-14 17:38 ` [PATCH 21 of 25] split_huge_page_mm/vma Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 22 of 25] split_huge_page paging Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 23 of 25] pmd_trans_huge migrate bugcheck Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 24 of 25] transparent hugepage core Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 25 of 25] kvm mmu transparent hugepage support Andrea Arcangeli
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=60403ce8fbd2afde28f1.1258220318@v2.random \
--to=aarcange@redhat.com \
--cc=linux-mm@kvack.org \
--cc=mtosatti@redhat.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.