Re: [git pull] m68k SLUB fix for 2.6.39

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 28, 2011 at 23:41, David Rientjes <rientjes@xxxxxxxxxx> wrote:
On Thu, 28 Apr 2011, James Bottomley wrote:

Since 4a5fa3590f09 ([PARISC] slub: fix panic with DISCONTIGMEM) from
2.6.39-rc4, you can't actually select slub on m68k without CONFIG_ADVANCED
and CONFIG_SINGLE_MEMORY_CHUNK because it otherwises defaults to
discontigmem.

James tested hppa64 with my N_NORMAL_MEMORY fix and found that it turned
an SMP box into UP. ÂIf you've tested slub on m68k without regressions,
then perhaps you'd like to add a "|| M68K" to CONFIG_SLUB?

To be honest, I really don't see that fixing it. ÂAs soon as you
allocate memory beyond range zero, you move onto a non-zero node as far
as slub is concerned, and that will oops.


Possible nodes are represented in slub with N_NORMAL_MEMORY, so the
kmem_cache_node structures are allocated and initialized based on this
nodemask. ÂAs long as the memory ranges map to nodes set in the nodemask,
this should be fine.

I think what the N_NORMAL_MEMORY patch did is just make it take a whiile
before you start allocating from that range. ÂTry executing a memory
balloon on the platform; that was how we first demonstrated the problem
on parisc.


With parisc, you encountered an oops in add_partial() because the
kmem_cache_node structure for the memory range returned by page_to_nid()
was not allocated. Âinit_kmem_cache_nodes() takes care of this for all
memory ranges set in N_NORMAL_MEMORY.

Adding Christoph and Pekka to the cc if there is additional concerns about
slub on this architecture.

My ARAnyM instance has

System Memory:	276480K
	 14 MB at 0x00000000 (ST-RAM)
	256 MB at 0x01000000 (alternate RAM)

and 137800KIB of swap, and survived the following program just fine:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    size_t size = 1048576;
    size_t total = 0;
    void *p;

    while (size) {
	p = malloc(size);
	if (!p) {
	    printf("Failed to allocate %zu bytes\n", size);
	    size /= 2;
	}
	memset(p, 0xaa, size);
	total += size;
	printf("Using %zu / 0x%zx bytes of memory\n", total, total);
    }

    printf("Finished!\n");
    return 0;
}

i.e. the OOM-killer just killed the program after it consumed all
available virtual
memory:

Out of memory: Kill process 1727 (malloctest) score 854 or sacrifice child
Killed process 1727 (malloctest) total-vm:361160kB, anon-rss:224164kB,
file-rss:0kB
malloctest: page allocation failure. order:0, mode:0x84d0

So SLUB really seems to work now.

Gr{oetje,eeting}s,

            Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
             Â Â -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux