public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* 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