30 Jan, 2008

40 commits

  • This adds fs/compat_binfmt_elf.c, a wrapper around fs/binfmt_elf.c for
    32-bit ELF support on 64-bit kernels. It can replace all the hand-rolled
    versions of this that each 32/64 arch has, which are all about the same.

    To use this, an arch's asm/elf.h has to define at least a few compat_*
    macros that parallel the various macros that fs/binfmt_elf.c uses for
    native support.

    There is no attempt to deal with compat macros for the core dump format
    support. To use this file, the arch has to define compat_gregset_t for
    linux/elfcore-compat.h and #define CORE_DUMP_USE_REGSET. The 32-bit
    compatible formats should come automatically from task_user_regset_view
    called on a 32-bit task.

    Signed-off-by: Roland McGrath
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Roland McGrath
     
  • This adds some inlines to linux/regset.h intended for arch code to use in
    its user_regset get and set functions. These make it pretty easy to deal
    with the interface's optional kernel-space or user-space pointers and its
    generalized access to a part of the register data at a time.

    In simple cases where the internal data structure matches the exported
    layout (core dump format), a get function can be nothing but a call to
    user_regset_copyout, and a set function a call to user_regset_copyin.

    In other cases the exported layout is usually made up of a few pieces each
    stored contiguously in a different internal data structure. These helpers
    make it straightforward to write a get or set function by processing each
    contiguous chunk of the data in order. The start_pos and end_pos arguments
    are always constants, so these inlines collapse to a small amount of code.

    Signed-off-by: Roland McGrath
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Roland McGrath
     
  • This modifies the ELF core dump code under #ifdef CORE_DUMP_USE_REGSET.
    It changes nothing when this macro is not defined. When it's #define'd
    by some arch header (e.g. asm/elf.h), the arch must support the
    user_regset (linux/regset.h) interface for reading thread state.

    This provides an alternate version of note segment writing that is based
    purely on the user_regset interfaces. When CORE_DUMP_USE_REGSET is set,
    the arch need not define macros such as ELF_CORE_COPY_REGS and ELF_ARCH.
    All that information is taken from the user_regset data structures.
    The core dumps come out exactly the same if arch's definitions for its
    user_regset details are correct.

    Signed-off-by: Roland McGrath
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Roland McGrath
     
  • This pulls out the code for writing the notes segment of an ELF core dump
    into separate functions. This cleanly isolates into one cluster of
    functions everything that deals with the note formats and the hooks into
    arch code to fill them. The top-level elf_core_dump function itself now
    deals purely with the generic ELF format and the memory segments.

    This only moves code around into functions that can be inlined away.
    It should not change any behavior at all.

    Signed-off-by: Roland McGrath
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Roland McGrath
     
  • The new header defines the types struct user_regset and
    struct user_regset_view, with some associated declarations. This new set
    of interfaces will become the standard way for arch code to expose
    user-mode machine-specific state. A single set of entry points into arch
    code can do all the low-level work in one place to fill the needs of core
    dumps, ptrace, and any other user-mode debugging facilities that might come
    along in the future.

    For existing arch code to adapt to the user_regset interfaces, each arch
    can work from the code it already has to support core files and ptrace.
    The formats you want for user_regset are the core file formats. The only
    wrinkle in adapting old ptrace implementation code as user_regset get and
    set functions is that these functions can be called on current as well as
    on another task_struct that is stopped and switched out as for ptrace.
    For some kinds of machine state, you may have to load it directly from CPU
    registers or otherwise differently for current than for another thread.
    (Your core dump support already handles this in elf_core_copy_regs for
    current and elf_core_copy_task_regs for other tasks, so just check there.)
    The set function should also be made to work on current in case that
    entails some special cases, though this was never required before for
    ptrace. Adding this flexibility covers the arch needs to open the door to
    more sophisticated new debugging facilities that don't always need to
    context-switch to do every little thing.

    The copyin/copyout helper functions (in a later patch) relieve the arch
    code of most of the cumbersome details of the flexible get/set interfaces.

    Signed-off-by: Roland McGrath
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Roland McGrath
     
  • This adds one case to the MODULE_PROC_FAMILY block testing
    for X86_64. There are no new things defined on X86_64 than
    there were before.

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • Eliminate __always_inline, all of these static functions are
    only called once. Minor whitespace cleanup. Eliminate one
    supefluous return at end of void function. Change the one
    #ifndef to #ifdef to match the sense of the rest of the config
    tests.

    Signed-off-by: Harvey Harrison
    Acked-by: Masami Hiramatsu
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • Spelling fixes.

    Signed-off-by: Joe Perches
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Joe Perches
     
  • Use the fixup_exception() helper in fault_64.c

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • Introduce fixup_exception() on 64-bit and use it in kprobes to
    eliminate an #ifdef.

    Only 64-bit needs search_extable() due to a stepping bug.

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • This patch moves i387 definitions from processor_32.h and processor_64.h
    to processor.h. They are different. Very different. And there's appearently
    nothing we can do about it, so they're enclosed inside ifdefs.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • There's only one difference between the NOPs used in asm code for i386 and x86_64:
    i386 has a lot more variants. The code is moved to processor.h, and adjusted
    accordingly.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves the prefetch[w]? functions to processor.h

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves definitions that are present in only one of the files
    (between processor_32.h and processor_64.h), to processor.h. They're mostly
    structures and function definitions.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves the mm_segment_t structure definition to processor.h
    This makes mmsegment.h file useless, and it is deleted.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch removes definitions and macros that are not used anymore
    from processor_64.h

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • x86_cpuinfo is one more to the family of "not fundamentally different"
    structs. It's unified in processor.h, with very specific fields enclosed
    around ifdefs.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch changes the bitwise operations in bitops.h to get
    a void pointers as a parameter. Before this patch, a lot of warnings
    can be seen. They're gone after it.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves the TASK_ALIGN constraints to common header.
    The base of it is the same for x86_64 and i386. The only difference
    is the presence of vSMP in x86_64. As it's not a worry in i386, we can
    safely use the same code for both.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • The thread_struct is not fundamentally different between architectures, and
    this patch puts it in the common header. What's really unique for each of
    them is enclosed in ifdefs.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • Paravirt guests need to inform the underlying hypervisor whenever the sp0
    tss field changes. i386 already has such a function, and we use it for
    x86_64 too. There's an unnecessary (for 64-bit) msr handling part in the original
    version, and it is placed around an ifdef. Making no more sense in
    processor_32.h, it is moved to the common header

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • Although slighly different, the tss_struct is very similar in x86_64 and
    i386. The really different part, which matchs the hardware vision of it, is
    now called x86_hw_tss, and each of the architectures provides yours.
    It's then used as a field in the outter tss_struct.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • current_text_addr() has a different implementation in x86_64 and
    i386, but it is not fundamentally different. I stick to the i386
    implementation, that seem to be a common base, and move it to processor.h

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves the pieces of processor_32.h and processor_64 that are
    equal to processor.h. Only what's exactly the same is moved around, the rest
    not being touched.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves the definition of set_iopl_mask to processor.h,
    instead of letting it at processor_32.h.
    For x86_64, nothing is done, as we don't really need such a function.
    However, having it on both arches saves us from putting an ifdef in the
    pv_cpu_ops struct.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch unifies the paravirt pieces of processor.h
    The functionality present in 32 bit, but not (yet) in 64-bit,
    like load_sp0 is _not_ done here, and let to a different patch.

    With this unification, we get paravirt for free in x86_64 processor.h

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • There are currently two definitions of load_cr3, that essentially do the
    same thing. This patch moves them all to processor.h.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch moves the (duplicated) desc_empty implementation to desc.h,
    where the descriptor things belong.

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • There's no need for the *_MASK flags (TF_MASK, IF_MASK, etc), found in
    processor.h (both _32 and _64). They have a one-to-one mapping with the
    EFLAGS value. This patch removes the definitions, and use the already
    existent X86_EFLAGS_ version when applicable.

    [ roland@redhat.com: KVM build fixes. ]

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • This patch wipes out the definitions of tsc_disable from processor_32.h
    and move it to tsc.h, were it belongs

    Signed-off-by: Glauber de Oliveira Costa
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Glauber de Oliveira Costa
     
  • clean up checkpatch errors. No code changed.

    text data bss dec hex filename
    705 120 0 825 339 early-quirks.o.before
    705 120 0 825 339 early-quirks.o.after

    Signed-off-by: Neil Horman
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Neil Horman
     
  • clean up checkpatch warnings/errors on i387_32.c

    The old and new i387_32.s (asm listings) were checked with diff to
    be identical so it's safe to apply this patch.

    Signed-off-by: Cyrill Gorcunov
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Cyrill Gorcunov
     
  • One section collecting all constant defines. Ifdef the asm
    blocks for X86_32/64.

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner
    Reviewed-by: Vivek Goyal

    Harvey Harrison
     
  • Mostly space after comma, one space after if.

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • Handle the use of long on X86_32 and quad on X86_64

    Signed-off-by: Harvey Harrison
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Ingo Molnar

    Harvey Harrison
     
  • Use the shorter +m form rather than =m and m.

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • Common prefix from both files moved to local.h

    Change __inline__ to inline

    Signed-off-by: Harvey Harrison
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Harvey Harrison
     
  • clean up include/asm-x86/pda.h, as suggested by checkpatch.pl.

    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Cyrill Gorcunov
     
  • Recently a kdump bug was discovered in which a system would hang inside
    calibrate_delay during the booting of the kdump kernel. This was caused
    by the fact that the jiffies counter was not being incremented during
    timer calibration. The root cause of this problem was found to be a
    bios misconfiguration of the hypertransport bus. On system affected by
    this hang, the bios had assigned APIC ids which used extended apic bits
    (more than the nominal 4 bit ids's), but failed to configure bit 17 of
    the hypertransport transaction config register, which indicated that the
    mask for the destination field of interrupt packets accross the ht bus
    (see section 3.3.9 of
    http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26094.PDF).
    If a crash occurs on a cpu with an APIC id that extends beyond 4 bits,
    it will not recieve interrupts during the kdump kernel boot, and this
    hang will be the result. The fix is to add this patch, whcih add an
    early pci quirk check, to forcibly enable this bit in the httcfg
    register. This enables all cpus on a system to receive interrupts, and
    allows kdump kernel bootup to procede normally.

    Signed-off-by: Neil Horman
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Neil Horman