09 Oct, 2009

4 commits


08 Oct, 2009

2 commits

  • Now that range timers and deferred timers are common, I found a
    problem with these using the "perf timechart" tool. Frans Pop also
    reported high scheduler latencies via LatencyTop, when using
    iwlagn.

    It turns out that on x86, these two 'opportunistic' timers only get
    checked when another "real" timer happens. These opportunistic
    timers have the objective to save power by hitchhiking on other
    wakeups, as to avoid CPU wakeups by themselves as much as possible.

    The change in this patch runs this check not only at timer
    interrupts, but at all (device) interrupts. The effect is that:

    1) the deferred timers/range timers get delayed less

    2) the range timers cause less wakeups by themselves because
    the percentage of hitchhiking on existing wakeup events goes up.

    I've verified the working of the patch using "perf timechart", the
    original exposed bug is gone with this patch. Frans also reported
    success - the latencies are now down in the expected ~10 msec
    range.

    Signed-off-by: Arjan van de Ven
    Tested-by: Frans Pop
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Mike Galbraith
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arjan van de Ven
     
  • * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6:
    agp: parisc-agp.c - use correct page_mask function
    parisc: Fix linker script breakage.
    parisc: convert to asm-generic/hardirq.h
    parisc: Make THREAD_SIZE available to assembly files and linker scripts.
    parisc: correct use of SHF_ALLOC
    parisc: rename parisc's vmalloc_start to parisc_vmalloc_start
    parisc: add me to Maintainers
    parisc: includecheck fix: signal.c
    parisc: HAVE_ARCH_TRACEHOOK
    parisc: add skeleton syscall.h
    parisc: stop using task->ptrace for {single,block}step flags
    parisc: split syscall_trace into two halves
    parisc: add missing TI_TASK macro in syscall.S
    parisc: tracehook_signal_handler
    parisc: tracehook_report_syscall

    Linus Torvalds
     

06 Oct, 2009

18 commits

  • …man/linux-omap-pm into omap-fixes-for-linus

    Tony Lindgren
     
  • I was using Coccinelle with the mutex_unlock semantic patch, and it
    unconvered this problem. It appears to be a valid missing unlock issue.
    This change should correct it by moving the unlock below the label.

    This patch is against the mainline kernel.

    Cc: Julia Lawall
    Cc: Hiroshi DOYU
    Signed-off-by: Daniel Walker
    Signed-off-by: Kevin Hilman
    Signed-off-by: Tony Lindgren

    Daniel Walker
     
  • Fix incorrect spelling

    Signed-off-by: Hiroshi DOYU
    Signed-off-by: Tony Lindgren

    Hiroshi DOYU
     
  • the original flush operation is to flush the function address which is
    copied from.
    But we do not change the function code and it is not necessary to flush it.

    Signed-off-by: janboe
    Acked-by: Paul Walmsley
    Signed-off-by: Tony Lindgren

    ye janboe
     
  • Some architectures such as Sparc, ARM and MIPS (basically
    everything with flush_dcache_page()) need to deal with dcache
    aliases by carefully placing pages in both kernel and user maps.

    These architectures typically have to use vmalloc_user() for this.

    However, on other architectures, vmalloc() is not needed and has
    the downsides of being more restricted and slower than regular
    allocations.

    Signed-off-by: Peter Zijlstra
    Acked-by: David Miller
    Cc: Andrew Morton
    Cc: Jens Axboe
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • Lock DPLL5 at 120MHz at boot. The USBHOST 120MHz f-clock and
    USBTLL f-clock are the only users of this DPLL, and 120MHz is
    is the only recommended rate for these clocks.

    With this patch, the 60 MHz ULPI clock is generated correctly.

    Tested on an OMAP3430 SDP.

    Signed-off-by: Rajendra Nayak
    Signed-off-by: Anand Gadiyar
    Signed-off-by: Paul Walmsley
    Signed-off-by: Tony Lindgren

    Rajendra Nayak
     
  • Commit cd92204924fafbd5c7241dfd12ca3176d542e0c5 added
    support for omap850. However, the patch accidentally
    removed the wrong ifdef:

    # define cpu_is_omap730() 1
    # endif
    #endif
    +#else
    +# if defined(CONFIG_ARCH_OMAP850)
    +# undef cpu_is_omap850
    +# define cpu_is_omap850() 1
    +# endif
    +#endif

    ...

    void omap2_check_revision(void);

    #endif /* defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) */
    -
    -#endif

    Instead of removing removing the #endif at the end of the file,
    the #endif before #else should have been removed.

    But we cannot have multiple #else statements as pointed out by
    Alistair Buxton . So the fix is to:

    - remove the non-multi-omap special handling, as we need to
    detect between omap730 and omap850 anyways.

    - add the missing #endif back to the end of the file

    Reported-by: Sanjeev Premi
    Signed-off-by: Tony Lindgren

    Tony Lindgren
     
  • * 'kvm-updates/2.6.32' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    KVM: add support for change_pte mmu notifiers
    KVM: MMU: add SPTE_HOST_WRITEABLE flag to the shadow ptes
    KVM: MMU: dont hold pagecount reference for mapped sptes pages
    KVM: Prevent overflow in KVM_GET_SUPPORTED_CPUID
    KVM: VMX: flush TLB with INVEPT on cpu migration
    KVM: fix LAPIC timer period overflow
    KVM: s390: fix memsize >= 4G
    KVM: SVM: Handle tsc in svm_get_msr/svm_set_msr correctly
    KVM: SVM: Fix tsc offset adjustment when running nested

    Linus Torvalds
     
  • * 'fixes-for-linus' of git://git.monstr.eu/linux-2.6-microblaze:
    microblaze: Clear sticky FSR register after saving it to func parametr
    microblaze: UMS is used only for MMU kernel

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
    sparc: using HZ needs an include of linux/param.h
    sparc32: convert to asm-generic/hardirq.h
    sparc64: Cache per-cpu %pcr register value in perf code.
    sparc64: Fix comment typo in perf_event.c
    sparc64: Minor coding style fixups in perf code.
    sparc64: Add a basic conflict engine in preparation for multi-counter support.
    sparc64: Increase vmalloc size to fix percpu regressions.
    sparc64: Add initial perf event conflict resolution and checks.
    sparc: Niagara1 perf event support.
    sparc: Add Niagara2 HW cache event support.
    sparc: Support all ultra3 and ultra4 derivatives.
    sparc: Support HW cache events.

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    x86: Don't leak 64-bit kernel register values to 32-bit processes
    x86, SLUB: Remove unused CONFIG FAST_CMPXCHG_LOCAL
    x86: earlyprintk: Fix regression to handle serial,ttySn as 1 arg
    x86: Don't generate cmpxchg8b_emu if CONFIG_X86_CMPXCHG64=y
    x86: Fix csum_ipv6_magic asm memory clobber
    x86: Optimize cmpxchg64() at build-time some more

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu:
    m68knommu: fix rename of pt_regs offset defines breakage
    m68knommu: remove duplicated #include
    m68knommu: show KiB rather than pages in "Freeing initrd memory:" message

    Linus Torvalds
     
  • The 'pwrdm_for_each()' function walks powerdomains with a spinlock
    locked, so the the callbacks cannot do anything which may sleep.
    This patch introduces a 'pwrdm_for_each_nolock()' helper which does
    the same, but without the spinlock locked. This fixes the following
    lockdep warning:

    [ 0.000000] WARNING: at kernel/lockdep.c:2460 lockdep_trace_alloc+0xac/0xec()
    [ 0.000000] Modules linked in:
    (unwind_backtrace+0x0/0xdc) from [] (warn_slowpath_common+0x48/0x60)
    (warn_slowpath_common+0x48/0x60) from [] (lockdep_trace_alloc+0xac/0xec)
    (lockdep_trace_alloc+0xac/0xec) from [] (kmem_cache_alloc+0x1c/0xd0)
    (kmem_cache_alloc+0x1c/0xd0) from [] (d_alloc+0x1c/0x1a4)
    (d_alloc+0x1c/0x1a4) from [] (__lookup_hash+0xd8/0x118)
    (__lookup_hash+0xd8/0x118) from [] (lookup_one_len+0x84/0x94)
    (lookup_one_len+0x84/0x94) from [] (debugfs_create_file+0x8c/0x20c)
    (debugfs_create_file+0x8c/0x20c) from [] (debugfs_create_dir+0x1c/0x20)
    (debugfs_create_dir+0x1c/0x20) from [] (pwrdms_setup+0x60/0x90)
    (pwrdms_setup+0x60/0x90) from [] (pwrdm_for_each+0x30/0x80)
    (pwrdm_for_each+0x30/0x80) from [] (pm_dbg_init+0x7c/0x14c)
    (pm_dbg_init+0x7c/0x14c) from [] (do_one_initcall+0x5c/0x1b8)
    (do_one_initcall+0x5c/0x1b8) from [] (kernel_init+0x90/0x10c)
    (kernel_init+0x90/0x10c) from [] (kernel_thread_exit+0x0/0x8)

    Signed-off-by: Artem Bityutskiy
    Signed-off-by: Kevin Hilman

    Artem Bityutskiy
     
  • Currently, only GPIOs in the wakeup domain (GPIOs in bank 0) are
    enabled as wakups. This patch also enables GPIOs in the PER
    powerdomain (banks 2-6) to be used as possible wakeup sources.

    In addition, this patch ensures that all GPIO wakeups can wakeup
    the MPU using the PM_MPUGRPSEL_ registers.

    NOTE: this doesn't enable the individual GPIOs as wakeups, this simply
    enables the per-bank wakeups at the powerdomain level.

    This problem was discovered by Mike Chan when preventing the CORE
    powerdomain from going into retention/off. When CORE was allowed to
    hit retention, GPIO wakeups via IO pad were working fine, but when
    CORE remained on, GPIO module-level wakeups were not working properly.

    To test, prevent CORE from going inactive/retention/off, thus
    preventing the IO chain from being armed:

    # echo 3 > /debug/pm_debug/core_pwrdm/suspend

    This ensures that GPIO wakeups happen via module-level wakeups and
    not via IO pad.

    Tested on 3430SDP using the touchscreen GPIO (gpio 2, in WKUP)
    Tested on Zoom2 using the QUART interrup GPIO (gpio 102, in PER)

    Also, c.f. OMAP PM wiki for troubleshooting GPIO wakeup issues:
    http://elinux.org/OMAP_Power_Management

    Reported-by: Mike Chan
    Signed-off-by: Kevin Hilman

    Kevin Hilman
     
  • USBHOST module has 2 fclocks (for HOST1 and HOST2), only one iclock
    and only a single bit in the WKST register to indicate a wakeup event.

    Because of the single WKST bit, we cannot know whether a wakeup event
    was on HOST1 or HOST2, so enable both fclocks before clearing the
    wakeup event to ensure both hosts can properly clear the event.

    Signed-off-by: Vikram Pandita
    Signed-off-by: Kevin Hilman

    Vikram Pandita
     
  • Clearing wakeup sources is now only done when the PRM indicates a
    wakeup source interrupt. Since we don't handle any other types of
    PRCM interrupts right now, warn if we get any other type of PRCM
    interrupt. Either code needs to be added to the PRCM interrupt
    handler to react to these, or these other interrupts should be masked
    off at init.

    Updated after Jon Hunter's PRCM IRQ rework by Kevin Hilman.

    Signed-off-by: Paul Walmsley
    Signed-off-by: Kevin Hilman

    Paul Walmsley
     
  • PM_WKST register contents should be ANDed with the contents of the
    MPUGRPSEL registers. Otherwise the MPU PRCM interrupt handler could
    wind up clearing wakeup events meant for the IVA PRCM interrupt
    handler. A future revision to this code should be to read a cached
    version of MPUGRPSEL from the powerdomain code, since PRM reads are
    relatively slow.

    Updated after Jon Hunter's PRCM IRQ change by Kevin Hilman

    Signed-off-by: Paul Walmsley
    Signed-off-by: Kevin Hilman

    Paul Walmsley
     
  • There are two scenarios where a race condition could result in a hang
    in the prcm_interrupt handler. These are:

    1). Waiting for PRM_IRQSTATUS_MPU register to clear.
    Bit 0 of the PRM_IRQSTATUS_MPU register indicates that a wake-up event
    is pending for the MPU. This bit can only be cleared if the all the
    wake-up events latched in the various PM_WKST_x registers have been
    cleared. If a wake-up event occurred during the processing of the prcm
    interrupt handler, after the corresponding PM_WKST_x register was
    checked but before the PRM_IRQSTATUS_MPU was cleared, then the CPU
    would be stuck forever waiting for bit 0 in PRM_IRQSTATUS_MPU to be
    cleared.

    2). Waiting for the PM_WKST_x register to clear.
    Some power domains have more than one wake-up source. The PM_WKST_x
    registers indicate the source of a wake-up event and need to be cleared
    after a wake-up event occurs. When the PM_WKST_x registers are read and
    before they are cleared, it is possible that another wake-up event
    could occur causing another bit to be set in one of the PM_WKST_x
    registers. If this did occur after reading a PM_WKST_x register then
    the CPU would miss this event and get stuck forever in a loop waiting
    for that PM_WKST_x register to clear.

    This patch address the above race conditions that would result in a
    hang.

    Signed-off-by: Jon Hunter
    Reviewed-by: Paul Walmsley
    Signed-off-by: Kevin Hilman

    Jon Hunter
     

05 Oct, 2009

3 commits


04 Oct, 2009

13 commits

  • this is needed for kvm if it want ksm to directly map pages into its
    shadow page tables.

    [marcelo: cast pfn assignment to u64]

    Signed-off-by: Izik Eidus
    Signed-off-by: Marcelo Tosatti

    Izik Eidus
     
  • this flag notify that the host physical page we are pointing to from
    the spte is write protected, and therefore we cant change its access
    to be write unless we run get_user_pages(write = 1).

    (this is needed for change_pte support in kvm)

    Signed-off-by: Izik Eidus
    Signed-off-by: Marcelo Tosatti

    Izik Eidus
     
  • When using mmu notifiers, we are allowed to remove the page count
    reference tooken by get_user_pages to a specific page that is mapped
    inside the shadow page tables.

    This is needed so we can balance the pagecount against mapcount
    checking.

    (Right now kvm increase the pagecount and does not increase the
    mapcount when mapping page into shadow page table entry,
    so when comparing pagecount against mapcount, you have no
    reliable result.)

    Signed-off-by: Izik Eidus
    Signed-off-by: Marcelo Tosatti

    Izik Eidus
     
  • The number of entries is multiplied by the entry size, which can
    overflow on 32-bit hosts. Bound the entry count instead.

    Reported-by: David Wagner
    Cc: stable@kernel.org
    Signed-off-by: Avi Kivity

    Avi Kivity
     
  • It is possible that stale EPTP-tagged mappings are used, if a
    vcpu migrates to a different pcpu.

    Set KVM_REQ_TLB_FLUSH in vmx_vcpu_load, when switching pcpus, which
    will invalidate both VPID and EPT mappings on the next vm-entry.

    Cc: stable@kernel.org
    Signed-off-by: Marcelo Tosatti

    Marcelo Tosatti
     
  • Don't overflow when computing the 64-bit period from 32-bit registers.

    Fixes sourceforge bug #2826486.

    Signed-off-by: Aurelien Jarno
    Cc: stable@kernel.org
    Signed-off-by: Marcelo Tosatti

    Aurelien Jarno
     
  • commit 628eb9b8a8f3
    KVM: s390: streamline memslot handling

    introduced kvm_s390_vcpu_get_memsize. This broke guests >=4G, since this
    function returned an int.

    This patch changes the return value to a long.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Avi Kivity

    Christian Borntraeger
     
  • When running nested we need to touch the l1 guests
    tsc_offset. Otherwise changes will be lost or a wrong value
    be read.

    Cc: stable@kernel.org
    Signed-off-by: Joerg Roedel
    Signed-off-by: Marcelo Tosatti

    Joerg Roedel
     
  • When svm_vcpu_load is called while the vcpu is running in
    guest mode the tsc adjustment made there is lost on the next
    emulated #vmexit. This causes the tsc running backwards in
    the guest. This patch fixes the issue by also adjusting the
    tsc_offset in the emulated hsave area so that it will not
    get lost.

    Cc: stable@kernel.org
    Signed-off-by: Joerg Roedel
    Signed-off-by: Marcelo Tosatti

    Joerg Roedel
     
  • * 'for-linus' of git://www.linux-m32r.org/git/takata/linux-2.6_dev:
    m32r: Fix IPI function calls for SMP
    m32r: Fix set_memory() for DISCONTIGMEM
    m32r: add rtc_lock variable
    m32r: define ioread* and iowrite* macros
    m32r: export delay loop symbols
    m32r: fix tme_handler

    Linus Torvalds
     
  • This patch fixes the m32r SMP kernel after 2.6.27.

    A part of the following patch breaks m32r SMP operation.
    > m32r: convert to generic helpers for IPI function calls
    > commit 7b7426c8a615cf61df9a77b9df7d5b75d91e3fa0

    In the above patch, a CALL_FUNC_SINGLE_IPI was newly introduced,
    but the its IPI vector number was wrong in the patch code.

    The m32r SMP kernel hanged-up during boot operation, because
    the CPU_BOOT_IPI was called instead of CALL_FUNC_SINGLE_IPI
    (CPU_BOOT_IPI had no side effect at that time because the 2nd
    core had already been started up),
    as a result, csd_unlock() was not called, then a dead lock
    occurred in csd_lock_wait() after the detection of Compact Flash
    memory as IDE generic disk.

    Signed-off-by: Toshihiro HANAWA
    Signed-off-by: Hirokazu Takata

    Toshihiro HANAWA
     
  • In case CONFIG_DISCONTIGMEM is set, the memory size of system was
    always determined by CONFIG_MEMORY_SIZE and was not changeable.

    This patch fixes set_memory() of arch/m32r/mm/discontig.c so that
    we can specify memory size by the "mem=" kernel parameter.

    Signed-off-by: Hirokazu Takata

    Hirokazu Takata
     
  • Add a spinlock variable "rtc_lock".
    This is taken from arch/arm/kernel/time.c.

    Signed-off-by: Hirokazu Takata

    Hirokazu Takata