Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: swsusp: 8-order memory allocations problem (was: Re: Fix random crashes in x86-64 swsusp) | Date | Wed, 13 Oct 2004 19:24:34 +0200 |
| |
Hi,
On Sunday 10 of October 2004 15:48, Pavel Machek wrote: [-- snip --] > > It's sort of strange, because there were 250 meg of RAM available, > > out of 500, at that time. > > Well, you have 250MB free, but apparently not enough contignuous free pages... > > You may try this one, it may reduce probability of this kind of > failure... > > Pavel > > --- clean/kernel/power/disk.c 2004-10-01 00:30:32.000000000 +0200 > +++ linux/kernel/power/disk.c 2004-10-02 19:43:06.000000000 +0200 > @@ -85,13 +89,26 @@ > > static void free_some_memory(void) > { > - printk("Freeing memory: "); > - while (shrink_all_memory(10000)) > - printk("."); > - printk("|\n"); > + int i; > + for (i=0; i<5; i++) { > + int i = 0, tmp; > + long pages = 0; > + char *p = "-\\|/"; > + > + printk("Freeing memory... "); > + while ((tmp = shrink_all_memory(10000))) { > + pages += tmp; > + printk("\b%c", p[i]); > + i++; > + if (i > 3) > + i = 0; > + } > + printk("\bdone (%li pages freed)\n", pages); > + current->state = TASK_INTERRUPTIBLE; > + schedule_timeout(HZ/5); > + } > } > > - > static inline void platform_finish(void) > { > if (pm_disk_mode == PM_DISK_PLATFORM) { > --
I'm giving it a try. Without this patch I get an 8-order allocation failure almost every time after using a computer for a day. This one is pretty scary, IMO (there are 5 times more pages free than needed to be copied and still it cannot allocate enough memory):
Stopping tasks: ============================================================| Freeing memory: .............................................................................................................| PM: Attempting to suspend to disk. PM: snapshotting memory. swsusp: critical section: ..<7>[nosave pfn 0x58d]......................................................................................................... ..swsusp: Need to copy 21035 pages suspend: (pages needed: 21035 + 512 free: 109844) hibernate.sh: page allocation failure. order:8, mode:0x120 Oct 13 17:57:34 albercik kernel: Call Trace:<ffffffff8016ec2d>{__alloc_pages+749} <ffffffff8016ecd1>{__get_free_pages+33} <ffffffff80161b93>{suspend_prepare_image+531} <ffffffff8026e977>{pci_device_suspend+71} <ffffffff80161e26>{swsusp_swap_check+22} <ffffffff802eae02>{suspend_device+50} <ffffffff80120dec>{swsusp_arch_suspend+124} <ffffffff8016123c>{swsusp_suspend+12} <ffffffff8016239a>{pm_suspend_disk+90} <ffffffff8015ff54>{enter_state+68} <ffffffff802aed4d>{acpi_system_write_sleep+100} <ffffffff80194b24>{vfs_write+228} <ffffffff80194c63>{sys_write+83} <ffffffff80110c72>{system_call+126} Oct 13 17:57:41 albercik kernel: suspend: Allocating pagedir failed.
Greets, RJW
-- - Would you tell me, please, which way I ought to go from here? - That depends a good deal on where you want to get to. -- Lewis Carroll "Alice's Adventures in Wonderland" - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |