24 Jun, 2005

11 commits

  • The following patch adds the x86_64 architecture specific implementation
    for function return probes.

    Function return probes is a mechanism built on top of kprobes that allows
    a caller to register a handler to be called when a given function exits.
    For example, to instrument the return path of sys_mkdir:

    static int sys_mkdir_exit(struct kretprobe_instance *i, struct pt_regs *regs)
    {
    printk("sys_mkdir exited\n");
    return 0;
    }
    static struct kretprobe return_probe = {
    .handler = sys_mkdir_exit,
    };

    return_probe.kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("sys_mkdir");
    if (register_kretprobe(&return_probe)) {
    printk(KERN_DEBUG "Unable to register return probe!\n");
    /* do error path */
    }

    unregister_kretprobe(&return_probe);

    The way this works is that:

    * At system initialization time, kernel/kprobes.c installs a kprobe
    on a function called kretprobe_trampoline() that is implemented in
    the arch/x86_64/kernel/kprobes.c (More on this later)

    * When a return probe is registered using register_kretprobe(),
    kernel/kprobes.c will install a kprobe on the first instruction of the
    targeted function with the pre handler set to arch_prepare_kretprobe()
    which is implemented in arch/x86_64/kernel/kprobes.c.

    * arch_prepare_kretprobe() will prepare a kretprobe instance that stores:
    - nodes for hanging this instance in an empty or free list
    - a pointer to the return probe
    - the original return address
    - a pointer to the stack address

    With all this stowed away, arch_prepare_kretprobe() then sets the return
    address for the targeted function to a special trampoline function called
    kretprobe_trampoline() implemented in arch/x86_64/kernel/kprobes.c

    * The kprobe completes as normal, with control passing back to the target
    function that executes as normal, and eventually returns to our trampoline
    function.

    * Since a kprobe was installed on kretprobe_trampoline() during system
    initialization, control passes back to kprobes via the architecture
    specific function trampoline_probe_handler() which will lookup the
    instance in an hlist maintained by kernel/kprobes.c, and then call
    the handler function.

    * When trampoline_probe_handler() is done, the kprobes infrastructure
    single steps the original instruction (in this case just a top), and
    then calls trampoline_post_handler(). trampoline_post_handler() then
    looks up the instance again, puts the instance back on the free list,
    and then makes a long jump back to the original return instruction.

    So to recap, to instrument the exit path of a function this implementation
    will cause four interruptions:

    - A breakpoint at the very beginning of the function allowing us to
    switch out the return address
    - A single step interruption to execute the original instruction that
    we replaced with the break instruction (normal kprobe flow)
    - A breakpoint in the trampoline function where our instrumented function
    returned to
    - A single step interruption to execute the original instruction that
    we replaced with the break instruction (normal kprobe flow)

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rusty Lynch
     
  • The preempt_count member of struct thread_info is currently either defined
    as int, unsigned int or __s32 depending on arch. This patch makes the type
    of preempt_count an int on all archs.

    Having preempt_count be an unsigned type prevents the catching of
    preempt_count < 0 bugs, and using int on some archs and __s32 on others is
    not exactely "neat" - much nicer when it's just int all over.

    A previous version of this patch was already ACK'ed by Robert Love, and the
    only change in this version of the patch compared to the one he ACK'ed is
    that this one also makes sure the preempt_count member is consistently
    commented.

    Signed-off-by: Jesper Juhl
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jesper Juhl
     
  • Add 2 macros to set and get debugreg on x86_64. This is useful for Xen
    because it will need only to redefine each macro to a hypervisor call.

    Signed-off-by: Vincent Hanquez
    Cc: Ian Pratt
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vincent Hanquez
     
  • Rename user_mode to user_mode_vm and add a user_mode macro similar to the
    x86-64 one.

    This is useful for Xen because the linux xen kernel does not runs on the same
    priviledge that a vanilla linux kernel, and with this we just need to redefine
    user_mode().

    Signed-off-by: Vincent Hanquez
    Cc: Ian Pratt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vincent Hanquez
     
  • Eliminate duplicate definition of rdpmc in x86-64's mtrr.h.

    Signed-off-by: Jan Beulich
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Beulich
     
  • Make the timer frequency selectable. The timer interrupt may cause bus
    and memory contention in large NUMA systems since the interrupt occurs
    on each processor HZ times per second.

    Signed-off-by: Christoph Lameter
    Signed-off-by: Shai Fultheim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Define pcibus_to_node to be able to figure out which NUMA node contains a
    given PCI device. This defines pcibus_to_node(bus) in
    include/linux/topology.h and adjusts the macros for i386 and x86_64 that
    already provided a way to determine the cpumask of a pci device.

    x86_64 was changed to not build an array of cpumasks anymore. Instead an
    array of nodes is build which can be used to generate the cpumask via
    node_to_cpumask.

    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Issue:
    Current tsc based delay_calibration can result in significant errors in
    loops_per_jiffy count when the platform events like SMIs
    (System Management Interrupts that are non-maskable) are present. This could
    lead to potential kernel panic(). This issue is becoming more visible with 2.6
    kernel (as default HZ is 1000) and on platforms with higher SMI handling
    latencies. During the boot time, SMIs are mostly used by BIOS (for things
    like legacy keyboard emulation).

    Description:
    The psuedocode for current delay calibration with tsc based delay looks like
    (0) Estimate a value for loops_per_jiffy
    (1) While (loops_per_jiffy estimate is accurate enough)
    (2) wait for jiffy transition (jiffy1)
    (3) Note down current tsc (tsc1)
    (4) loop until tsc becomes tsc1 + loops_per_jiffy
    (5) check whether jiffy changed since jiffy1 or not and refine
    loops_per_jiffy estimate

    Consider the following cases
    Case 1:
    If SMIs happen between (2) and (3) above, we can end up with a
    loops_per_jiffy value that is too low. This results in shorted delays and
    kernel can panic () during boot (Mostly at IOAPIC timer initialization
    timer_irq_works() as we don't have enough timer interrupts in a specified
    interval).

    Case 2:
    If SMIs happen between (3) and (4) above, then we can end up with a
    loops_per_jiffy value that is too high. And with current i386 code, too
    high lpj value (greater than 17M) can result in a overflow in
    delay.c:__const_udelay() again resulting in shorter delay and panic().

    Solution:
    The patch below makes the calibration routine aware of asynchronous events
    like SMIs. We increase the delay calibration time and also identify any
    significant errors (greater than 12.5%) in the calibration and notify it to
    user.

    Patch below changes both i386 and x86-64 architectures to use this
    new and improved calibrate_delay_direct() routine.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Venkatesh Pallipadi
     
  • This patch adds in the necessary support for sparsemem such that x86-64
    kernels may use sparsemem as an alternative to discontigmem for NUMA
    kernels. Note that this does no preclude one from continuing to build NUMA
    kernels using discontigmem, but merely allows the option to build NUMA
    kernels with sparsemem.

    Interestingly, the use of sparsemem in lieu of discontigmem in NUMA kernels
    results in reduced text size for otherwise equivalent kernels as shown in
    the example builds below:

    text data bss dec hex filename
    2371036 765884 1237108 4374028 42be0c vmlinux.discontig
    2366549 776484 1302772 4445805 43d66d vmlinux.sparse

    Signed-off-by: Matt Tolentino
    Signed-off-by: Dave Hansen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matt Tolentino
     
  • In order to use the alternative sparsemem implmentation for NUMA kernels,
    we need to reorganize the config options. This patch effectively abstracts
    out the CONFIG_DISCONTIGMEM options to CONFIG_NUMA in most cases. Thus,
    the discontigmem implementation may be employed as always, but the
    sparsemem implementation may be used alternatively.

    Signed-off-by: Matt Tolentino
    Signed-off-by: Dave Hansen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matt Tolentino
     
  • This patch effectively eliminates direct use of pgdat->node_mem_map outside
    of the DISCONTIG code. On a flat memory system, these fields aren't
    currently used, neither are they on a sparsemem system.

    There was also a node_mem_map(nid) macro on many architectures. Its use
    along with the use of ->node_mem_map itself was not consistent. It has
    been removed in favor of two new, more explicit, arch-independent macros:

    pgdat_page_nr(pgdat, pagenr)
    nid_page_nr(nid, pagenr)

    I called them "pgdat" and "nid" because we overload the term "node" to mean
    "NUMA node", "DISCONTIG node" or "pg_data_t" in very confusing ways. I
    believe the newer names are much clearer.

    These macros can be overridden in the sparsemem case with a theoretically
    slower operation using node_start_pfn and pfn_to_page(), instead. We could
    make this the only behavior if people want, but I don't want to change too
    much at once. One thing at a time.

    This patch removes more code than it adds.

    Compile tested on alpha, alpha discontig, arm, arm-discontig, i386, i386
    generic, NUMAQ, Summit, ppc64, ppc64 discontig, and x86_64. Full list
    here: http://sr71.net/patches/2.6.12/2.6.12-rc1-mhp2/configs/

    Boot tested on NUMAQ, x86 SMP and ppc64 power4/5 LPARs.

    Signed-off-by: Dave Hansen
    Signed-off-by: Martin J. Bligh
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Hansen
     

22 Jun, 2005

3 commits

  • A lot of the code in arch/*/mm/hugetlbpage.c is quite similar. This patch
    attempts to consolidate a lot of the code across the arch's, putting the
    combined version in mm/hugetlb.c. There are a couple of uglyish hacks in
    order to covert all the hugepage archs, but the result is a very large
    reduction in the total amount of code. It also means things like hugepage
    lazy allocation could be implemented in one place, instead of six.

    Tested, at least a little, on ppc64, i386 and x86_64.

    Notes:
    - this patch changes the meaning of set_huge_pte() to be more
    analagous to set_pte()
    - does SH4 need s special huge_ptep_get_and_clear()??

    Acked-by: William Lee Irwin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Gibson
     
  • This patch implements a number of smp_processor_id() cleanup ideas that
    Arjan van de Ven and I came up with.

    The previous __smp_processor_id/_smp_processor_id/smp_processor_id API
    spaghetti was hard to follow both on the implementational and on the
    usage side.

    Some of the complexity arose from picking wrong names, some of the
    complexity comes from the fact that not all architectures defined
    __smp_processor_id.

    In the new code, there are two externally visible symbols:

    - smp_processor_id(): debug variant.

    - raw_smp_processor_id(): nondebug variant. Replaces all existing
    uses of _smp_processor_id() and __smp_processor_id(). Defined
    by every SMP architecture in include/asm-*/smp.h.

    There is one new internal symbol, dependent on DEBUG_PREEMPT:

    - debug_smp_processor_id(): internal debug variant, mapped to
    smp_processor_id().

    Also, i moved debug_smp_processor_id() from lib/kernel_lock.c into a new
    lib/smp_processor_id.c file. All related comments got updated and/or
    clarified.

    I have build/boot tested the following 8 .config combinations on x86:

    {SMP,UP} x {PREEMPT,!PREEMPT} x {DEBUG_PREEMPT,!DEBUG_PREEMPT}

    I have also build/boot tested x64 on UP/PREEMPT/DEBUG_PREEMPT. (Other
    architectures are untested, but should work just fine.)

    Signed-off-by: Ingo Molnar
    Signed-off-by: Arjan van de Ven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ingo Molnar
     
  • Appended patch will setup compatibility mode TASK_SIZE properly. This will
    fix atleast three known bugs that can be encountered while running
    compatibility mode apps.

    a) A malicious 32bit app can have an elf section at 0xffffe000. During
    exec of this app, we will have a memory leak as insert_vm_struct() is
    not checking for return value in syscall32_setup_pages() and thus not
    freeing the vma allocated for the vsyscall page. And instead of exec
    failing (as it has addresses > TASK_SIZE), we were allowing it to
    succeed previously.

    b) With a 32bit app, hugetlb_get_unmapped_area/arch_get_unmapped_area
    may return addresses beyond 32bits, ultimately causing corruption
    because of wrap-around and resulting in SEGFAULT, instead of returning
    ENOMEM.

    c) 32bit app doing this below mmap will now fail.

    mmap((void *)(0xFFFFE000UL), 0x10000UL, PROT_READ|PROT_WRITE,
    MAP_FIXED|MAP_PRIVATE|MAP_ANON, 0, 0);

    Signed-off-by: Zou Nan hai
    Signed-off-by: Suresh Siddha
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Suresh Siddha
     

08 Jun, 2005

1 commit

  • When Linux is running on the Xen virtual machine monitor, physical
    addresses are virtualised and cannot be directly referenced by the AGP
    GART. This patch fixes the GART driver for Xen by adding a layer of
    abstraction between physical addresses and 'GART addresses'.

    Architecture-specific functions are also defined for allocating and freeing
    the GATT. Xen requires this to ensure that table really is contiguous from
    the point of view of the GART.

    These extra interface functions are defined as 'no-ops' for all existing
    architectures that use the GART driver.

    Signed-off-by: Keir Fraser
    Signed-off-by: Andrew Morton
    Signed-off-by: Dave Jones

    Keir Fraser
     

26 May, 2005

1 commit

  • Fixes some !CONFIG_BUG warnings:
    include/asm/mmu_context.h: I funktion `switch_mm':
    include/asm/mmu_context.h:57: varning: implicit declaration of function `out_of_line_bug'

    Signed-off-by: Alexander Nyberg
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexander Nyberg
     

21 May, 2005

1 commit


17 May, 2005

7 commits

  • These days handles everything, no need for an asm
    header on just two architectures.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Collected NMI watchdog fixes.

    - Fix call of check_nmi_watchdog

    - Remove earlier move of check_nmi_watchdog to later. It does not fix the
    race it was supposed to fix fully.

    - Remove unused P6 definitions

    - Add support for performance counter based watchdog on P4 systems.

    This allows to run it only once per second, which saves some CPU time.
    Previously it would run at 1000Hz, which was too much.

    Code ported from i386

    Make this the default on Intel systems.

    - Use check_nmi_watchdog with local APIC based nmi

    - Fix race in touch_nmi_watchdog

    - Fix bug that caused incorrect performance counters to be programmed in a
    few cases on K8.

    - Remove useless check for local APIC

    - Use local_t and per_cpu variables for per CPU data.

    - Keep other CPUs busy during check_nmi_watchdog to make sure they really
    tick when in lapic mode.

    - Only check CPUs that are actually online.

    - Various other fixes.

    - Fix fallback path when MSRs are unimplemented

    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • There are unfortunately more and more multi processor Opteron systems which
    don't have HPET timer support in the southbridge. This covers in particular
    Nvidia and VIA chipsets. They also don't guarantee that the TSCs are
    synchronized between CPUs; and especially with MP powernow the systems are
    nearly unusable because the time gets very inconsistent between CPUs.

    The timer code for x86-64 was originally written under the assumption that we
    could fall back to the HPET timer on such systems. But this doesn't work
    there.

    Another alternative is to use the ACPI PM timer as primary time source. This
    patch does that. The kernel only uses PM timer when there is no other choice
    because it has some disadvantages.

    Ported over from i386. It should be faster than the i386 version because I
    dropped the "read three times" workaround, but is still considerable slower
    than HPET and also does not work together with vsyscalls which have to be
    disabled.

    Cc:
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • It is unnecessary on modern Intel or AMD systems, and that is all we support
    on x86-64

    Also causes problems on various systems

    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • Remove x86_apicid field

    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • Needed by big systems and only costs a few K of memory.

    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • This works around a bug in the AMD K8 CPUs.

    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     

06 May, 2005

1 commit


04 May, 2005

1 commit

  • New file - asm-generic/signal.h. Contains declarations of
    __sighandler_t, __sigrestore_t, SIG_DFL, SIG_IGN, SIG_ERR and default
    definitions of SIG_BLOCK, SIG_UNBLOCK and SIG_SETMASK.

    asm-*/signal.h switched to including it. The only exception is
    asm-parisc/signal.h that wants its own declaration of __sighandler_t;
    that one is left as-is.

    asm-ppc64/signal.h required one more thing - unlike everybody else it
    used __sigrestorer_t instead of usual __sigrestore_t. PPC64 switched to
    common spelling.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

01 May, 2005

7 commits

  • Signed-off-by: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen Rothwell
     
  • Discussing with Matthew Wilcox some of his outstanding patches lead me to
    this patch (among others).

    The preamble in struct sigevent can be expressed independently of the
    architecture.

    Also use __ARCH_SI_PREAMBLE_SIZE on ia64.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen Rothwell
     
  • The attached patch moves the IRQ-related SA_xxx flags (namely, SA_PROBE,
    SA_SAMPLE_RANDOM and SA_SHIRQ) from all the arch-specific headers to
    linux/signal.h. This looks like a left-over after the irq-handling code
    was consolidated. The code was moved to kernel/irq/*, but the flags are
    still left per-arch.

    Right now, adding a new IRQ flag to the arch-specific header, like this
    patch does:
    http://cvs.sourceforge.net/viewcvs.py/*checkout*/alsa/alsa-driver/utils/patches/pcsp-kernel-2.6.10-03.diff?rev=1.1
    no longer works, it breaks the compilation for all other arches, unless you
    add that flag to all the other arch-specific headers too. So I think such
    a clean-up makes sense.

    Signed-off-by: Stas Sergeev
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stas Sergeev
     
  • This patch eliminates all kernel BUGs, trims about 35k off the typical
    kernel, and makes the system slightly faster.

    Signed-off-by: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matt Mackall
     
  • The specifications that talk about E820 map doesn't have an upper limit on
    the number of e820 entries. But, today's kernel has a hard limit of 32.
    With increase in memory size, we are seeing the number of E820 entries
    reaching close to 32. Patch below bumps the number upto 128.

    The patch changes the location of EDDBUF in zero-page (as it comes after E820).
    As, EDDBUF is not used by boot loaders, this patch should not have any effect
    on bootloader-setup code interface.

    Patch covers both i386 and x86-64.

    Tested on:
    * grub booting bzImage
    * lilo booting bzImage with EDID info enabled
    * pxeboot of bzImage

    Side-effect:
    bss increases by ~ 2K and init.data increases by ~7.5K
    on all systems, due to increase in size of static arrays.

    Signed-off-by: Venkatesh Pallipadi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Venkatesh Pallipadi
     
  • The recent support for K8 multicore was misported from x86-64 to i386, due
    to an unnecessary inconsistency between the CPUID code. Sure, there is are
    no x86-64 VIA chips yet, but it should happen eventually.

    This patch fixes the i386 bug as well as makes x86-64 match i386 in the
    handing of the CPUID array.

    Signed-off-by: H. Peter Anvin
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    H. Peter Anvin
     
  • A bug against an xSeries system showed up recently noting that the
    check_nmi_watchdog() test was failing.

    I have been investigating it and discovered in both i386 and x86_64 the
    recent change to the routine to use the cpu_callin_map has uncovered a
    problem. Prior to that change, on an SMP box, the test was trivally
    passing because all cpu's were found to not yet be online, but now with the
    callin_map they are discovered, it goes on to test the counter and they
    have not yet begun to increment, so it announces a CPU is stuck and bails
    out.

    On all the systems I have access to test, the announcement of failure is
    also bougs... by the time you can login and check /proc/interrupts, the
    NMI count is happily incrementing on all CPUs. Its just that the test is
    being done too early.

    I have tried moving the call to the test around a bit, and it was always
    too early. I finally hit on this proposed solution, it delays the routine
    via a late_initcall(), seems like the right solution to me.

    Signed-off-by: Adrian Bunk
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jack F Vogel
     

20 Apr, 2005

1 commit


17 Apr, 2005

6 commits

  • This will allow hotplug CPU in the future and in general cleans up a lot of
    crufty code. It also should plug some races that the old hackish way
    introduces. Remove one old race workaround in NMI watchdog setup that is not
    needed anymore.

    I removed the old total sum of bogomips reporting code. The brag value of
    BogoMips has been greatly devalued in the last years on the open market.

    Real CPU hotplug will need some more work, but the infrastructure for it is
    there now.

    One drawback: the new TSC sync algorithm is less accurate than before. The
    old way of zeroing TSCs is too intrusive to do later. Instead the TSC of the
    BP is duplicated now, which is less accurate.

    akpm:

    - sync_tsc_bp_init seems to have the sense of `init' inverted.

    - SPIN_LOCK_UNLOCKED is deprecated - use DEFINE_SPINLOCK.

    Cc:
    Cc:
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • It was confusingly named.

    Signed-off-by: Andi Kleen
    DESC
    x86_64: Switch SMP bootup over to new CPU hotplug state machine
    EDESC
    From: "Andi Kleen"

    This will allow hotplug CPU in the future and in general cleans up a lot of
    crufty code. It also should plug some races that the old hackish way
    introduces. Remove one old race workaround in NMI watchdog setup that is not
    needed anymore.

    I removed the old total sum of bogomips reporting code. The brag value of
    BogoMips has been greatly devalued in the last years on the open market.

    Real CPU hotplug will need some more work, but the infrastructure for it is
    there now.

    One drawback: the new TSC sync algorithm is less accurate than before. The
    old way of zeroing TSCs is too intrusive to do later. Instead the TSC of the
    BP is duplicated now, which is less accurate.

    Cc:
    Cc:
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • Appended patch adds the support for Intel dual-core detection and displaying
    the core related information in /proc/cpuinfo.

    It adds two new fields "core id" and "cpu cores" to x86 /proc/cpuinfo and the
    "core id" field for x86_64("cpu cores" field is already present in x86_64).

    Number of processor cores in a die is detected using cpuid(4) and this is
    documented in IA-32 Intel Architecture Software Developer's Manual (vol 2a)
    (http://developer.intel.com/design/pentium4/manuals/index_new.htm#sdm_vol2a)

    This patch also adds cpu_core_map similar to cpu_sibling_map.

    Slightly hacked by AK.

    Signed-off-by: Suresh Siddha
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • Signed-off-by: Paolo 'Blaisorblade' Giarrusso
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • Calling a notifier three times in the debug handler does not make much sense,
    because a debugger can figure out the various conditions by itself. Remove
    the additional calls to DIE_DEBUG and DIE_DEBUGSTEP completely.

    This matches what i386 does now.

    This also makes sure interrupts are always still disabled when calling a
    debugger, which prevents:

    BUG: using smp_processor_id() in preemptible [00000001] code: tpopf/1470
    caller is post_kprobe_handler+0x9/0x70

    Call Trace:{smp_processor_id+191} {post_kpro
    be_handler+9}
    {kprobe_exceptions_notify+58}
    {notifier_call_chain+32} {do_debug+335}
    {debug+127}

    on preemptible debug kernels with kprobes when single stepping in user space.

    This was probably a bug even on non preempt kernels, this function was
    supposed to be running with interrupts off according to a comment there.

    Note to third part debugger maintainers: please double check your debugger can
    still single step.

    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen
     
  • Look for gaps in the e820 memory map to put PCI resources in.

    This hopefully fixes problems with the PCI code assigning 32bit BARs MMIO
    resources which are >32bit.

    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen