linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Andrea Arcangeli <aarcange@redhat.com>
To: linux-mm@kvack.org
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Subject: [PATCH 22 of 25] split_huge_page paging
Date: Sat, 14 Nov 2009 17:38:40 -0000	[thread overview]
Message-ID: <57e7f057bfa6b6455213.1258220320@v2.random> (raw)
In-Reply-To: <patchbomb.1258220298@v2.random>

From: Andrea Arcangeli <aarcange@redhat.com>

Paging logic that splits the page before it is unmapped and added to swap to
ensure backwards compatibility with the legacy swap code. Eventually swap
should natively pageout the hugepages to increase performance and decrease
seeking and fragmentation of swap space. swapoff can just skip over huge pmd as
they cannot be part of swap yet.

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
@@ -1248,6 +1248,10 @@ int try_to_unmap(struct page *page, enum
 
 	BUG_ON(!PageLocked(page));
 
+	if (unlikely(PageCompound(page)))
+		if (unlikely(split_huge_page(page)))
+			return SWAP_AGAIN;
+
 	if (PageAnon(page))
 		ret = try_to_unmap_anon(page, flags);
 	else
diff --git a/mm/swap_state.c b/mm/swap_state.c
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -152,6 +152,10 @@ int add_to_swap(struct page *page)
 	VM_BUG_ON(!PageLocked(page));
 	VM_BUG_ON(!PageUptodate(page));
 
+	if (unlikely(PageCompound(page)))
+		if (unlikely(split_huge_page(page)))
+			return 0;
+
 	entry = get_swap_page();
 	if (!entry.val)
 		return 0;
diff --git a/mm/swapfile.c b/mm/swapfile.c
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -896,6 +896,8 @@ static inline int unuse_pmd_range(struct
 	pmd = pmd_offset(pud, addr);
 	do {
 		next = pmd_addr_end(addr, end);
+		if (unlikely(pmd_trans_huge(*pmd)))
+			continue;
 		if (pmd_none_or_clear_bad(pmd))
 			continue;
 		ret = unuse_pte_range(vma, pmd, addr, next, entry, page);

--
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>

  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 ` [PATCH 20 of 25] add page_check_address_pmd to find the pmd mapping a transparent hugepage Andrea Arcangeli
2009-11-14 17:38 ` [PATCH 21 of 25] split_huge_page_mm/vma Andrea Arcangeli
2009-11-14 17:38 ` Andrea Arcangeli [this message]
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=57e7f057bfa6b6455213.1258220320@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox