• Jeremy Kerr's avatar
    powerpc: Dynamically allocate slb_shadow from memblock · 6f4441ef
    Jeremy Kerr authored
    Currently, the slb_shadow buffer is our largest symbol:
    
      [jk@pablo linux]$ nm --size-sort -r -S obj/vmlinux | head -1
      c000000000da0000 0000000000040000 d slb_shadow
    
    - we allocate 128 bytes per cpu; so 256k with NR_CPUS=2048. As we have
    constant initialisers, it's allocated in .text, causing a larger vmlinux
    image. We may also allocate unecessary slb_shadow buffers (> no. pacas),
    since we use the build-time NR_CPUS rather than the run-time nr_cpu_ids.
    
    We could move this to the bss, but then we still have the NR_CPUS vs
    nr_cpu_ids potential for overallocation.
    
    This change dynamically allocates the slb_shadow array, during
    initialise_pacas(). At a cost of 104 bytes of text, we save 256k of
    data:
    
      [jk@pablo linux]$ size obj/vmlinux{.orig,}
         text     data      bss       dec     hex	filename
      9202795  5244676  1169576  15617047  ee4c17	obj/vmlinux.orig
      9202899  4982532  1169576  15355007  ea4c7f	obj/vmlinux
    
    Tested on pseries.
    Signed-off-by: default avatarJeremy Kerr <jk@ozlabs.org>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    6f4441ef
paca.c 6.1 KB