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

12 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
     
  • local_t is actually a win over atomic_t because it does not need lock
    prefixes.

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

    Andi Kleen
     
  • On Intel Noconas the TSC ticks with a constant frequency. Don't scale the
    factor used by udelay when cpufreq changes the frequency.

    This generalizes an earlier patch by Intel for this.

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

    Andi Kleen
     
  • To avoid some code duplication.

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

    Andi Kleen
     
  • Use a real VMA to map the 32bit vsyscall page

    This interacts better with Hugh's upcomming VMA walk optimization
    Also removes some ugly special cases.

    Code roughly modelled after the ppc64 vdso version from Ben Herrenschmidt.

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

    Andi Kleen
     
  • Use the correct file name in BUG()

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

    Andi Kleen
     
  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds