lkml.org 
[lkml]   [2014]   [Oct]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.14 097/100] sparc64: Kill unnecessary tables and increase MAX_BANKS.
    Date
    3.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: "David S. Miller" <davem@davemloft.net>

    [ Upstream commit d195b71bad4347d2df51072a537f922546a904f1 ]

    swapper_low_pmd_dir and swapper_pud_dir are actually completely
    useless and unnecessary.

    We just need swapper_pg_dir[]. Naturally the other page table chunks
    will be allocated on an as-needed basis. Since the kernel actually
    accesses these tables in the PAGE_OFFSET view, there is not even a TLB
    locality advantage of placing them in the kernel image.

    Use the hard coded vmlinux.ld.S slot for swapper_pg_dir which is
    naturally page aligned.

    Increase MAX_BANKS to 1024 in order to handle heavily fragmented
    virtual guests.

    Even with this MAX_BANKS increase, the kernel is 20K+ smaller.

    Signed-off-by: David S. Miller <davem@davemloft.net>
    Acked-by: Bob Picco <bob.picco@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/sparc/include/asm/pgtable_64.h | 1 -
    arch/sparc/kernel/vmlinux.lds.S | 5 +++--
    arch/sparc/mm/init_64.c | 25 ++-----------------------
    3 files changed, 5 insertions(+), 26 deletions(-)

    --- a/arch/sparc/include/asm/pgtable_64.h
    +++ b/arch/sparc/include/asm/pgtable_64.h
    @@ -927,7 +927,6 @@ static inline void __set_pte_at(struct m
    #endif

    extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
    -extern pmd_t swapper_low_pmd_dir[PTRS_PER_PMD];

    extern void paging_init(void);
    extern unsigned long find_ecache_flush_span(unsigned long size);
    --- a/arch/sparc/kernel/vmlinux.lds.S
    +++ b/arch/sparc/kernel/vmlinux.lds.S
    @@ -35,8 +35,9 @@ jiffies = jiffies_64;

    SECTIONS
    {
    - /* swapper_low_pmd_dir is sparc64 only */
    - swapper_low_pmd_dir = 0x0000000000402000;
    +#ifdef CONFIG_SPARC64
    + swapper_pg_dir = 0x0000000000402000;
    +#endif
    . = INITIAL_ADDRESS;
    .text TEXTSTART :
    {
    --- a/arch/sparc/mm/init_64.c
    +++ b/arch/sparc/mm/init_64.c
    @@ -85,7 +85,7 @@ extern struct tsb swapper_tsb[KERNEL_TSB

    static unsigned long cpu_pgsz_mask;

    -#define MAX_BANKS 32
    +#define MAX_BANKS 1024

    static struct linux_prom64_registers pavail[MAX_BANKS];
    static int pavail_ents;
    @@ -1937,12 +1937,6 @@ static void __init sun4v_linear_pte_xor_

    static unsigned long last_valid_pfn;

    -/* These must be page aligned in order to not trigger the
    - * alignment tests of pgd_bad() and pud_bad().
    - */
    -pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned (PAGE_SIZE)));
    -static pud_t swapper_pud_dir[PTRS_PER_PUD] __attribute__ ((aligned (PAGE_SIZE)));
    -
    static void sun4u_pgprot_init(void);
    static void sun4v_pgprot_init(void);

    @@ -1950,8 +1944,6 @@ void __init paging_init(void)
    {
    unsigned long end_pfn, shift, phys_base;
    unsigned long real_end, i;
    - pud_t *pud;
    - pmd_t *pmd;
    int node;

    setup_page_offset();
    @@ -2046,20 +2038,7 @@ void __init paging_init(void)
    */
    init_mm.pgd += ((shift) / (sizeof(pgd_t)));

    - memset(swapper_low_pmd_dir, 0, sizeof(swapper_low_pmd_dir));
    -
    - /* The kernel page tables we publish into what the rest of the
    - * world sees must be adjusted so that they see the PAGE_OFFSET
    - * address of these in-kerenel data structures. However right
    - * here we must access them from the kernel image side, because
    - * the trap tables haven't been taken over and therefore we cannot
    - * take TLB misses in the PAGE_OFFSET linear mappings yet.
    - */
    - pud = swapper_pud_dir + (shift / sizeof(pud_t));
    - pgd_set(&swapper_pg_dir[0], pud);
    -
    - pmd = swapper_low_pmd_dir + (shift / sizeof(pmd_t));
    - pud_set(&swapper_pud_dir[0], pmd);
    + memset(swapper_pg_dir, 0, sizeof(swapper_pg_dir));

    inherit_prom_mappings();




    \
     
     \ /
      Last update: 2014-10-28 08:01    [W:3.183 / U:0.396 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site