Re: 2.6.21-rc5: swsusp: Not enough free memory

Rafael J. Wysocki
2007-04-11T09:55:51Z

On Wednesday, 11 April 2007 09:36, Jiri Slaby wrote:
> Rafael J. Wysocki napsal(a):
> > On Monday, 9 April 2007 22:07, Jiri Slaby wrote:
> >> Rafael J. Wysocki napsal(a):
> >>> Thanks for testing.
> >> [...]
> >>> --- linux-2.6.21-rc5.orig/kernel/power/swsusp.c
> >>> +++ linux-2.6.21-rc5/kernel/power/swsusp.c
> >>> @@ -229,13 +229,13 @@ int swsusp_shrink_memory(void)
> >>> size += highmem_size;
> >>> for_each_zone (zone)
> >>> if (populated_zone(zone)) {
> >>> + tmp += snapshot_additional_pages(zone);
> >>> if (is_highmem(zone)) {
> >>> highmem_size -=
> >>> zone_page_state(zone, NR_FREE_PAGES);
> >>> } else {
> >>> tmp -= zone_page_state(zone, NR_FREE_PAGES);
> >>> tmp += zone->lowmem_reserve[ZONE_NORMAL];
> >>> - tmp += snapshot_additional_pages(zone);
> >> I have bad news for you :(. I thought I had unpatched kernel, but it happens
> >> in -rc6 too.
> >
> > I guess you mean you're still seeing the 'not enough memory to suspend'
> > problem?
>
> Yes:
> Disabling non-boot CPUs ...
> kvm: disabling virtualization on CPU1
> Breaking affinity for irq 9
> CPU 1 is now offline
> SMP alternatives: switching to UP code
> CPU1 is down
> swsusp: critical section:
> swsusp: Need to copy 158309 pages
> swsusp: Not enough free memory
> Error -12 suspending
> Enabling non-boot CPUs ...
> SMP alternatives: switching to SMP code
> Booting processor 1/2 APIC 0x1
> Initializing CPU#1

How reproducible is it? I'm going to try to reproduce it on one of my boxes.

> >> Next, when this occurs, kernel CPU1 is not brought up and next suspend hangs
> >> on "Suspending consoles".
> >
> > Hm, there probably is a bug in an error path. Do you use the built in swsusp
> > or s2disk?
>
> built-in. It happens only sometimes, here, as you can see, CPU1 was
> successfully brought up.

Sigh. Then probably there's a problem with the CPU hotplugging and it'll be
hard to find, I'm afraid.

Greetings,
Rafael