* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree [not found] ` <200905052036.24106.s.L-H@gmx.de> @ 2009-05-05 20:53 ` Greg KH 2009-05-05 22:14 ` Greg KH 1 sibling, 0 replies; 10+ messages in thread From: Greg KH @ 2009-05-05 20:53 UTC (permalink / raw) To: Stefan Lippers-Hollmann Cc: linux-kernel, kosaki.motohiro, akpm, cl, dave, ebmunson, mel, stable On Tue, May 05, 2009 at 08:36:19PM +0200, Stefan Lippers-Hollmann wrote: > Hi > > On Dienstag, 5. Mai 2009, gregkh@suse.de wrote: > [...] > > From 00a62ce91e554198ef28234c91c36f850f5a3bc9 Mon Sep 17 00:00:00 2001 > > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > > Date: Thu, 30 Apr 2009 15:08:51 -0700 > > Subject: mm: fix Committed_AS underflow on large NR_CPUS environment > > > > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > > > > commit 00a62ce91e554198ef28234c91c36f850f5a3bc9 upstream. > > > > The Committed_AS field can underflow in certain situations: > > > > > # while true; do cat /proc/meminfo | grep _AS; sleep 1; done | uniq -c > > > 1 Committed_AS: 18446744073709323392 kB > > > 11 Committed_AS: 18446744073709455488 kB > > > 6 Committed_AS: 35136 kB > > > 5 Committed_AS: 18446744073709454400 kB > > > 7 Committed_AS: 35904 kB > > > 3 Committed_AS: 18446744073709453248 kB > > > 2 Committed_AS: 34752 kB > > > 9 Committed_AS: 18446744073709453248 kB > > > 8 Committed_AS: 34752 kB > > > 3 Committed_AS: 18446744073709320960 kB > > > 7 Committed_AS: 18446744073709454080 kB > > > 3 Committed_AS: 18446744073709320960 kB > > > 5 Committed_AS: 18446744073709454080 kB > > > 6 Committed_AS: 18446744073709320960 kB > > > > Because NR_CPUS can be greater than 1000 and meminfo_proc_show() does > > not check for underflow. > > > > But NR_CPUS proportional isn't good calculation. In general, > > possibility of lock contention is proportional to the number of online > > cpus, not theorical maximum cpus (NR_CPUS). > > > > The current kernel has generic percpu-counter stuff. using it is right > > way. it makes code simplify and percpu_counter_read_positive() don't > > make underflow issue. > > This patch reproducably panics on all systems I could test so far on > 2.6.29.2 + the current stable queue: > - Acer Aspire One, Intel Atom N270, Intel 945GC chipset (i386) > - AMD64 3200+, nVidia nforce3 chipset (amd64) > - AMD64 X2 4200+, nVidia nforce4 chipset (amd64) > > Kernel panic (sorry, this is from a bad webcam and only the last part of > the messages scrolling by - I can try to get a serial console tomorrow), > taken from an AMD64 3200+, nVidia nforce3 chipset (amd64). > http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/panic.gif [198 KB] > > Reverting just this patch fixes the problem for me. > > Kernel configurations: > http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.3-sidux-686 [96 KB] > http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.6-sidux-amd64 [91 KB] Thanks for the report, I'm also getting some oopses on boot and am bisecting down the tree right now. The error looks a bit like yours, but not identical enough for me to declare that it is the same thing just yet. Give me a few more hours... thanks, greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree [not found] ` <200905052036.24106.s.L-H@gmx.de> 2009-05-05 20:53 ` patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree Greg KH @ 2009-05-05 22:14 ` Greg KH 2009-05-05 22:26 ` KOSAKI Motohiro 1 sibling, 1 reply; 10+ messages in thread From: Greg KH @ 2009-05-05 22:14 UTC (permalink / raw) To: Stefan Lippers-Hollmann Cc: linux-kernel, kosaki.motohiro, akpm, cl, dave, ebmunson, mel, stable On Tue, May 05, 2009 at 08:36:19PM +0200, Stefan Lippers-Hollmann wrote: > Hi > > On Dienstag, 5. Mai 2009, gregkh@suse.de wrote: > [...] > > From 00a62ce91e554198ef28234c91c36f850f5a3bc9 Mon Sep 17 00:00:00 2001 > > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > > Date: Thu, 30 Apr 2009 15:08:51 -0700 > > Subject: mm: fix Committed_AS underflow on large NR_CPUS environment > > > > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > > > > commit 00a62ce91e554198ef28234c91c36f850f5a3bc9 upstream. > > > > The Committed_AS field can underflow in certain situations: > > > > > # while true; do cat /proc/meminfo | grep _AS; sleep 1; done | uniq -c > > > 1 Committed_AS: 18446744073709323392 kB > > > 11 Committed_AS: 18446744073709455488 kB > > > 6 Committed_AS: 35136 kB > > > 5 Committed_AS: 18446744073709454400 kB > > > 7 Committed_AS: 35904 kB > > > 3 Committed_AS: 18446744073709453248 kB > > > 2 Committed_AS: 34752 kB > > > 9 Committed_AS: 18446744073709453248 kB > > > 8 Committed_AS: 34752 kB > > > 3 Committed_AS: 18446744073709320960 kB > > > 7 Committed_AS: 18446744073709454080 kB > > > 3 Committed_AS: 18446744073709320960 kB > > > 5 Committed_AS: 18446744073709454080 kB > > > 6 Committed_AS: 18446744073709320960 kB > > > > Because NR_CPUS can be greater than 1000 and meminfo_proc_show() does > > not check for underflow. > > > > But NR_CPUS proportional isn't good calculation. In general, > > possibility of lock contention is proportional to the number of online > > cpus, not theorical maximum cpus (NR_CPUS). > > > > The current kernel has generic percpu-counter stuff. using it is right > > way. it makes code simplify and percpu_counter_read_positive() don't > > make underflow issue. > > This patch reproducably panics on all systems I could test so far on > 2.6.29.2 + the current stable queue: > - Acer Aspire One, Intel Atom N270, Intel 945GC chipset (i386) > - AMD64 3200+, nVidia nforce3 chipset (amd64) > - AMD64 X2 4200+, nVidia nforce4 chipset (amd64) > > Kernel panic (sorry, this is from a bad webcam and only the last part of > the messages scrolling by - I can try to get a serial console tomorrow), > taken from an AMD64 3200+, nVidia nforce3 chipset (amd64). > http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/panic.gif [198 KB] > > Reverting just this patch fixes the problem for me. > > Kernel configurations: > http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.3-sidux-686 [96 KB] > http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.6-sidux-amd64 [91 KB] Yes, I just confirmed this on my machines as well, so I'm going to drop it from the stable queue. If anyone thinks it is really necessary for the 2.6.29-stable tree, please resubmit it after fixing it and testing that it works :) thanks, greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 22:14 ` Greg KH @ 2009-05-05 22:26 ` KOSAKI Motohiro 2009-05-05 22:40 ` Greg KH 2009-05-05 22:59 ` Greg KH 0 siblings, 2 replies; 10+ messages in thread From: KOSAKI Motohiro @ 2009-05-05 22:26 UTC (permalink / raw) To: Greg KH Cc: Stefan Lippers-Hollmann, linux-kernel, akpm, cl, dave, ebmunson, mel, stable 2009/5/6 Greg KH <gregkh@suse.de>: > On Tue, May 05, 2009 at 08:36:19PM +0200, Stefan Lippers-Hollmann wrote: >> Hi >> >> On Dienstag, 5. Mai 2009, gregkh@suse.de wrote: >> [...] >> > From 00a62ce91e554198ef28234c91c36f850f5a3bc9 Mon Sep 17 00:00:00 2001 >> > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> >> > Date: Thu, 30 Apr 2009 15:08:51 -0700 >> > Subject: mm: fix Committed_AS underflow on large NR_CPUS environment >> > >> > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> >> > >> > commit 00a62ce91e554198ef28234c91c36f850f5a3bc9 upstream. >> > >> > The Committed_AS field can underflow in certain situations: >> > >> > > # while true; do cat /proc/meminfo | grep _AS; sleep 1; done | uniq -c >> > > 1 Committed_AS: 18446744073709323392 kB >> > > 11 Committed_AS: 18446744073709455488 kB >> > > 6 Committed_AS: 35136 kB >> > > 5 Committed_AS: 18446744073709454400 kB >> > > 7 Committed_AS: 35904 kB >> > > 3 Committed_AS: 18446744073709453248 kB >> > > 2 Committed_AS: 34752 kB >> > > 9 Committed_AS: 18446744073709453248 kB >> > > 8 Committed_AS: 34752 kB >> > > 3 Committed_AS: 18446744073709320960 kB >> > > 7 Committed_AS: 18446744073709454080 kB >> > > 3 Committed_AS: 18446744073709320960 kB >> > > 5 Committed_AS: 18446744073709454080 kB >> > > 6 Committed_AS: 18446744073709320960 kB >> > >> > Because NR_CPUS can be greater than 1000 and meminfo_proc_show() does >> > not check for underflow. >> > >> > But NR_CPUS proportional isn't good calculation. In general, >> > possibility of lock contention is proportional to the number of online >> > cpus, not theorical maximum cpus (NR_CPUS). >> > >> > The current kernel has generic percpu-counter stuff. using it is right >> > way. it makes code simplify and percpu_counter_read_positive() don't >> > make underflow issue. >> >> This patch reproducably panics on all systems I could test so far on >> 2.6.29.2 + the current stable queue: >> - Acer Aspire One, Intel Atom N270, Intel 945GC chipset (i386) >> - AMD64 3200+, nVidia nforce3 chipset (amd64) >> - AMD64 X2 4200+, nVidia nforce4 chipset (amd64) >> >> Kernel panic (sorry, this is from a bad webcam and only the last part of >> the messages scrolling by - I can try to get a serial console tomorrow), >> taken from an AMD64 3200+, nVidia nforce3 chipset (amd64). >> http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/panic.gif [198 KB] >> >> Reverting just this patch fixes the problem for me. >> >> Kernel configurations: >> http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.3-sidux-686 [96 KB] >> http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.6-sidux-amd64 [91 KB] > > Yes, I just confirmed this on my machines as well, so I'm going to drop > it from the stable queue. > > If anyone thinks it is really necessary for the 2.6.29-stable tree, > please resubmit it after fixing it and testing that it works :) > > thanks, Could you please post oops log? current mmotm (include this patch) works fine on my x86_64 box. Then, I have no hint now ;-) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 22:26 ` KOSAKI Motohiro @ 2009-05-05 22:40 ` Greg KH 2009-05-05 22:58 ` KOSAKI Motohiro 2009-05-05 22:59 ` Greg KH 1 sibling, 1 reply; 10+ messages in thread From: Greg KH @ 2009-05-05 22:40 UTC (permalink / raw) To: KOSAKI Motohiro Cc: Stefan Lippers-Hollmann, linux-kernel, akpm, cl, dave, ebmunson, mel, stable On Wed, May 06, 2009 at 07:26:51AM +0900, KOSAKI Motohiro wrote: > 2009/5/6 Greg KH <gregkh@suse.de>: > > On Tue, May 05, 2009 at 08:36:19PM +0200, Stefan Lippers-Hollmann wrote: > >> Hi > >> > >> On Dienstag, 5. Mai 2009, gregkh@suse.de wrote: > >> [...] > >> > From 00a62ce91e554198ef28234c91c36f850f5a3bc9 Mon Sep 17 00:00:00 2001 > >> > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > >> > Date: Thu, 30 Apr 2009 15:08:51 -0700 > >> > Subject: mm: fix Committed_AS underflow on large NR_CPUS environment > >> > > >> > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > >> > > >> > commit 00a62ce91e554198ef28234c91c36f850f5a3bc9 upstream. > >> > > >> > The Committed_AS field can underflow in certain situations: > >> > > >> > > # while true; do cat /proc/meminfo | grep _AS; sleep 1; done | uniq -c > >> > > 1 Committed_AS: 18446744073709323392 kB > >> > > 11 Committed_AS: 18446744073709455488 kB > >> > > 6 Committed_AS: 35136 kB > >> > > 5 Committed_AS: 18446744073709454400 kB > >> > > 7 Committed_AS: 35904 kB > >> > > 3 Committed_AS: 18446744073709453248 kB > >> > > 2 Committed_AS: 34752 kB > >> > > 9 Committed_AS: 18446744073709453248 kB > >> > > 8 Committed_AS: 34752 kB > >> > > 3 Committed_AS: 18446744073709320960 kB > >> > > 7 Committed_AS: 18446744073709454080 kB > >> > > 3 Committed_AS: 18446744073709320960 kB > >> > > 5 Committed_AS: 18446744073709454080 kB > >> > > 6 Committed_AS: 18446744073709320960 kB > >> > > >> > Because NR_CPUS can be greater than 1000 and meminfo_proc_show() does > >> > not check for underflow. > >> > > >> > But NR_CPUS proportional isn't good calculation. In general, > >> > possibility of lock contention is proportional to the number of online > >> > cpus, not theorical maximum cpus (NR_CPUS). > >> > > >> > The current kernel has generic percpu-counter stuff. using it is right > >> > way. it makes code simplify and percpu_counter_read_positive() don't > >> > make underflow issue. > >> > >> This patch reproducably panics on all systems I could test so far on > >> 2.6.29.2 + the current stable queue: > >> - Acer Aspire One, Intel Atom N270, Intel 945GC chipset (i386) > >> - AMD64 3200+, nVidia nforce3 chipset (amd64) > >> - AMD64 X2 4200+, nVidia nforce4 chipset (amd64) > >> > >> Kernel panic (sorry, this is from a bad webcam and only the last part of > >> the messages scrolling by - I can try to get a serial console tomorrow), > >> taken from an AMD64 3200+, nVidia nforce3 chipset (amd64). > >> http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/panic.gif [198 KB] > >> > >> Reverting just this patch fixes the problem for me. > >> > >> Kernel configurations: > >> http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.3-sidux-686 [96 KB] > >> http://sidux.com/slh/mm-fix-committed_as-underflow-on-large-nr_cpus-environment/config-2.6.29-2.slh.5.6-sidux-amd64 [91 KB] > > > > Yes, I just confirmed this on my machines as well, so I'm going to drop > > it from the stable queue. > > > > If anyone thinks it is really necessary for the 2.6.29-stable tree, > > please resubmit it after fixing it and testing that it works :) > > > > thanks, > > Could you please post oops log? > current mmotm (include this patch) works fine on my x86_64 box. Then, > I have no hint now ;-) Ok, I'll apply the patch and reboot and take a picture of it... ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 22:40 ` Greg KH @ 2009-05-05 22:58 ` KOSAKI Motohiro 0 siblings, 0 replies; 10+ messages in thread From: KOSAKI Motohiro @ 2009-05-05 22:58 UTC (permalink / raw) To: Greg KH Cc: Stefan Lippers-Hollmann, linux-kernel, akpm, cl, dave, ebmunson, mel, stable >> Could you please post oops log? >> current mmotm (include this patch) works fine on my x86_64 box. Then, >> I have no hint now ;-) > > Ok, I'll apply the patch and reboot and take a picture of it... umm. Greg, your stable queue has following function? 2.6.29.2 + this patch don't make correct mmap_init() on my box. (instead, changing unrelated function) Please check. -------------------------------------------------------------------------------------- /* * initialise the VMA slab */ void __init mmap_init(void) { int ret; ret = percpu_counter_init(&vm_committed_as, 0); VM_BUG_ON(ret); vm_area_cachep = kmem_cache_create("vm_area_struct", sizeof(struct vm_area_struct), 0, SLAB_PANIC, NULL); } -------------------------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 22:26 ` KOSAKI Motohiro 2009-05-05 22:40 ` Greg KH @ 2009-05-05 22:59 ` Greg KH 2009-05-05 23:12 ` KOSAKI Motohiro 1 sibling, 1 reply; 10+ messages in thread From: Greg KH @ 2009-05-05 22:59 UTC (permalink / raw) To: KOSAKI Motohiro Cc: Stefan Lippers-Hollmann, linux-kernel, akpm, cl, dave, ebmunson, mel, stable [-- Attachment #1: Type: text/plain, Size: 261 bytes --] On Wed, May 06, 2009 at 07:26:51AM +0900, KOSAKI Motohiro wrote: > Could you please post oops log? > current mmotm (include this patch) works fine on my x86_64 box. Then, > I have no hint now ;-) Attached is a picture of the oops. Hope this helps, greg k-h [-- Attachment #2: mm-fix-oops.jpg --] [-- Type: image/jpeg, Size: 163475 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 22:59 ` Greg KH @ 2009-05-05 23:12 ` KOSAKI Motohiro 2009-05-06 6:20 ` Greg KH 2009-05-06 16:46 ` Stefan Lippers-Hollmann 0 siblings, 2 replies; 10+ messages in thread From: KOSAKI Motohiro @ 2009-05-05 23:12 UTC (permalink / raw) To: Greg KH Cc: Stefan Lippers-Hollmann, linux-kernel, akpm, cl, dave, ebmunson, mel, stable [-- Attachment #1: Type: text/plain, Size: 446 bytes --] > On Wed, May 06, 2009 at 07:26:51AM +0900, KOSAKI Motohiro wrote: >> Could you please post oops log? >> current mmotm (include this patch) works fine on my x86_64 box. Then, >> I have no hint now ;-) > > Attached is a picture of the oops. > > Hope this helps, OK, the reason is 99% mis-applied patch. I've made rebased patch. in my environment 2.6.29.2 + original patch: panic 2.6.29.2 + rebased patch: works well Could you please try it? [-- Attachment #2: committed_as-for-2.6.29.2.patch --] [-- Type: application/octet-stream, Size: 7816 bytes --] commit 12adffadf709dd675f736d7d848e24c3db03a1e4 Author: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Date: Tue Apr 28 22:48:11 2009 +0200 The Committed_AS field can underflow in certain situations: > # while true; do cat /proc/meminfo | grep _AS; sleep 1; done | uniq -c > 1 Committed_AS: 18446744073709323392 kB > 11 Committed_AS: 18446744073709455488 kB > 6 Committed_AS: 35136 kB > 5 Committed_AS: 18446744073709454400 kB > 7 Committed_AS: 35904 kB > 3 Committed_AS: 18446744073709453248 kB > 2 Committed_AS: 34752 kB > 9 Committed_AS: 18446744073709453248 kB > 8 Committed_AS: 34752 kB > 3 Committed_AS: 18446744073709320960 kB > 7 Committed_AS: 18446744073709454080 kB > 3 Committed_AS: 18446744073709320960 kB > 5 Committed_AS: 18446744073709454080 kB > 6 Committed_AS: 18446744073709320960 kB Because NR_CPUS can be greater than 1000 and meminfo_proc_show() does not check for underflow. But NR_CPUS proportional isn't good calculation. In general, possibility of lock contention is proportional to the number of online cpus, not theorical maximum cpus (NR_CPUS). The current kernel has generic percpu-counter stuff. using it is right way. it makes code simplify and percpu_counter_read_positive() don't make underflow issue. Reported-by: Dave Hansen <dave@linux.vnet.ibm.com> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Eric B Munson <ebmunson@us.ibm.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: Christoph Lameter <cl@linux-foundation.org> Cc: <stable@kernel.org> [All kernel versions] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- fs/proc/meminfo.c | 2 +- include/linux/mman.h | 9 +++------ mm/mmap.c | 12 ++++++------ mm/nommu.c | 13 +++++++------ mm/swap.c | 46 ---------------------------------------------- 5 files changed, 17 insertions(+), 65 deletions(-) Index: b/fs/proc/meminfo.c =================================================================== --- a/fs/proc/meminfo.c 2009-05-06 06:44:13.000000000 +0900 +++ b/fs/proc/meminfo.c 2009-05-06 07:33:05.000000000 +0900 @@ -35,7 +35,7 @@ static int meminfo_proc_show(struct seq_ #define K(x) ((x) << (PAGE_SHIFT - 10)) si_meminfo(&i); si_swapinfo(&i); - committed = atomic_long_read(&vm_committed_space); + committed = percpu_counter_read_positive(&vm_committed_as); allowed = ((totalram_pages - hugetlb_total_pages()) * sysctl_overcommit_ratio / 100) + total_swap_pages; Index: b/include/linux/mman.h =================================================================== --- a/include/linux/mman.h 2009-05-06 06:45:18.000000000 +0900 +++ b/include/linux/mman.h 2009-05-06 07:33:05.000000000 +0900 @@ -12,21 +12,18 @@ #ifdef __KERNEL__ #include <linux/mm.h> +#include <linux/percpu_counter.h> #include <asm/atomic.h> extern int sysctl_overcommit_memory; extern int sysctl_overcommit_ratio; -extern atomic_long_t vm_committed_space; +extern struct percpu_counter vm_committed_as; -#ifdef CONFIG_SMP -extern void vm_acct_memory(long pages); -#else static inline void vm_acct_memory(long pages) { - atomic_long_add(pages, &vm_committed_space); + percpu_counter_add(&vm_committed_as, pages); } -#endif static inline void vm_unacct_memory(long pages) { Index: b/mm/mmap.c =================================================================== --- a/mm/mmap.c 2009-05-06 06:47:34.000000000 +0900 +++ b/mm/mmap.c 2009-05-06 07:51:41.000000000 +0900 @@ -84,7 +84,7 @@ EXPORT_SYMBOL(vm_get_page_prot); int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */ int sysctl_overcommit_ratio = 50; /* default is 50% */ int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; -atomic_long_t vm_committed_space = ATOMIC_LONG_INIT(0); +struct percpu_counter vm_committed_as; /* * Check that a process has enough memory to allocate a new virtual @@ -178,11 +178,7 @@ int __vm_enough_memory(struct mm_struct if (mm) allowed -= mm->total_vm / 32; - /* - * cast `allowed' as a signed long because vm_committed_space - * sometimes has a negative value - */ - if (atomic_long_read(&vm_committed_space) < (long)allowed) + if (percpu_counter_read_positive(&vm_committed_as) < allowed) return 0; error: vm_unacct_memory(pages); @@ -2477,6 +2473,10 @@ void mm_drop_all_locks(struct mm_struct */ void __init mmap_init(void) { + int ret; + + ret = percpu_counter_init(&vm_committed_as, 0); + VM_BUG_ON(ret); vm_area_cachep = kmem_cache_create("vm_area_struct", sizeof(struct vm_area_struct), 0, SLAB_PANIC, NULL); Index: b/mm/nommu.c =================================================================== --- a/mm/nommu.c 2009-05-06 06:35:33.000000000 +0900 +++ b/mm/nommu.c 2009-05-06 07:52:17.000000000 +0900 @@ -62,7 +62,7 @@ void *high_memory; struct page *mem_map; unsigned long max_mapnr; unsigned long num_physpages; -atomic_long_t vm_committed_space = ATOMIC_LONG_INIT(0); +struct percpu_counter vm_committed_as; int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */ int sysctl_overcommit_ratio = 50; /* default is 50% */ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT; @@ -463,6 +463,10 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) */ void __init mmap_init(void) { + int ret; + + ret = percpu_counter_init(&vm_committed_as, 0); + VM_BUG_ON(ret); vm_region_jar = kmem_cache_create("vm_region_jar", sizeof(struct vm_region), 0, SLAB_PANIC, NULL); @@ -1849,12 +1853,9 @@ int __vm_enough_memory(struct mm_struct if (mm) allowed -= mm->total_vm / 32; - /* - * cast `allowed' as a signed long because vm_committed_space - * sometimes has a negative value - */ - if (atomic_long_read(&vm_committed_space) < (long)allowed) + if (percpu_counter_read_positive(&vm_committed_as) < allowed) return 0; + error: vm_unacct_memory(pages); Index: b/mm/swap.c =================================================================== --- a/mm/swap.c 2009-05-06 06:35:34.000000000 +0900 +++ b/mm/swap.c 2009-05-06 07:33:05.000000000 +0900 @@ -514,49 +514,6 @@ unsigned pagevec_lookup_tag(struct pagev EXPORT_SYMBOL(pagevec_lookup_tag); -#ifdef CONFIG_SMP -/* - * We tolerate a little inaccuracy to avoid ping-ponging the counter between - * CPUs - */ -#define ACCT_THRESHOLD max(16, NR_CPUS * 2) - -static DEFINE_PER_CPU(long, committed_space); - -void vm_acct_memory(long pages) -{ - long *local; - - preempt_disable(); - local = &__get_cpu_var(committed_space); - *local += pages; - if (*local > ACCT_THRESHOLD || *local < -ACCT_THRESHOLD) { - atomic_long_add(*local, &vm_committed_space); - *local = 0; - } - preempt_enable(); -} - -#ifdef CONFIG_HOTPLUG_CPU - -/* Drop the CPU's cached committed space back into the central pool. */ -static int cpu_swap_callback(struct notifier_block *nfb, - unsigned long action, - void *hcpu) -{ - long *committed; - - committed = &per_cpu(committed_space, (long)hcpu); - if (action == CPU_DEAD || action == CPU_DEAD_FROZEN) { - atomic_long_add(*committed, &vm_committed_space); - *committed = 0; - drain_cpu_pagevecs((long)hcpu); - } - return NOTIFY_OK; -} -#endif /* CONFIG_HOTPLUG_CPU */ -#endif /* CONFIG_SMP */ - /* * Perform any setup for the swap system */ @@ -577,7 +534,4 @@ void __init swap_setup(void) * Right now other parts of the system means that we * _really_ don't want to cluster much more */ -#ifdef CONFIG_HOTPLUG_CPU - hotcpu_notifier(cpu_swap_callback, 0); -#endif } ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 23:12 ` KOSAKI Motohiro @ 2009-05-06 6:20 ` Greg KH 2009-05-06 16:37 ` [stable] " Greg KH 2009-05-06 16:46 ` Stefan Lippers-Hollmann 1 sibling, 1 reply; 10+ messages in thread From: Greg KH @ 2009-05-06 6:20 UTC (permalink / raw) To: KOSAKI Motohiro Cc: Stefan Lippers-Hollmann, linux-kernel, akpm, cl, dave, ebmunson, mel, stable On Wed, May 06, 2009 at 08:12:21AM +0900, KOSAKI Motohiro wrote: > > On Wed, May 06, 2009 at 07:26:51AM +0900, KOSAKI Motohiro wrote: > >> Could you please post oops log? > >> current mmotm (include this patch) works fine on my x86_64 box. Then, > >> I have no hint now ;-) > > > > Attached is a picture of the oops. > > > > Hope this helps, > > OK, the reason is 99% mis-applied patch. I've made rebased patch. > > in my environment > > 2.6.29.2 + original patch: panic > 2.6.29.2 + rebased patch: works well > > Could you please try it? thank you for looking into this, I'll try it out tomorrow morning and let you know how it goes. greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [stable] patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-06 6:20 ` Greg KH @ 2009-05-06 16:37 ` Greg KH 0 siblings, 0 replies; 10+ messages in thread From: Greg KH @ 2009-05-06 16:37 UTC (permalink / raw) To: Greg KH Cc: KOSAKI Motohiro, cl, mel, Stefan Lippers-Hollmann, linux-kernel, dave, ebmunson, akpm, stable On Tue, May 05, 2009 at 11:20:58PM -0700, Greg KH wrote: > On Wed, May 06, 2009 at 08:12:21AM +0900, KOSAKI Motohiro wrote: > > > On Wed, May 06, 2009 at 07:26:51AM +0900, KOSAKI Motohiro wrote: > > >> Could you please post oops log? > > >> current mmotm (include this patch) works fine on my x86_64 box. Then, > > >> I have no hint now ;-) > > > > > > Attached is a picture of the oops. > > > > > > Hope this helps, > > > > OK, the reason is 99% mis-applied patch. I've made rebased patch. > > > > in my environment > > > > 2.6.29.2 + original patch: panic > > 2.6.29.2 + rebased patch: works well > > > > Could you please try it? > > thank you for looking into this, I'll try it out tomorrow morning and > let you know how it goes. Yes, this works! Thanks so much for working so quickly to resolve this. I've added the updated patch to the .29-stable queue. greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree 2009-05-05 23:12 ` KOSAKI Motohiro 2009-05-06 6:20 ` Greg KH @ 2009-05-06 16:46 ` Stefan Lippers-Hollmann 1 sibling, 0 replies; 10+ messages in thread From: Stefan Lippers-Hollmann @ 2009-05-06 16:46 UTC (permalink / raw) To: KOSAKI Motohiro Cc: Greg KH, linux-kernel, akpm, cl, dave, ebmunson, mel, stable [-- Attachment #1: Type: text/plain, Size: 703 bytes --] Hi On Mittwoch, 6. Mai 2009, KOSAKI Motohiro wrote: > > On Wed, May 06, 2009 at 07:26:51AM +0900, KOSAKI Motohiro wrote: > >> Could you please post oops log? > >> current mmotm (include this patch) works fine on my x86_64 box. Then, > >> I have no hint now ;-) > > > > Attached is a picture of the oops. > > > > Hope this helps, > > OK, the reason is 99% mis-applied patch. I've made rebased patch. > > in my environment > > 2.6.29.2 + original patch: panic > 2.6.29.2 + rebased patch: works well > > Could you please try it? This patch seems to fix the problems, it's working without any issues on all systems I could test so far. Thank you Stefan Lippers-Hollmann [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2009-05-06 17:02 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20090504220454.3F71148FB8@coco.kroah.org>
[not found] ` <200905052036.24106.s.L-H@gmx.de>
2009-05-05 20:53 ` patch mm-fix-committed_as-underflow-on-large-nr_cpus-environment.patch added to 2.6.29-stable tree Greg KH
2009-05-05 22:14 ` Greg KH
2009-05-05 22:26 ` KOSAKI Motohiro
2009-05-05 22:40 ` Greg KH
2009-05-05 22:58 ` KOSAKI Motohiro
2009-05-05 22:59 ` Greg KH
2009-05-05 23:12 ` KOSAKI Motohiro
2009-05-06 6:20 ` Greg KH
2009-05-06 16:37 ` [stable] " Greg KH
2009-05-06 16:46 ` Stefan Lippers-Hollmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox