Hi! > > > > So far, yes. I just tried 2 times. > > > > > > always. (I check that swap dev is on) > > > > > > Sometimes, my ia32 laptop free 0 pages too. > > > I think we should always free some pages > > > from various caches. > > > > Try this hack... it is basically mm problem I don't know how to fix, > > but this seems to help. > > Pavel > > Thanks Pavel, this hack works. > .. > Freeing memory... ^Hdone (0 pages freed) > Freeing memory... ^H-^Hdone (4636 pages freed) > Freeing memory... ^Hdone (0 pages freed) > Freeing memory... ^H-^Hdone (914 pages freed) > Freeing memory... ^Hdone (0 pages freed) > Freezing CPUs (at 0)...ok > > Any mm guru know how to fix this? Andrew, can you help? It seems free_some_memory does not really free all reclaimable memory in recent kernels. In fact, it likes to free nothing on first invocations.... Pausing and trying few times helps, but is *very* ugly. Pavel > > Index: kernel/power/disk.c > > =================================================================== > > --- 805a02ec2bcff3671d7b1e701bd1981ad2fa196c/kernel/power/disk.c > > (mode:100644) +++ > > ecd8559cc08319bb16a42aac06cf7d664157643a/kernel/power/disk.c (mode:100644) > > @@ -88,23 +92,25 @@ > > > > static void free_some_memory(void) > > { > > - unsigned int i = 0; > > - unsigned int tmp; > > - unsigned 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; > > + 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); > > + msleep_interruptible(200); > > } > > - printk("\bdone (%li pages freed)\n", pages); > > } > > > > - > > static inline void platform_finish(void) > > { > > if (pm_disk_mode == PM_DISK_PLATFORM) { > > _______________________________________________ > linux-pm mailing list > linux-pm@xxxxxxxxxxxxxx > http://lists.osdl.org/mailman/listinfo/linux-pm --