21 Oct, 2010

1 commit

  • This patch adds an initial page table with low mappings used exclusively
    for booting APs/resuming after ACPI suspend/machine restart. After this,
    there's no need to add low mappings to swapper_pg_dir and zap them later
    or create own swsusp PGD page solely for ACPI sleep needs - we have
    initial_page_table for that.

    Signed-off-by: Borislav Petkov
    LKML-Reference:
    Signed-off-by: H. Peter Anvin

    Borislav Petkov
     

12 Jun, 2009

1 commit

  • Only one cpu is there, just call __flush_tlb for it. Fixes the following boot
    warning on x86:

    [ 0.000000] Memory: 885032k/915540k available (5993k kernel code, 29844k reserved, 3842k data, 428k init, 0k highmem)
    [ 0.000000] virtual kernel memory layout:
    [ 0.000000] fixmap : 0xffe17000 - 0xfffff000 (1952 kB)
    [ 0.000000] vmalloc : 0xf8615000 - 0xffe15000 ( 120 MB)
    [ 0.000000] lowmem : 0xc0000000 - 0xf7e15000 ( 894 MB)
    [ 0.000000] .init : 0xc19a5000 - 0xc1a10000 ( 428 kB)
    [ 0.000000] .data : 0xc15da4bb - 0xc199af6c (3842 kB)
    [ 0.000000] .text : 0xc1000000 - 0xc15da4bb (5993 kB)
    [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok.
    [ 0.000000] ------------[ cut here ]------------
    [ 0.000000] WARNING: at kernel/smp.c:369 smp_call_function_many+0x50/0x1b0()
    [ 0.000000] Hardware name: System Product Name
    [ 0.000000] Modules linked in:
    [ 0.000000] Pid: 0, comm: swapper Not tainted 2.6.30-tip #52504
    [ 0.000000] Call Trace:
    [ 0.000000] [] warn_slowpath_common+0x65/0x95
    [ 0.000000] [] warn_slowpath_null+0x12/0x15
    [ 0.000000] [] smp_call_function_many+0x50/0x1b0
    [ 0.000000] [] ? do_flush_tlb_all+0x0/0x41
    [ 0.000000] [] ? do_flush_tlb_all+0x0/0x41
    [ 0.000000] [] smp_call_function+0x31/0x58
    [ 0.000000] [] ? do_flush_tlb_all+0x0/0x41
    [ 0.000000] [] on_each_cpu+0x26/0x65
    [ 0.000000] [] flush_tlb_all+0x19/0x1b
    [ 0.000000] [] zap_low_mappings+0x4d/0x56
    [ 0.000000] [] ? printk+0x14/0x17
    [ 0.000000] [] mem_init+0x23d/0x245
    [ 0.000000] [] start_kernel+0x17a/0x2d5
    [ 0.000000] [] ? unknown_bootoption+0x0/0x19a
    [ 0.000000] [] __init_begin+0x39/0x41
    [ 0.000000] ---[ end trace 4eaa2a86a8e2da22 ]---

    Reported-by: Ingo Molnar
    Signed-off-by: Yinghai Lu
    Signed-off-by: Pekka Enberg

    Yinghai Lu
     

07 May, 2009

1 commit


24 Apr, 2009

1 commit


22 Apr, 2009

1 commit

  • In non-SMP mode, the variable section attribute specified by DECLARE_PER_CPU()
    does not agree with that specified by DEFINE_PER_CPU(). This means that
    architectures that have a small data section references relative to a base
    register may throw up linkage errors due to too great a displacement between
    where the base register points and the per-CPU variable.

    On FRV, the .h declaration says that the variable is in the .sdata section, but
    the .c definition says it's actually in the .data section. The linker throws
    up the following errors:

    kernel/built-in.o: In function `release_task':
    kernel/exit.c:78: relocation truncated to fit: R_FRV_GPREL12 against symbol `per_cpu__process_counts' defined in .data section in kernel/built-in.o
    kernel/exit.c:78: relocation truncated to fit: R_FRV_GPREL12 against symbol `per_cpu__process_counts' defined in .data section in kernel/built-in.o

    To fix this, DECLARE_PER_CPU() should simply apply the same section attribute
    as does DEFINE_PER_CPU(). However, this is made slightly more complex by
    virtue of the fact that there are several variants on DEFINE, so these need to
    be matched by variants on DECLARE.

    Signed-off-by: David Howells
    Signed-off-by: Linus Torvalds

    David Howells
     

18 Jan, 2009

1 commit


15 Jan, 2009

1 commit


12 Jan, 2009

1 commit

  • Impact: reduce stack usage, use new cpumask API.

    This is made a little more tricky by uv_flush_tlb_others which
    actually alters its argument, for an IPI to be sent to the remaining
    cpus in the mask.

    I solve this by allocating a cpumask_var_t for this case and falling back
    to IPI should this fail.

    To eliminate temporaries in the caller, all flush_tlb_others implementations
    now do the this-cpu-elimination step themselves.

    Note also the curious "cpus_or(f->flush_cpumask, cpumask, f->flush_cpumask)"
    which has been there since pre-git and yet f->flush_cpumask is always zero
    at this point.

    Signed-off-by: Rusty Russell
    Signed-off-by: Mike Travis

    Rusty Russell
     

07 Jan, 2009

1 commit


23 Oct, 2008

2 commits