03 Apr, 2012

6 commits

  • commit f35b431dde39fb40944d1024f08d88fbf04a3193 upstream.

    The ARM IP revisions in Tegra are:
    Tegra20: CPU r1p1, PL310 r2p0
    Tegra30: CPU A01=r2p7/>=A02=r2p9, NEON r2p3-50, PL310 r3p1-50

    Based on work by Olof Johansson, although the actual list of errata is
    somewhat different here, since I added a bunch more and removed one PL310
    erratum that doesn't seem applicable.

    Signed-off-by: Stephen Warren
    Signed-off-by: Olof Johansson
    Signed-off-by: Greg Kroah-Hartman

    Stephen Warren
     
  • Commit 2ee619f9487c2acc1efdf2c78e68e2bd51b635fa upstream.

    Make the TMU clocksource driver mark its device as "always on"
    using pm_genpd_dev_always_on() to protect it from surprise power
    removals and make sh7372_add_standard_devices() add TMU devices on
    sh7372 to the A4R power domain so that their "always on" flags
    are taken into account as appropriate.

    Signed-off-by: Rafael J. Wysocki
    Tested-by: Simon Horman
    Acked-by: Paul Mundt
    Signed-off-by: Greg Kroah-Hartman

    Rafael J. Wysocki
     
  • commit 29a2e2836ff9ea65a603c89df217f4198973a74f upstream.

    The problem occurs on !CONFIG_VM86 kernels [1] when a kernel-mode task
    returns from a system call with a pending signal.

    A real-life scenario is a child of 'khelper' returning from a failed
    kernel_execve() in ____call_usermodehelper() [ kernel/kmod.c ].
    kernel_execve() fails due to a pending SIGKILL, which is the result of
    "kill -9 -1" (at least, busybox's init does it upon reboot).

    The loop is as follows:

    * syscall_exit_work:
    - work_pending: // start_of_the_loop
    - work_notify_sig:
    - do_notify_resume()
    - do_signal()
    - if (!user_mode(regs)) return;
    - resume_userspace // TIF_SIGPENDING is still set
    - work_pending // so we call work_pending => goto
    // start_of_the_loop

    More information can be found in another LKML thread:
    http://www.serverphorums.com/read.php?12,457826

    [1] the problem was also seen on MIPS.

    Signed-off-by: Dmitry Adamushko
    Link: http://lkml.kernel.org/r/1332448765.2299.68.camel@dimm
    Cc: Oleg Nesterov
    Cc: Roland McGrath
    Cc: Andrew Morton
    Signed-off-by: H. Peter Anvin
    Signed-off-by: Greg Kroah-Hartman

    Dmitry Adamushko
     
  • commit 13354dc412c36fe554f9904a92f1268c74af7e87 upstream.

    Syscall 282 was mistakenly named mq_getsetaddr instead of mq_getsetattr.
    When building uClibc against the Linux kernel this would result in a
    shared library that doesn't provide the mq_getattr() and mq_setattr()
    functions.

    Signed-off-by: Thierry Reding
    Link: http://lkml.kernel.org/r/1332366608-2695-2-git-send-email-thierry.reding@avionic-design.de
    Signed-off-by: H. Peter Anvin
    Signed-off-by: Greg Kroah-Hartman

    Thierry Reding
     
  • commit 1a5a9906d4e8d1976b701f889d8f35d54b928f25 upstream.

    In some cases it may happen that pmd_none_or_clear_bad() is called with
    the mmap_sem hold in read mode. In those cases the huge page faults can
    allocate hugepmds under pmd_none_or_clear_bad() and that can trigger a
    false positive from pmd_bad() that will not like to see a pmd
    materializing as trans huge.

    It's not khugepaged causing the problem, khugepaged holds the mmap_sem
    in write mode (and all those sites must hold the mmap_sem in read mode
    to prevent pagetables to go away from under them, during code review it
    seems vm86 mode on 32bit kernels requires that too unless it's
    restricted to 1 thread per process or UP builds). The race is only with
    the huge pagefaults that can convert a pmd_none() into a
    pmd_trans_huge().

    Effectively all these pmd_none_or_clear_bad() sites running with
    mmap_sem in read mode are somewhat speculative with the page faults, and
    the result is always undefined when they run simultaneously. This is
    probably why it wasn't common to run into this. For example if the
    madvise(MADV_DONTNEED) runs zap_page_range() shortly before the page
    fault, the hugepage will not be zapped, if the page fault runs first it
    will be zapped.

    Altering pmd_bad() not to error out if it finds hugepmds won't be enough
    to fix this, because zap_pmd_range would then proceed to call
    zap_pte_range (which would be incorrect if the pmd become a
    pmd_trans_huge()).

    The simplest way to fix this is to read the pmd in the local stack
    (regardless of what we read, no need of actual CPU barriers, only
    compiler barrier needed), and be sure it is not changing under the code
    that computes its value. Even if the real pmd is changing under the
    value we hold on the stack, we don't care. If we actually end up in
    zap_pte_range it means the pmd was not none already and it was not huge,
    and it can't become huge from under us (khugepaged locking explained
    above).

    All we need is to enforce that there is no way anymore that in a code
    path like below, pmd_trans_huge can be false, but pmd_none_or_clear_bad
    can run into a hugepmd. The overhead of a barrier() is just a compiler
    tweak and should not be measurable (I only added it for THP builds). I
    don't exclude different compiler versions may have prevented the race
    too by caching the value of *pmd on the stack (that hasn't been
    verified, but it wouldn't be impossible considering
    pmd_none_or_clear_bad, pmd_bad, pmd_trans_huge, pmd_none are all inlines
    and there's no external function called in between pmd_trans_huge and
    pmd_none_or_clear_bad).

    if (pmd_trans_huge(*pmd)) {
    if (next-addr != HPAGE_PMD_SIZE) {
    VM_BUG_ON(!rwsem_is_locked(&tlb->mm->mmap_sem));
    split_huge_page_pmd(vma->vm_mm, pmd);
    } else if (zap_huge_pmd(tlb, vma, pmd, addr))
    continue;
    /* fall through */
    }
    if (pmd_none_or_clear_bad(pmd))

    Because this race condition could be exercised without special
    privileges this was reported in CVE-2012-1179.

    The race was identified and fully explained by Ulrich who debugged it.
    I'm quoting his accurate explanation below, for reference.

    ====== start quote =======
    mapcount 0 page_mapcount 1
    kernel BUG at mm/huge_memory.c:1384!

    At some point prior to the panic, a "bad pmd ..." message similar to the
    following is logged on the console:

    mm/memory.c:145: bad pmd ffff8800376e1f98(80000000314000e7).

    The "bad pmd ..." message is logged by pmd_clear_bad() before it clears
    the page's PMD table entry.

    143 void pmd_clear_bad(pmd_t *pmd)
    144 {
    -> 145 pmd_ERROR(*pmd);
    146 pmd_clear(pmd);
    147 }

    After the PMD table entry has been cleared, there is an inconsistency
    between the actual number of PMD table entries that are mapping the page
    and the page's map count (_mapcount field in struct page). When the page
    is subsequently reclaimed, __split_huge_page() detects this inconsistency.

    1381 if (mapcount != page_mapcount(page))
    1382 printk(KERN_ERR "mapcount %d page_mapcount %d\n",
    1383 mapcount, page_mapcount(page));
    -> 1384 BUG_ON(mapcount != page_mapcount(page));

    The root cause of the problem is a race of two threads in a multithreaded
    process. Thread B incurs a page fault on a virtual address that has never
    been accessed (PMD entry is zero) while Thread A is executing an madvise()
    system call on a virtual address within the same 2 MB (huge page) range.

    virtual address space
    .---------------------.
    | |
    | |
    .-|---------------------|
    | | |
    | | |< |/////////////////////| > A(range)
    page | |/////////////////////|-'
    | | |
    | | |
    '-|---------------------|
    | |
    | |
    '---------------------'

    - Thread A is executing an madvise(..., MADV_DONTNEED) system call
    on the virtual address range "A(range)" shown in the picture.

    sys_madvise
    // Acquire the semaphore in shared mode.
    down_read(¤t->mm->mmap_sem)
    ...
    madvise_vma
    switch (behavior)
    case MADV_DONTNEED:
    madvise_dontneed
    zap_page_range
    unmap_vmas
    unmap_page_range
    zap_pud_range
    zap_pmd_range
    //
    // Assume that this huge page has never been accessed.
    // I.e. content of the PMD entry is zero (not mapped).
    //
    if (pmd_trans_huge(*pmd)) {
    // We don't get here due to the above assumption.
    }
    //
    // Assume that Thread B incurred a page fault and
    .---------> // sneaks in here as shown below.
    | //
    | if (pmd_none_or_clear_bad(pmd))
    | {
    | if (unlikely(pmd_bad(*pmd)))
    | pmd_clear_bad
    | {
    | pmd_ERROR
    | // Log "bad pmd ..." message here.
    | pmd_clear
    | // Clear the page's PMD entry.
    | // Thread B incremented the map count
    | // in page_add_new_anon_rmap(), but
    | // now the page is no longer mapped
    | // by a PMD entry (-> inconsistency).
    | }
    | }
    |
    v
    - Thread B is handling a page fault on virtual address "B(fault)" shown
    in the picture.

    ...
    do_page_fault
    __do_page_fault
    // Acquire the semaphore in shared mode.
    down_read_trylock(&mm->mmap_sem)
    ...
    handle_mm_fault
    if (pmd_none(*pmd) && transparent_hugepage_enabled(vma))
    // We get here due to the above assumption (PMD entry is zero).
    do_huge_pmd_anonymous_page
    alloc_hugepage_vma
    // Allocate a new transparent huge page here.
    ...
    __do_huge_pmd_anonymous_page
    ...
    spin_lock(&mm->page_table_lock)
    ...
    page_add_new_anon_rmap
    // Here we increment the page's map count (starts at -1).
    atomic_set(&page->_mapcount, 0)
    set_pmd_at
    // Here we set the page's PMD entry which will be cleared
    // when Thread A calls pmd_clear_bad().
    ...
    spin_unlock(&mm->page_table_lock)

    The mmap_sem does not prevent the race because both threads are acquiring
    it in shared mode (down_read). Thread B holds the page_table_lock while
    the page's map count and PMD table entry are updated. However, Thread A
    does not synchronize on that lock.

    ====== end quote =======

    [akpm@linux-foundation.org: checkpatch fixes]
    Reported-by: Ulrich Obergfell
    Signed-off-by: Andrea Arcangeli
    Acked-by: Johannes Weiner
    Cc: Mel Gorman
    Cc: Hugh Dickins
    Cc: Dave Jones
    Acked-by: Larry Woodman
    Acked-by: Rik van Riel
    Cc: Mark Salter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Andrea Arcangeli
     
  • commit 73d63d038ee9f769f5e5b46792d227fe20e442c5 upstream.

    With the recent changes to clear_IO_APIC_pin() which tries to
    clear remoteIRR bit explicitly, some of the users started to see
    "Unable to reset IRR for apic .." messages.

    Close look shows that these are related to bogus IO-APIC entries
    which return's all 1's for their io-apic registers. And the
    above mentioned error messages are benign. But kernel should
    have ignored such io-apic's in the first place.

    Check if register 0, 1, 2 of the listed io-apic are all 1's and
    ignore such io-apic.

    Reported-by: Álvaro Castillo
    Tested-by: Jon Dufresne
    Signed-off-by: Suresh Siddha
    Cc: yinghai@kernel.org
    Cc: kernel-team@fedoraproject.org
    Cc: Josh Boyer
    Link: http://lkml.kernel.org/r/1331577393.31585.94.camel@sbsiddha-desk.sc.intel.com
    [ Performed minor cleanup of affected code. ]
    Signed-off-by: Ingo Molnar
    Signed-off-by: Greg Kroah-Hartman

    Suresh Siddha
     

17 Mar, 2012

1 commit


16 Mar, 2012

1 commit

  • The ENDPROC() on sys_fadvise64_c6x() in arch/c6x/kernel/entry.S is
    outside of the conditional block with the matching ENTRY() macro. This
    leads a newer (v2.22 vs. v2.20) assembler to complain:

    /tmp/ccGZBaPT.s: Assembler messages:
    /tmp/ccGZBaPT.s: Error: .size expression for sys_fadvise64_c6x does not evaluate to a constant

    The conditional block became dead code when c6x switched to generic
    unistd.h and should be removed along with the offending ENDPROC().

    Signed-off-by: Mark Salter
    Acked-by: David Howells

    Mark Salter
     

15 Mar, 2012

2 commits


14 Mar, 2012

4 commits

  • Newer version of binutils are more strict about specifying the
    correct options to enable certain classes of instructions.

    The sparc32 build is done for v7 in order to support sun4c systems
    which lack hardware integer multiply and divide instructions.

    So we have to pass -Av8 when building the assembler routines that
    use these instructions and get patched into the kernel when we find
    out that we have a v8 capable cpu.

    Reported-by: Paul Gortmaker
    Signed-off-by: David S. Miller

    David S. Miller
     
  • Pull arch/tile update from Chris Metcalf
    "These include a couple of queued-up minor bug fixes from the
    community, a fix to unbreak the sysfs hooks in tile, and syncing up
    the defconfigs."

    Ugh. defconfigs updates without "make minconfig". Tons of ugly
    pointless lines there, I suspect.

    * 'stable' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
    tile: Use set_current_blocked() and block_sigmask()
    arch/tile: misplaced parens near likely
    arch/tile: sync up the defconfig files to the tip
    arch/tile: Fix up from commit 8a25a2fd126c621f44f3aeaef80d51f00fc11639

    Linus Torvalds
     
  • Pull perf fixes from Ingo Molnar.

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf record: Fix buffer overrun bug in tracepoint_id_to_path()
    perf/x86: Fix local vs remote memory events for NHM/WSM

    Linus Torvalds
     
  • As described in e6fa16ab ("signal: sigprocmask() should do
    retarget_shared_pending()") the modification of current->blocked is
    incorrect as we need to check whether the signal we're about to block
    is pending in the shared queue.

    Also, use the new helper function introduced in commit 5e6292c0f28f
    ("signal: add block_sigmask() for adding sigmask to current->blocked")
    which centralises the code for updating current->blocked after
    successfully delivering a signal and reduces the amount of duplicate
    code across architectures. In the past some architectures got this
    code wrong, so using this helper function should stop that from
    happening again.

    Cc: Arnd Bergmann
    Acked-by: Oleg Nesterov
    Signed-off-by: Matt Fleming
    Signed-off-by: Chris Metcalf

    Matt Fleming
     

13 Mar, 2012

6 commits

  • Pull SuperH fixes from Paul Mundt.

    * tag 'sh-for-linus' of git://github.com/pmundt/linux-sh:
    sh-sci / PM: Avoid deadlocking runtime PM
    sh: fix up the ubc clock definition for sh7785.
    sh: add parameter for RSPI in clock-sh7757
    sh: Fix sh2a vbr table for more than 255 irqs

    Linus Torvalds
     
  • Pull SH/R-Mobile fixes from Paul Mundt.

    * tag 'rmobile-for-linus' of git://github.com/pmundt/linux-sh:
    ARM: mach-shmobile: ap4evb: fixup fsi2_ak4643_info typo
    ARM: mach-shmobile: mackerel: Reserve DMA memory for the frame buffer
    ARM: mach-shmobile: Fix ag5evm compilation by including linux/videodev2.h
    ARM: mach-shmobile: Fix bonito compile breakage

    Linus Torvalds
     
  • Verified using the below proglet.. before:

    [root@westmere ~]# perf stat -e node-stores -e node-store-misses ./numa 0
    remote write

    Performance counter stats for './numa 0':

    2,101,554 node-stores
    2,096,931 node-store-misses

    5.021546079 seconds time elapsed

    [root@westmere ~]# perf stat -e node-stores -e node-store-misses ./numa 1
    local write

    Performance counter stats for './numa 1':

    501,137 node-stores
    199 node-store-misses

    5.124451068 seconds time elapsed

    After:

    [root@westmere ~]# perf stat -e node-stores -e node-store-misses ./numa 0
    remote write

    Performance counter stats for './numa 0':

    2,107,516 node-stores
    2,097,187 node-store-misses

    5.012755149 seconds time elapsed

    [root@westmere ~]# perf stat -e node-stores -e node-store-misses ./numa 1
    local write

    Performance counter stats for './numa 1':

    2,063,355 node-stores
    165 node-store-misses

    5.082091494 seconds time elapsed

    #define _GNU_SOURCE

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

    #define SIZE (32*1024*1024)

    volatile int done;

    void sig_done(int sig)
    {
    done = 1;
    }

    int main(int argc, char **argv)
    {
    cpu_set_t *mask, *mask2;
    size_t size;
    int i, err, t;
    int nrcpus = 1024;
    char *mem;
    unsigned long nodemask = 0x01; /* node 0 */
    DIR *node;
    struct dirent *de;
    int read = 0;
    int local = 0;

    if (argc < 2) {
    printf("usage: %s [0-3]\n", argv[0]);
    printf(" bit0 - local/remote\n");
    printf(" bit1 - read/write\n");
    exit(0);
    }

    switch (atoi(argv[1])) {
    case 0:
    printf("remote write\n");
    break;
    case 1:
    printf("local write\n");
    local = 1;
    break;
    case 2:
    printf("remote read\n");
    read = 1;
    break;
    case 3:
    printf("local read\n");
    local = 1;
    read = 1;
    break;
    }

    mask = CPU_ALLOC(nrcpus);
    size = CPU_ALLOC_SIZE(nrcpus);
    CPU_ZERO_S(size, mask);

    node = opendir("/sys/devices/system/node/node0/");
    if (!node)
    perror("opendir");
    while ((de = readdir(node))) {
    int cpu;

    if (sscanf(de->d_name, "cpu%d", &cpu) == 1)
    CPU_SET_S(cpu, size, mask);
    }
    closedir(node);

    mask2 = CPU_ALLOC(nrcpus);
    CPU_ZERO_S(size, mask2);
    for (i = 0; i < size; i++)
    CPU_SET_S(i, size, mask2);
    CPU_XOR_S(size, mask2, mask2, mask); // invert

    if (!local)
    mask = mask2;

    err = sched_setaffinity(0, size, mask);
    if (err)
    perror("sched_setaffinity");

    mem = mmap(0, SIZE, PROT_READ|PROT_WRITE,
    MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
    err = mbind(mem, SIZE, MPOL_BIND, &nodemask, 8*sizeof(nodemask), MPOL_MF_MOVE);
    if (err)
    perror("mbind");

    signal(SIGALRM, sig_done);
    alarm(5);

    if (!read) {
    while (!done) {
    for (i = 0; i < SIZE; i++)
    mem[i] = 0x01;
    }
    } else {
    while (!done) {
    for (i = 0; i < SIZE; i++)
    t += *(volatile char *)(mem + i);
    }
    }

    return 0;
    }

    Signed-off-by: Peter Zijlstra
    Cc: Stephane Eranian
    Cc:
    Link: http://lkml.kernel.org/n/tip-tq73sxus35xmqpojf7ootxgs@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • Parentheses were missing.

    Signed-off-by: Roel Kluin
    Signed-off-by: Chris Metcalf

    roel
     
  • This was inspired by mchehab@redhat.com's observation that we
    didn't have EDAC configured on by default in both files. In addition,
    we were setting INITRAMFS_SOURCE to a non-empty string, which isn't
    a very common default and required editing to do test builds.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • This was Kay Siever's bombing to convert 'cpu' to a regular subsystem.
    The change left a bogus second argument to sysfs_create_file().

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

10 Mar, 2012

1 commit

  • Commit f0fbf0abc093 ("x86: integrate delay functions") converted
    delay_tsc() into a random delay generator for 64 bit. The reason is
    that it merged the mostly identical versions of delay_32.c and
    delay_64.c. Though the subtle difference of the result was:

    static void delay_tsc(unsigned long loops)
    {
    - unsigned bclock, now;
    + unsigned long bclock, now;

    Now the function uses rdtscl() which returns the lower 32bit of the
    TSC. On 32bit that's not problematic as unsigned long is 32bit. On 64
    bit this fails when the lower 32bit are close to wrap around when
    bclock is read, because the following check

    if ((now - bclock) >= loops)
    break;

    evaluated to true on 64bit for e.g. bclock = 0xffffffff and now = 0
    because the unsigned long (now - bclock) of these values results in
    0xffffffff00000001 which is definitely larger than the loops
    value. That explains Tvortkos observation:

    "Because I am seeing udelay(500) (_occasionally_) being short, and
    that by delaying for some duration between 0us (yep) and 491us."

    Make those variables explicitely u32 again, so this works for both 32
    and 64 bit.

    Reported-by: Tvrtko Ursulin
    Signed-off-by: Thomas Gleixner
    Cc: stable@vger.kernel.org # >= 2.6.27
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     

09 Mar, 2012

6 commits

  • Pull C6X fix from Mark Salter:
    "Fix for C6X KSTK_EIP and KSTK_ESP macros."

    * tag 'for-linus' of git://linux-c6x.org/git/projects/linux-c6x-upstreaming:
    C6X: fix KSTK_EIP and KSTK_ESP macros

    Linus Torvalds
     
  • Pull two IOMMU fixes from Joerg Roedel:
    "The first is an additional fix for the OMAP initialization order issue
    and the second patch fixes a possible section mismatch which can lead
    to a kernel crash in the AMD IOMMU driver when suspend/resume is used
    and the compiler has not inlined the iommu_set_device_table function."

    * tag 'iommu-fixes-v3.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
    x86/amd: iommu_set_device_table() must not be __init
    ARM: OMAP: fix iommu, not mailbox

    Linus Torvalds
     
  • Pull last minute fixes from Olof Johansson:
    "One samsung build fix due to a mis-applied patch, and a small set of
    OMAP fixes. This should be the last from arm-soc for 3.3, hopefully."

    * tag 'fixes-urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
    ARM: S3C2440: Fixed build error for s3c244x
    ARM: OMAP2+: Fix module build errors with CONFIG_OMAP4_ERRATA_I688
    ARM: OMAP: id: Add missing break statement in omap3xxx_check_revision
    ARM: OMAP2+: Remove apply_uV constraints for fixed regulator
    ARM: OMAP: irqs: Fix NR_IRQS value to handle PRCM interrupts

    Linus Torvalds
     
  • Pull minor devicetree bug fixes and documentation updates from Grant Likely:
    "Fixes up a duplicate #include, adds an empty implementation of
    of_find_compatible_node() and make git ignore .dtb files. And fix up
    bus name on OF described PHYs. Nothing exciting here."

    * tag 'devicetree-for-linus' of git://git.secretlab.ca/git/linux-2.6:
    doc: dt: Fix broken reference in gpio-leds documentation
    of/mdio: fix fixed link bus name
    of/fdt.c: asm/setup.h included twice
    of: add picochip vendor prefix
    dt: add empty of_find_compatible_node function
    ARM: devicetree: Add .dtb files to arch/arm/boot/.gitignore

    Linus Torvalds
     
  • * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
    ARM: OMAP2+: Fix module build errors with CONFIG_OMAP4_ERRATA_I688
    ARM: OMAP: id: Add missing break statement in omap3xxx_check_revision
    ARM: OMAP2+: Remove apply_uV constraints for fixed regulator
    ARM: OMAP: irqs: Fix NR_IRQS value to handle PRCM interrupts

    Olof Johansson
     
  • Fixed following:
    arch/arm/mach-s3c2440/s3c244x.c: In function 's3c244x_restart':
    arch/arm/mach-s3c2440/s3c244x.c:209: error: expected declaration or statement at end of input
    make[1]: *** [arch/arm/mach-s3c24xx/s3c244x.o] Error 1
    make: *** [arch/arm/mach-s3c24xx] Error 2

    Signed-off-by: Kukjin Kim
    Signed-off-by: Olof Johansson

    Kukjin Kim
     

08 Mar, 2012

2 commits

  • Pull ARM updates from Russell King.

    * 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
    ARM: 7358/1: perf: add PMU hotplug notifier
    ARM: 7357/1: perf: fix overflow handling for xscale2 PMUs
    ARM: 7356/1: perf: check that we have an event in the PMU IRQ handlers
    ARM: 7355/1: perf: clear overflow flag when disabling counter on ARMv7 PMU
    ARM: 7354/1: perf: limit sample_period to half max_period in non-sampling mode
    ARM: ecard: ensure fake vma vm_flags is setup
    ARM: 7346/1: errata: fix PL310 erratum #753970 workaround selection
    ARM: 7345/1: errata: update workaround for A9 erratum #743622
    ARM: 7348/1: arm/spear600: fix one-shot timer
    ARM: 7339/1: amba/serial.h: Include types.h for resolving dependency of type bool

    Linus Torvalds
     
  • There was a latent typo in the C6X KSTK_EIP and KSTK_ESP macros which
    caused a problem with a new patch which used them. The broken definitions
    were of the form:

    #define KSTK_FOO(tsk) (task_pt_regs(task)->foo)

    Note the use of task vs tsk. This actually worked before because the
    only place in the kernel which used these macros passed in a local
    pointer named task.

    Signed-off-by: Mark Salter

    Mark Salter
     

07 Mar, 2012

11 commits