All of lore.kernel.org
 help / color / mirror / Atom feed
From: Teck Choon Giam <giamteckchoon@gmail.com>
To: MaoXiaoyun <tinnycloud@hotmail.com>
Cc: jeremy@goop.org, xen devel <xen-devel@lists.xensource.com>,
	keir@xen.org, ian.campbell@citrix.com, konrad.wilk@oracle.com,
	dave@ivt.com.au
Subject: Re: kernel BUG at arch/x86/xen/mmu.c:1872
Date: Mon, 11 Apr 2011 20:22:30 +0800	[thread overview]
Message-ID: <BANLkTi=L_2QApW3=y8MjNas_WbwdZASxgA@mail.gmail.com> (raw)
In-Reply-To: <BANLkTimkMgYNyANcKiZu5tJTL4==zdP3xg@mail.gmail.com>

From: Giam Teck Choon <giamteckchoon@gmail.com>

vmalloc: eagerly clear ptes on vunmap

Backport from commit 64141da587241301ce8638cc945f8b67853156ec to 2.6.32.36

URL: http://git.kernel.org/?p=linux/kernel/git/jeremy/xen.git;a=commit;h=64141da587241301ce8638cc945f8b67853156ec

Without this patch, kernel BUG at arch/x86/xen/mmu.c:1860 or kernel BUG at
arch/x86/xen/mmu.c:1872 is easily triggered when CONFIG_DEBUG_PAGEALLOC is
unset especially doing LVM snapshots.

Signed-off-by: Giam Teck Choon <giamteckchoon@gmail.com>
---
 arch/x86/xen/mmu.c      |    2 --
 include/linux/vmalloc.h |    2 --
 mm/vmalloc.c            |   28 +++++++++++++++++-----------
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index fa36ab8..204e3ba 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -2430,8 +2430,6 @@ void __init xen_init_mmu_ops(void)
 	x86_init.paging.pagetable_setup_start = xen_pagetable_setup_start;
 	x86_init.paging.pagetable_setup_done = xen_pagetable_setup_done;
 	pv_mmu_ops = xen_mmu_ops;
-
-	vmap_lazy_unmap = false;
 }

 /* Protected by xen_reservation_lock. */
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index 1a2ba21..3c123c3 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -7,8 +7,6 @@

 struct vm_area_struct;		/* vma defining user mapping in mm_types.h */

-extern bool vmap_lazy_unmap;
-
 /* bits in flags of vmalloc's vm_struct below */
 #define VM_IOREMAP	0x00000001	/* ioremap() and friends */
 #define VM_ALLOC	0x00000002	/* vmalloc() */
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 4f701c2..80cbd7b 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -31,8 +31,6 @@
 #include <asm/tlbflush.h>
 #include <asm/shmparam.h>

-bool vmap_lazy_unmap __read_mostly = true;
-
 /*** Page table manipulation functions ***/

 static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end)
@@ -503,9 +501,6 @@ static unsigned long lazy_max_pages(void)
 {
 	unsigned int log;

-	if (!vmap_lazy_unmap)
-		return 0;
-
 	log = fls(num_online_cpus());

 	return log * (32UL * 1024 * 1024 / PAGE_SIZE);
@@ -566,7 +561,6 @@ static void __purge_vmap_area_lazy(unsigned long
*start, unsigned long *end,
 			if (va->va_end > *end)
 				*end = va->va_end;
 			nr += (va->va_end - va->va_start) >> PAGE_SHIFT;
-			unmap_vmap_area(va);
 			list_add_tail(&va->purge_list, &valist);
 			va->flags |= VM_LAZY_FREEING;
 			va->flags &= ~VM_LAZY_FREE;
@@ -612,10 +606,11 @@ static void purge_vmap_area_lazy(void)
 }

 /*
- * Free and unmap a vmap area, caller ensuring flush_cache_vunmap had been
- * called for the correct range previously.
+ * Free a vmap area, caller ensuring that the area has been unmapped
+ * and flush_cache_vunmap had been called for the correct range
+ * previously.
  */
-static void free_unmap_vmap_area_noflush(struct vmap_area *va)
+static void free_vmap_area_noflush(struct vmap_area *va)
 {
 	va->flags |= VM_LAZY_FREE;
 	atomic_add((va->va_end - va->va_start) >> PAGE_SHIFT, &vmap_lazy_nr);
@@ -624,6 +619,16 @@ static void free_unmap_vmap_area_noflush(struct
vmap_area *va)
 }

 /*
+ * Free and unmap a vmap area, caller ensuring flush_cache_vunmap had been
+ * called for the correct range previously.
+ */
+static void free_unmap_vmap_area_noflush(struct vmap_area *va)
+{
+	unmap_vmap_area(va);
+	free_vmap_area_noflush(va);
+}
+
+/*
  * Free and unmap a vmap area
  */
 static void free_unmap_vmap_area(struct vmap_area *va)
@@ -799,7 +804,7 @@ static void free_vmap_block(struct vmap_block *vb)
 	spin_unlock(&vmap_block_tree_lock);
 	BUG_ON(tmp != vb);

-	free_unmap_vmap_area_noflush(vb->va);
+	free_vmap_area_noflush(vb->va);
 	call_rcu(&vb->rcu_head, rcu_free_vb);
 }

@@ -936,6 +941,8 @@ static void vb_free(const void *addr, unsigned long size)
 	rcu_read_unlock();
 	BUG_ON(!vb);

+	vunmap_page_range((unsigned long)addr, (unsigned long)addr + size);
+
 	spin_lock(&vb->lock);
 	BUG_ON(bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order));

@@ -988,7 +995,6 @@ void vm_unmap_aliases(void)

 				s = vb->va->va_start + (i << PAGE_SHIFT);
 				e = vb->va->va_start + (j << PAGE_SHIFT);
-				vunmap_page_range(s, e);
 				flush = 1;

 				if (s < start)

  reply	other threads:[~2011-04-11 12:22 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <COL0-MC1-F14hmBzxHs00230882@col0-mc1-f14.Col0.hotmail.com>
2011-04-08 11:24 ` kernel BUG at arch/x86/xen/mmu.c:1860! MaoXiaoyun
2011-04-08 11:46   ` MaoXiaoyun
2011-04-10  3:57   ` kernel BUG at arch/x86/xen/mmu.c:1872 MaoXiaoyun
2011-04-10  4:29   ` MaoXiaoyun
2011-04-10 13:57     ` MaoXiaoyun
2011-04-10 20:14       ` Teck Choon Giam
2011-04-11 12:16         ` Teck Choon Giam
2011-04-11 12:22           ` Teck Choon Giam [this message]
2011-04-11 12:31           ` MaoXiaoyun
2011-04-11 15:25             ` Teck Choon Giam
2011-04-12  3:30               ` MaoXiaoyun
2011-04-12 16:08                 ` Teck Choon Giam
2011-04-11 18:08             ` Jeremy Fitzhardinge
2011-04-12  3:35               ` MaoXiaoyun
2011-04-12  6:48                 ` Grant Table Error on 2.6.32.36 + Xen 4.0.1 MaoXiaoyun
2011-04-12  8:46                   ` Konrad Rzeszutek Wilk
2011-04-12  9:02                     ` MaoXiaoyun
2011-04-12  9:11                 ` Kernel BUG at arch/x86/mm/tlb.c:61 MaoXiaoyun
2011-04-12 10:00                   ` Konrad Rzeszutek Wilk
2011-04-12 10:10                     ` MaoXiaoyun
2011-04-14  6:16                     ` MaoXiaoyun
2011-04-14  7:26                       ` Teck Choon Giam
2011-04-14  7:56                         ` MaoXiaoyun
2011-04-14 11:16                           ` MaoXiaoyun
2011-04-15 12:23                             ` MaoXiaoyun
2011-04-15 21:22                               ` Jeremy Fitzhardinge
2011-04-18 15:20                                 ` MaoXiaoyun
2011-04-25  3:15                                 ` MaoXiaoyun
2011-04-26  5:52                                   ` Tian, Kevin
2011-04-26  7:04                                     ` MaoXiaoyun
2011-04-26  8:31                                       ` Tian, Kevin
2011-04-28 23:29                                     ` Jeremy Fitzhardinge
2011-04-29  0:19                                       ` Tian, Kevin
2011-04-29  1:50                                         ` MaoXiaoyun
2011-04-29  1:57                                           ` Tian, Kevin
2011-04-25  4:42                                 ` MaoXiaoyun
2011-04-25 12:54                                   ` MaoXiaoyun
2011-04-25 13:11                                     ` MaoXiaoyun
2011-04-25 15:05                                       ` MaoXiaoyun
2011-04-26  5:55                                         ` Tian, Kevin
2011-04-12 16:32               ` kernel BUG at arch/x86/xen/mmu.c:1872 Teck Choon Giam

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='BANLkTi=L_2QApW3=y8MjNas_WbwdZASxgA@mail.gmail.com' \
    --to=giamteckchoon@gmail.com \
    --cc=dave@ivt.com.au \
    --cc=ian.campbell@citrix.com \
    --cc=jeremy@goop.org \
    --cc=keir@xen.org \
    --cc=konrad.wilk@oracle.com \
    --cc=tinnycloud@hotmail.com \
    --cc=xen-devel@lists.xensource.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.