25 Sep, 2009

1 commit

  • The old RW_DATA_SECTION had INIT_TASK_DATA (which was
    more-than-PAGE_SIZE-aligned), followed by a bunch of small alignment
    stuff, followed by more PAGE_SIZE-aligned stuff, so you wasted memory
    in the middle of .data re-aligning back up to PAGE_SIZE.

    This patch sorts the sections by alignment requirements, which should
    pack them essentially optimally.

    Signed-off-by: Tim Abbott
    Reviewed-by: Sam Ravnborg
    Signed-off-by: Linus Torvalds

    Tim Abbott
     

18 Sep, 2009

1 commit


13 Sep, 2009

1 commit

  • __start_mcount_loc[] is unused after init, yet occupies RAM forever
    as part of .rodata. 152kiB is typical on a 64-bit architecture. Instead,
    __start_mcount_loc should be in the interval [__init_begin, __init_end)
    so that the space is reclaimed after init.

    __start_mcount_loc[] is generated during the load portion
    of kernel build, and is used only by ftrace_init(). ftrace_init is declared
    '__init' and is in .init.text, which is freed after init.
    __start_mcount_loc is placed into .rodata by a call to MCOUNT_REC inside
    the RO_DATA macro of include/asm-generic/vmlinux.lds.h. The array *is*
    read-only, but more importantly it is not used after init. So the call to
    MCOUNT_REC should be moved from RO_DATA to INIT_DATA.

    This patch has been tested on x86_64 with CONFIG_DEBUG_PAGEALLOC=y
    which verifies that the address range never is accessed after init.

    Signed-off-by: John Reiser
    LKML-Reference:
    Signed-off-by: Steven Rostedt

    John Reiser
     

14 Aug, 2009

1 commit

  • Conflicts:
    arch/sparc/kernel/smp_64.c
    arch/x86/kernel/cpu/perf_counter.c
    arch/x86/kernel/setup_percpu.c
    drivers/cpufreq/cpufreq_ondemand.c
    mm/percpu.c

    Conflicts in core and arch percpu codes are mostly from commit
    ed78e1e078dd44249f88b1dd8c76dafb39567161 which substituted many
    num_possible_cpus() with nr_cpu_ids. As for-next branch has moved all
    the first chunk allocators into mm/percpu.c, the changes are moved
    from arch code to mm/percpu.c.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

18 Jul, 2009

1 commit

  • The BSS section macros in vmlinux.lds.h currently place the .sbss
    input section outside the bounds of [__bss_start, __bss_end]. On all
    architectures except for microblaze that handle both .sbss and
    __bss_start/__bss_end, this is wrong: the .sbss input section is
    within the range [__bss_start, __bss_end]. Relatedly, the example
    code at the top of the file actually has __bss_start/__bss_end defined
    twice; I believe the right fix here is to define them in the
    BSS_SECTION macro but not in the BSS macro.

    Another problem with the current macros is that several
    architectures have an ALIGN(4) or some other small number just before
    __bss_stop in their linker scripts. The BSS_SECTION macro currently
    hardcodes this to 4; while it should really be an argument. It also
    ignores its sbss_align argument; fix that.

    mn10300 is the only user at present of any of the macros touched by
    this patch. It looks like mn10300 actually was incorrectly converted
    to use the new BSS() macro (the alignment of 4 prior to conversion was
    a __bss_stop alignment, but the argument to the BSS macro is a start
    alignment). So fix this as well.

    I'd like acks from Sam and David on this one. Also CCing Paul, since
    he has a patch from me which will need to be updated to use
    BSS_SECTION(0, PAGE_SIZE, 4) once this gets merged.

    Signed-off-by: Tim Abbott
    Cc: Paul Mundt
    Cc: David Howells
    Signed-off-by: Sam Ravnborg

    Tim Abbott
     

09 Jul, 2009

1 commit

  • Discarded sections in different archs share some commonality but have
    considerable differences. This led to linker script for each arch
    implementing its own /DISCARD/ definition, which makes maintaining
    tedious and adding new entries error-prone.

    This patch makes all linker scripts to move discard definitions to the
    end of the linker script and use the common DISCARDS macro. As ld
    uses the first matching section definition, archs can include default
    discarded sections by including them earlier in the linker script.

    ia64 is notable because it first throws away some ia64 specific
    subsections and then include the rest of the sections into the final
    image, so those sections must be discarded before the inclusion.

    defconfig compile tested for x86, x86-64, powerpc, powerpc64, ia64,
    alpha, sparc, sparc64 and s390. Michal Simek tested microblaze.

    Signed-off-by: Tejun Heo
    Acked-by: Paul Mundt
    Acked-by: Mike Frysinger
    Tested-by: Michal Simek
    Cc: linux-arch@vger.kernel.org
    Cc: Michal Simek
    Cc: microblaze-uclinux@itee.uq.edu.au
    Cc: Sam Ravnborg
    Cc: Tony Luck

    Tejun Heo
     

05 Jul, 2009

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-fixes:
    kbuild: finally remove the obsolete variable $TOPDIR
    gitignore: ignore scripts/ihex2fw
    Kbuild: Disable the -Wformat-security gcc flag
    gitignore: ignore gcov output files
    kbuild: deb-pkg ship changelog
    Add new __init_task_data macro to be used in arch init_task.c files.
    asm-generic/vmlinux.lds.h: shuffle INIT_TASK* macro names in vmlinux.lds.h
    Add new macros for page-aligned data and bss sections.
    asm-generic/vmlinux.lds.h: Fix up RW_DATA_SECTION definition.

    Linus Torvalds
     

04 Jul, 2009

1 commit

  • Pull linus#master to merge PER_CPU_DEF_ATTRIBUTES and alpha build fix
    changes. As alpha in percpu tree uses 'weak' attribute instead of
    inline assembly, there's no need for __used attribute.

    Conflicts:
    arch/alpha/include/asm/percpu.h
    arch/mn10300/kernel/vmlinux.lds.S
    include/linux/percpu-defs.h

    Tejun Heo
     

01 Jul, 2009

1 commit

  • The ctors section for each object file is eight byte aligned (on 64 bit).
    However the __ctors_start symbol starts at an arbitrary address dependent
    on the size of the previous sections.

    Therefore the linker may add some zeroes after __ctors_start to make sure
    the ctors contents are properly aligned. However the extra zeroes at the
    beginning aren't expected by the code. When walking the functions
    pointers contained in there and extra zeroes are added this may result in
    random jumps. So make sure that the __ctors_start symbol is always
    aligned as well.

    Fixes this crash on an allyesconfig on s390:

    [ 0.582482] Kernel BUG at 0000000000000012 [verbose debug info unavailable]
    [ 0.582489] illegal operation: 0001 [#1] SMP DEBUG_PAGEALLOC
    [ 0.582496] Modules linked in:
    [ 0.582501] CPU: 0 Tainted: G W 2.6.31-rc1-dirty #273
    [ 0.582506] Process swapper (pid: 1, task: 000000003f218000, ksp: 000000003f2238e8)
    [ 0.582510] Krnl PSW : 0704200180000000 0000000000000012 (0x12)
    [ 0.582518] R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:2 PM:0 EA:3
    [ 0.582524] Krnl GPRS: 0000000000036727 0000000000000010 0000000000000001 0000000000000001
    [ 0.582529] 00000000001dfefa 0000000000000000 0000000000000000 0000000000000040
    [ 0.582534] 0000000001fff0f0 0000000001790628 0000000002296048 0000000002296048
    [ 0.582540] 00000000020c438e 0000000001786000 0000000002014a66 000000003f223e60
    [ 0.582553] Krnl Code:>0000000000000012: 0000 unknown
    [ 0.582559] 0000000000000014: 0000 unknown
    [ 0.582564] 0000000000000016: 0000 unknown
    [ 0.582570] 0000000000000018: 0000 unknown
    [ 0.582575] 000000000000001a: 0000 unknown
    [ 0.582580] 000000000000001c: 0000 unknown
    [ 0.582585] 000000000000001e: 0000 unknown
    [ 0.582591] 0000000000000020: 0000 unknown
    [ 0.582596] Call Trace:
    [ 0.582599] ([] kernel_init+0x622/0x7a0)
    [ 0.582607] [] kernel_thread_starter+0x6/0xc
    [ 0.582615] [] kernel_thread_starter+0x0/0xc
    [ 0.582621] INFO: lockdep is turned off.
    [ 0.582624] Last Breaking-Event-Address:
    [ 0.582627] [] kernel_init+0x640/0x7a0

    Cc: Peter Oberparleiter
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Signed-off-by: Heiko Carstens
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Heiko Carstens
     

27 Jun, 2009

2 commits

  • We recently added a INIT_TASK(align) in include/asm-generic/vmlinux.lds.h,
    but there is already a macro INIT_TASK in include/linux/init_task.h, which
    is quite confusing. We should switch the macro in the linker script to
    INIT_TASK_DATA. (Sorry that I missed this in reviewing the patch). Since
    the macros are new, there is only one user of the INIT_TASK in
    vmlinux.lds.h, arch/mn10300/kernel/vmlinux.lds.S.

    However, we are currently using INIT_TASK_DATA for laying down an entire
    .data.init_task section. So rename that to INIT_TASK_DATA_SECTION.

    I would be worried about changing the meaning of INIT_TASK_DATA, but the
    old INIT_TASK_DATA implementation had no users, and in fact if anyone had
    tried to use it, it would have failed to compile because it didn't pass
    the alignment to the old INIT_TASK.

    Signed-off-by: Tim Abbott
    Cc: David Howells
    Cc: Jesper Nilsson

    Tim Abbott
     
  • RW_DATA_SECTION is defined to take 4 different alignment parameters,
    while NOSAVE_DATA currently uses a fixed PAGE_SIZE alignment as noted
    in the comments.

    There are presently no in-tree users of this at present, and I just
    stumbled across this while implementing the simplified script on a new
    architecture port, which subsequently resulted in a syntax error.

    Signed-off-by: Paul Mundt
    Signed-off-by: Sam Ravnborg

    Paul Mundt
     

24 Jun, 2009

1 commit

  • x86 throws away .discard section but no other archs do. Also,
    .discard is not thrown away while linking modules. Make every arch
    and module linking throw it away. This will be used to define dummy
    variables for percpu declarations and definitions.

    This patch is based on Ivan Kokshaysky's alpha percpu patch.

    [ Impact: always throw away everything in .discard ]

    Signed-off-by: Tejun Heo
    Cc: Ivan Kokshaysky
    Cc: Richard Henderson
    Cc: Russell King
    Cc: Haavard Skinnemoen
    Cc: Bryan Wu
    Cc: Mikael Starvik
    Cc: Jesper Nilsson
    Cc: David Howells
    Cc: Yoshinori Sato
    Cc: Tony Luck
    Cc: Hirokazu Takata
    Cc: Geert Uytterhoeven
    Cc: Michal Simek
    Cc: Ralf Baechle
    Cc: Kyle McMartin
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: Paul Mundt
    Cc: David S. Miller
    Cc: Jeff Dike
    Cc: Chris Zankel
    Cc: Rusty Russell
    Cc: Ingo Molnar

    Tejun Heo
     

23 Jun, 2009

1 commit

  • In asm-generic/vmlinux.lds.h, name INIT_RAM_FS consistently, no matter the
    setting of CONFIG_BLK_DEV_INITRD. This corrects:

    commit ef53dae8658cf0e93d380983824a661067948d87
    Author: Sam Ravnborg
    Date: Sun Jun 7 20:46:37 2009 +0200
    Subject: Improve vmlinux.lds.h support for arch specific linker scripts

    Signed-off-by: David Howells
    Acked-by: Sam Ravnborg
    Signed-off-by: Linus Torvalds

    David Howells
     

19 Jun, 2009

1 commit

  • Call constructors (gcc-generated initcall-like functions) during kernel
    start and module load. Constructors are e.g. used for gcov data
    initialization.

    Disable constructor support for usermode Linux to prevent conflicts with
    host glibc.

    Signed-off-by: Peter Oberparleiter
    Acked-by: Rusty Russell
    Acked-by: WANG Cong
    Cc: Sam Ravnborg
    Cc: Jeff Dike
    Cc: Andi Kleen
    Cc: Huang Ying
    Cc: Li Wei
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: Heiko Carstens
    Cc: Martin Schwidefsky
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Oberparleiter
     

15 Jun, 2009

2 commits

  • * 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-next: (53 commits)
    .gitignore: ignore *.lzma files
    kbuild: add generic --set-str option to scripts/config
    kbuild: simplify argument loop in scripts/config
    kbuild: handle non-existing options in scripts/config
    kallsyms: generalize text region handling
    kallsyms: support kernel symbols in Blackfin on-chip memory
    documentation: make version fix
    kbuild: fix a compile warning
    gitignore: Add GNU GLOBAL files to top .gitignore
    kbuild: fix delay in setlocalversion on readonly source
    README: fix misleading pointer to the defconf directory
    vmlinux.lds.h update
    kernel-doc: cleanup perl script
    Improve vmlinux.lds.h support for arch specific linker scripts
    kbuild: fix headers_exports with boolean expression
    kbuild/headers_check: refine extern check
    kbuild: fix "Argument list too long" error for "make headers_check",
    ignore *.patch files
    Remove bashisms from scripts
    menu: fix embedded menu presentation
    ...

    Linus Torvalds
     
  • Updated after review by Tim Abbott.
    - Use HEAD_TEXT_SECTION
    - Drop use of section-names.h and delete file
    - Introduce EXIT_CALL

    Deleting section-names.h required a few simple
    updates of init.h

    Signed-off-by: Sam Ravnborg
    Cc: Tim Abbott

    Sam Ravnborg
     

10 Jun, 2009

2 commits

  • To support alingment of the individual architecture specific linker scripts
    provide a set of general definitions in vmlinux.lds.h

    With these definitions applied the diverse linekr scripts can be reduced
    in line count and their readability are improved - IMO.

    A sample linker script is included to give the preferred
    order of the sections for the architectures that do not
    have any special requirments.

    These definitions are also a first step towards eventual
    support for -ffunction-sections.
    The definitions makes it much easier to do a global
    renaming of section names - but the main purpose is
    to clean up the linker scripts.

    Tim Aboot has provided a lot of inputs to improve
    the definitions - all faults are mine.

    Signed-off-by: Sam Ravnborg
    Cc: Tim Abbott

    Sam Ravnborg
     
  • - add .init.rodata to INIT_DATA, and group all initconst flavors
    together
    - move strings generated from __setup_param() into .init.rodata
    - add .*init.rodata to modpost's sets of init sections
    - make modpost warn about references between meminit and cpuinit
    as well as memexit and cpuexit sections (as CPU and memory
    hotplug are independently selectable features)

    Signed-off-by: Jan Beulich
    Signed-off-by: Sam Ravnborg

    Jan Beulich
     

07 May, 2009

1 commit


28 Apr, 2009

1 commit

  • The old refok sections

    .text.init.refok
    .data.init.refok
    .exit.text.refok

    have been deprecated since commit
    312b1485fb509c9bc32eda28ad29537896658cb8. After the other patches in
    this patch series nothing is put in these sections, so clean things up
    by eliminating all the remaining references to them.

    Signed-off-by: Tim Abbott
    Acked-by: Sam Ravnborg
    Signed-off-by: Linus Torvalds

    Tim Abbott
     

27 Apr, 2009

1 commit

  • This patch is preparation for replacing all uses of ".head.text" or
    ".text.head" in the kernel with macros, so that the section name can
    later be changed without having to touch a lot of the kernel.

    Since some linker scripts do more complex things than referencing
    HEAD_TEXT, we add a HEAD_TEXT_SECTION macro that just contains the
    actual name.

    I've defined HEAD_TEXT_SECTION in a new header,
    include/linux/section-names.h, so that this section name only needs to
    appear in one place. I anticipate creating similar macro structures
    for a number of other section names.

    The long-term goal here is to be able to change the kernel's magic
    section names to those that are compatible with -ffunction-sections
    -fdata-sections. This requires renaming all magic sections with names
    of the form ".text.foo".

    Signed-off-by: Tim Abbott
    Signed-off-by: Linus Torvalds

    Tim Abbott
     

14 Apr, 2009

1 commit

  • Add a new config option, CONFIG_EVENT_TRACING that gets selected
    when CONFIG_TRACING is selected and adds everything needed by the stuff
    in trace_export - basically all the event tracing support needed by e.g.
    bprint, minus the actual events, which are only included if
    CONFIG_EVENT_TRACER is selected.

    So CONFIG_EVENT_TRACER can be used to turn on or off the generated events
    (what I think of as the 'event tracer'), while CONFIG_EVENT_TRACING turns
    on or off the base event tracing support used by both the event tracer and
    the other things such as bprint that can't be configured out.

    Signed-off-by: Tom Zanussi
    Cc: Steven Rostedt
    Cc: fweisbec@gmail.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Tom Zanussi
     

02 Apr, 2009

1 commit


28 Mar, 2009

1 commit


25 Mar, 2009

1 commit

  • This patch combines Greg Bank's dprintk() work with the existing dynamic
    printk patchset, we are now calling it 'dynamic debug'.

    The new feature of this patchset is a richer /debugfs control file interface,
    (an example output from my system is at the bottom), which allows fined grained
    control over the the debug output. The output can be controlled by function,
    file, module, format string, and line number.

    for example, enabled all debug messages in module 'nf_conntrack':

    echo -n 'module nf_conntrack +p' > /mnt/debugfs/dynamic_debug/control

    to disable them:

    echo -n 'module nf_conntrack -p' > /mnt/debugfs/dynamic_debug/control

    A further explanation can be found in the documentation patch.

    Signed-off-by: Greg Banks
    Signed-off-by: Jason Baron
    Signed-off-by: Greg Kroah-Hartman

    Jason Baron
     

13 Mar, 2009

1 commit

  • Impact: new feature

    This adds the generic support for syscalls tracing. This is
    currently exploited through a devoted tracer but other tracing
    engines can use it. (They just have to play with
    {start,stop}_ftrace_syscalls() and use the display callbacks
    unless they want to override them.)

    The syscalls prototypes definitions are abused here to steal
    some metadata informations:

    - syscall name, param types, param names, number of params

    The syscall addr is not directly saved during this definition
    because we don't know if its prototype is available in the
    namespace. But we don't really need it. The arch has just to
    build a function able to resolve the syscall number to its
    metadata struct.

    The current tracer prints the syscall names, parameters names
    and values (and their types optionally). Currently the value is
    a raw hex but higher level values diplaying is on my TODO list.

    Signed-off-by: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Frederic Weisbecker
     

10 Mar, 2009

1 commit


09 Mar, 2009

1 commit

  • Impact: fix kernel crash when using trace_printk()

    trace_printk_fmt section is defined into the readonly section.
    But we do:

    trace_printk_fmt = fmt;

    to fill in that table of format strings - which is not read-only.
    Under CONFIG_DEBUG_RODATA=y this crashes ...

    Cc: Frederic Weisbecker
    Cc: Steven Rostedt
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

08 Mar, 2009

1 commit


07 Mar, 2009

1 commit

  • Impact: add a generic printk() for tracing, like trace_printk()

    trace_bprintk() uses the infrastructure to record events on ring_buffer.

    [ fweisbec@gmail.com: ported to latest -tip, made it work if
    !CONFIG_MODULES, never free the format strings from modules
    because we can't keep track of them and conditionnaly create
    the ftrace format strings section (reported by Steven Rostedt) ]

    Signed-off-by: Lai Jiangshan
    Signed-off-by: Frederic Weisbecker
    Acked-by: Steven Rostedt
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Lai Jiangshan
     

06 Mar, 2009

1 commit


25 Feb, 2009

1 commit

  • This patch creates the event tracing infrastructure of ftrace.
    It will create the files:

    /debug/tracing/available_events
    /debug/tracing/set_event

    The available_events will list the trace points that have been
    registered with the event tracer.

    set_events will allow the user to enable or disable an event hook.

    example:

    # echo sched_wakeup > /debug/tracing/set_event

    Will enable the sched_wakeup event (if it is registered).

    # echo "!sched_wakeup" >> /debug/tracing/set_event

    Will disable the sched_wakeup event (and only that event).

    # echo > /debug/tracing/set_event

    Will disable all events (notice the '>')

    # cat /debug/tracing/available_events > /debug/tracing/set_event

    Will enable all registered event hooks.

    Signed-off-by: Steven Rostedt

    Steven Rostedt
     

31 Jan, 2009

1 commit

  • Impact: fix linker screwup on x86_32

    Recent x86_64 zerobased patches introduced PERCPU_VADDR() to put
    .data.percpu to a predefined address and re-defined PERCPU() in terms
    of it. The new macro defined one extra symbol, __per_cpu_load, for
    LMA of the section so that the init data could be accessed. This new
    symbol introduced the following problems to x86_32.

    1. If __per_cpu_load is defined outside of .data.percpu as an absolute
    symbol, relocation generation for relocatable kernel fails due to
    absolute relocation.

    2. If __per_cpu_load is put inside .data.percpu with absolute address
    assignment to work around #1, linker gets confused and under
    certain configurations ends up relocating the symbol against
    .data.percpu such that the load address gets added on top of
    already set load address.

    As x86_32 doesn't use predefined address for .data.percpu, there's no
    need for it to care about the possibility of __per_cpu_load being
    different from __per_cpu_start.

    This patch defines PERCPU() separately so that __per_cpu_load is
    defined inside .data.percpu so that everything is ordinary
    linking-wise.

    Signed-off-by: Tejun Heo
    Signed-off-by: Ingo Molnar

    Tejun Heo
     

30 Jan, 2009

1 commit

  • This reverts commit 5a611268b69f05262936dd177205acbce4471358.

    It is causing occasional boot crashes, caused by certain
    linker versions (GNU ld version 2.18.50.0.6-2 20080403) messing up:

    82dcc000 D __per_cpu_load
    c16e6000 A __per_cpu_load_abs

    The __per_cpu_load value is out of whack. Hpa noticed the following
    detail:

    * (gdb) p/x -(0xc16e6000-0x82dcc000)
    * $2 = 0xc16e6000
    * I.e. one is the other << 1

    The two symbols should be equal.

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

26 Jan, 2009

1 commit

  • This patch fixes this linker error:

    WARNING: Absolute relocations present
    Offset Info Type Sym.Value Sym.Name
    c0a4e07d 00e78001 R_386_32 c0ab0000 __per_cpu_load

    Now, __per_cpu_load is a section-relative symbol:

    c0aa4000 D __per_cpu_load
    c0aa4000 A __per_cpu_load_abs

    Signed-off-by: Brian Gerst
    Signed-off-by: Ingo Molnar

    Brian Gerst
     

20 Jan, 2009

2 commits


17 Jan, 2009

1 commit

  • The newly added PERCPU_*() macros define and use __per_cpu_load but
    VMLINUX_SYMBOL() was missing from usages causing build failures on
    archs where linker visible symbol is different from C symbols
    (e.g. blackfin).

    Signed-off-by: Tejun Heo

    Tejun Heo
     

16 Jan, 2009

2 commits

  • [ Based on original patch from Christoph Lameter and Mike Travis. ]

    Currently pdas and percpu areas are allocated separately. %gs points
    to local pda and percpu area can be reached using pda->data_offset.
    This patch folds pda into percpu area.

    Due to strange gcc requirement, pda needs to be at the beginning of
    the percpu area so that pda->stack_canary is at %gs:40. To achieve
    this, a new percpu output section macro - PERCPU_VADDR_PREALLOC() - is
    added and used to reserve pda sized chunk at the start of the percpu
    area.

    After this change, for boot cpu, %gs first points to pda in the
    data.init area and later during setup_per_cpu_areas() gets updated to
    point to the actual pda. This means that setup_per_cpu_areas() need
    to reload %gs for CPU0 while clearing pda area for other cpus as cpu0
    already has modified it when control reaches setup_per_cpu_areas().

    This patch also removes now unnecessary get_local_pda() and its call
    sites.

    A lot of this patch is taken from Mike Travis' "x86_64: Fold pda into
    per cpu area" patch.

    Signed-off-by: Tejun Heo
    Signed-off-by: Ingo Molnar

    Tejun Heo
     
  • [ Based on original patch from Christoph Lameter and Mike Travis. ]

    This patch makes percpu symbols zerobased on x86_64 SMP by adding
    PERCPU_VADDR() to vmlinux.lds.h which helps setting explicit vaddr on
    the percpu output section and using it in vmlinux_64.lds.S. A new
    PHDR is added as existing ones cannot contain sections near address
    zero. PERCPU_VADDR() also adds a new symbol __per_cpu_load which
    always points to the vaddr of the loaded percpu data.init region.

    The following adjustments have been made to accomodate the address
    change.

    * code to locate percpu gdt_page in head_64.S is updated to add the
    load address to the gdt_page offset.

    * __per_cpu_load is used in places where access to the init data area
    is necessary.

    * pda->data_offset is initialized soon after C code is entered as zero
    value doesn't work anymore.

    This patch is mostly taken from Mike Travis' "x86_64: Base percpu
    variables at zero" patch.

    Signed-off-by: Tejun Heo
    Signed-off-by: Ingo Molnar

    Tejun Heo