18 Jul, 2014

33 commits

  • commit 15ebb05248d025534773c9ef64915bd888f04e4b upstream.

    The control register is at offset 0x10, not 0x0. This is wreckaged
    since commit 5df33a62c (SPEAr: Switch to common clock framework).

    Signed-off-by: Thomas Gleixner
    Acked-by: Viresh Kumar
    Signed-off-by: Mike Turquette
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • commit e73b49f1c4e75c44d62585cc3e5b9c7894b61c32 upstream.

    Prevent resources from being freed twice in case device_add() call
    fails within phy_create(). Also use ida_simple_remove() instead of
    ida_remove() as we had used ida_simple_get() to allocate the ida.

    Signed-off-by: Roger Quadros
    Signed-off-by: Kishon Vijay Abraham I
    Signed-off-by: Greg Kroah-Hartman

    Roger Quadros
     
  • commit fa2ec3ea10bd377f9d55772b1dab65178425a1a2 upstream.

    include/linux/sched.h implements TASK_SIZE_OF as TASK_SIZE if it
    is not set by the architecture headers. TASK_SIZE uses the
    current task to determine the size of the virtual address space.
    On a 64-bit kernel this will cause reading /proc/pid/pagemap of a
    64-bit process from a 32-bit process to return EOF when it reads
    past 0xffffffff.

    Implement TASK_SIZE_OF exactly the same as TASK_SIZE with
    test_tsk_thread_flag instead of test_thread_flag.

    Signed-off-by: Colin Cross
    Acked-by: Will Deacon
    Signed-off-by: Catalin Marinas
    Signed-off-by: Greg Kroah-Hartman

    Colin Cross
     
  • commit 0378c9a855bfa395f595fbfb049707093e270f69 upstream.

    This patch fixes a memory leak that appears when caam_jr module is unloaded.

    Signed-off-by: Cristian Stoica
    Signed-off-by: Herbert Xu
    Signed-off-by: Greg Kroah-Hartman

    Cristian Stoica
     
  • commit cfe82d4f45c7cc39332a2be7c4c1d3bf279bbd3d upstream.

    Byte-to-bit-count computation is only partly converted to big-endian and is
    mixing in CPU-endian values. Problem was noticed by sparce with warning:

    CHECK arch/x86/crypto/sha512_ssse3_glue.c
    arch/x86/crypto/sha512_ssse3_glue.c:144:19: warning: restricted __be64 degrades to integer
    arch/x86/crypto/sha512_ssse3_glue.c:144:17: warning: incorrect type in assignment (different base types)
    arch/x86/crypto/sha512_ssse3_glue.c:144:17: expected restricted __be64
    arch/x86/crypto/sha512_ssse3_glue.c:144:17: got unsigned long long

    Signed-off-by: Jussi Kivilinna
    Acked-by: Tim Chen
    Signed-off-by: Herbert Xu
    Signed-off-by: Greg Kroah-Hartman

    Jussi Kivilinna
     
  • commit 5a90af67c2126fe1d04ebccc1f8177e6ca70d3a9 upstream.

    Since commtit 8a7b1227e303 (cpufreq: davinci: move cpufreq driver to
    drivers/cpufreq) this added dependancy only for CONFIG_ARCH_DAVINCI_DA850
    where as davinci_cpufreq_init() call is used by all davinci platform.

    This patch fixes following build error:

    arch/arm/mach-davinci/built-in.o: In function `davinci_init_late':
    :(.init.text+0x928): undefined reference to `davinci_cpufreq_init'
    make: *** [vmlinux] Error 1

    Fixes: 8a7b1227e303 (cpufreq: davinci: move cpufreq driver to drivers/cpufreq)
    Signed-off-by: Lad, Prabhakar
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Prabhakar Lad
     
  • commit b50a6c584bb47b370f84bfd746770c0bbe7129b7 upstream.

    On POWER8 when switching to a KVM guest we set bits in MMCR2 to freeze
    the PMU counters. Aside from on boot they are then never reset,
    resulting in stuck perf counters for any user in the guest or host.

    We now set MMCR2 to 0 whenever enabling the PMU, which provides a sane
    state for perf to use the PMU counters under either the guest or the
    host.

    This was manifesting as a bug with ppc64_cpu --frequency:

    $ sudo ppc64_cpu --frequency
    WARNING: couldn't run on cpu 0
    WARNING: couldn't run on cpu 8
    ...
    WARNING: couldn't run on cpu 144
    WARNING: couldn't run on cpu 152
    min: 18446744073.710 GHz (cpu -1)
    max: 0.000 GHz (cpu -1)
    avg: 0.000 GHz

    The command uses a perf counter to measure CPU cycles over a fixed
    amount of time, in order to approximate the frequency of the machine.
    The counters were returning zero once a guest was started, regardless of
    weather it was still running or had been shut down.

    By dumping the value of MMCR2, it was observed that once a guest is
    running MMCR2 is set to 1s - which stops counters from running:

    $ sudo sh -c 'echo p > /proc/sysrq-trigger'
    CPU: 0 PMU registers, ppmu = POWER8 n_counters = 6
    PMC1: 5b635e38 PMC2: 00000000 PMC3: 00000000 PMC4: 00000000
    PMC5: 1bf5a646 PMC6: 5793d378 PMC7: deadbeef PMC8: deadbeef
    MMCR0: 0000000080000000 MMCR1: 000000001e000000 MMCRA: 0000040000000000
    MMCR2: fffffffffffffc00 EBBHR: 0000000000000000
    EBBRR: 0000000000000000 BESCR: 0000000000000000
    SIAR: 00000000000a51cc SDAR: c00000000fc40000 SIER: 0000000001000000

    This is done unconditionally in book3s_hv_interrupts.S upon entering the
    guest, and the original value is only save/restored if the host has
    indicated it was using the PMU. This is okay, however the user of the
    PMU needs to ensure that it is in a defined state when it starts using
    it.

    Fixes: e05b9b9e5c10 ("powerpc/perf: Power8 PMU support")
    Signed-off-by: Joel Stanley
    Acked-by: Michael Ellerman
    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Greg Kroah-Hartman

    Joel Stanley
     
  • commit 4d9690dd56b0d18f2af8a9d4a279cb205aae3345 upstream.

    Instead of separate bits for every POWER8 PMU feature, have a single one
    for v2.07 of the architecture.

    This saves us adding a MMCR2 define for a future patch.

    Signed-off-by: Joel Stanley
    Acked-by: Michael Ellerman
    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Greg Kroah-Hartman

    Joel Stanley
     
  • commit f56029410a13cae3652d1f34788045c40a13ffc7 upstream.

    We are seeing a lot of PMU warnings on POWER8:

    Can't find PMC that caused IRQ

    Looking closer, the active PMC is 0 at this point and we took a PMU
    exception on the transition from negative to 0. Some versions of POWER8
    have an issue where they edge detect and not level detect PMC overflows.

    A number of places program the PMC with (0x80000000 - period_left),
    where period_left can be negative. We can either fix all of these or
    just ensure that period_left is always >= 1.

    This patch takes the second option.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Greg Kroah-Hartman

    Anton Blanchard
     
  • commit c0d653412fc8450370167a3268b78fc772ff9c87 upstream.

    There is a race condition in ec_transaction_completed().

    When ec_transaction_completed() is called in the GPE handler, it could
    return true because of (ec->curr == NULL). Then the wake_up() invocation
    could complete the next command unexpectedly since there is no lock between
    the 2 invocations. With the previous cleanup, the IBF=0 waiter race need
    not be handled any more. It's now safe to return a flag from
    advance_condition() to indicate the requirement of wakeup, the flag is
    returned from a locked context.

    The ec_transaction_completed() is now only invoked by the ec_poll() where
    the ec->curr is ensured to be different from NULL.

    After cleaning up, the EVT_SCI=1 check should be moved out of the wakeup
    condition so that an EVT_SCI raised with (ec->curr == NULL) can trigger a
    QR_SC command.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=70891
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=63931
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=59911
    Reported-and-tested-by: Gareth Williams
    Reported-and-tested-by: Hans de Goede
    Reported-by: Barton Xu
    Tested-by: Steffen Weber
    Tested-by: Arthur Chen
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Lv Zheng
     
  • commit 9b80f0f73ae1583c22325ede341c74195847618c upstream.

    After we've added the first command byte write into advance_transaction(),
    the IBF=0 waiter is duplicated with the command completion waiter
    implemented in the ec_poll() because:
    If IBF=1 blocked the first command byte write invoked in the task
    context ec_poll(), it would be kicked off upon IBF=0 interrupt or timed
    out and retried again in the task context.

    Remove this seperate and duplicate IBF=0 waiter. By doing so we can
    reduce the overall number of times to access the EC_SC(R) status
    register.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=70891
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=63931
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=59911
    Reported-and-tested-by: Gareth Williams
    Reported-and-tested-by: Hans de Goede
    Reported-by: Barton Xu
    Tested-by: Steffen Weber
    Tested-by: Arthur Chen
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Lv Zheng
     
  • commit f92fca0060fc4dc9227342d0072d75df98c1e5a5 upstream.

    Move the first command byte write into advance_transaction() so that all
    EC register accesses that can affect the command processing state machine
    can happen in this asynchronous state machine advancement function.

    The advance_transaction() function then can be a complete implementation
    of an asyncrhonous transaction for a single command so that:
    1. The first command byte can be written in the interrupt context;
    2. The command completion waiter can also be used to wait the first command
    byte's timeout;
    3. In BURST mode, the follow-up command bytes can be written in the
    interrupt context directly, so that it doesn't need to return to the
    task context. Returning to the task context reduces the throughput of
    the BURST mode and in the worst cases where the system workload is very
    high, this leads to the hardware driven automatic BURST mode exit.

    In order not to increase memory consumption, convert 'done' into 'flags'
    to contain multiple indications:
    1. ACPI_EC_COMMAND_COMPLETE: converting from original 'done' condition,
    indicating the completion of the command transaction.
    2. ACPI_EC_COMMAND_POLL: indicating the availability of writing the first
    command byte. A new command can utilize this flag to compete for the
    right of accessing the underlying hardware. There is a follow-up bug
    fix that has utilized this new flag.

    The 2 flags are important because it also reflects a key concept of IO
    programs' design used in the system softwares. Normally an IO program
    running in the kernel should first be implemented in the asynchronous way.
    And the 2 flags are the most common way to implement its synchronous
    operations on top of the asynchronous operations:
    1. POLL: This flag can be used to block until the asynchronous operations
    can happen.
    2. COMPLETE: This flag can be used to block until the asynchronous
    operations have completed.
    By constructing code cleanly in this way, many difficult problems can be
    solved smoothly.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=70891
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=63931
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=59911
    Reported-and-tested-by: Gareth Williams
    Reported-and-tested-by: Hans de Goede
    Reported-by: Barton Xu
    Tested-by: Steffen Weber
    Tested-by: Arthur Chen
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Lv Zheng
     
  • commit 66b42b78bc1e816f92b662e8888c89195e4199e1 upstream.

    The advance_transaction() will be invoked from the IRQ context GPE handler
    and the task context ec_poll(). The handling of this function is locked so
    that the EC state machine are ensured to be advanced sequentially.

    But there is a problem. Before invoking advance_transaction(), EC_SC(R) is
    read. Then for advance_transaction(), there could be race condition around
    the lock from both contexts. The first one reading the register could fail
    this race and when it passes the stale register value to the state machine
    advancement code, the hardware condition is totally different from when
    the register is read. And the hardware accesses determined from the wrong
    hardware status can break the EC state machine. And there could be cases
    that the functionalities of the platform firmware are seriously affected.
    For example:
    1. When 2 EC_DATA(W) writes compete the IBF=0, the 2nd EC_DATA(W) write may
    be invalid due to IBF=1 after the 1st EC_DATA(W) write. Then the
    hardware will either refuse to respond a next EC_SC(W) write of the next
    command or discard the current WR_EC command when it receives a EC_SC(W)
    write of the next command.
    2. When 1 EC_SC(W) write and 1 EC_DATA(W) write compete the IBF=0, the
    EC_DATA(W) write may be invalid due to IBF=1 after the EC_SC(W) write.
    The next EC_DATA(R) could never be responded by the hardware. This is
    the root cause of the reported issue.

    Fix this issue by moving the EC_SC(R) access into the lock so that we can
    ensure that the state machine is advanced consistently.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=70891
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=63931
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=59911
    Reported-and-tested-by: Gareth Williams
    Reported-and-tested-by: Hans de Goede
    Reported-by: Barton Xu
    Tested-by: Steffen Weber
    Tested-by: Arthur Chen
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Lv Zheng
     
  • commit 867f9d463b82462793ea4610e748be0b04b37fc7 upstream.

    The recently merged change (in v3.14-rc6) to ACPI resource detection
    (below) causes all zero length ACPI resources to be elided from the
    table:

    commit b355cee88e3b1a193f0e9a81db810f6f83ad728b
    Author: Zhang Rui
    Date: Thu Feb 27 11:37:15 2014 +0800

    ACPI / resources: ignore invalid ACPI device resources

    This change has caused a regression in (at least) serial port detection
    for a number of machines (see LP#1313981 [1]). These seem to represent
    their IO regions (presumably incorrectly) as a zero length region.
    Reverting the above commit restores these serial devices.

    Only elide zero length resources which lie at address 0.

    Fixes: b355cee88e3b (ACPI / resources: ignore invalid ACPI device resources)
    Signed-off-by: Andy Whitcroft
    Acked-by: Zhang Rui
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Andy Whitcroft
     
  • commit e63f6e28dda6de3de2392ddca321e211fd860925 upstream.

    Revert commit ab0fd674d6ce (ACPI / AC: Remove AC's proc directory.),
    because some old tools (e.g. kpowersave from kde 3.5.10) are still
    using /proc/acpi/ac_adapter.

    Fixes: ab0fd674d6ce (ACPI / AC: Remove AC's proc directory.)
    Reported-and-tested-by: Sorin Manolache
    Signed-off-by: Lan Tianyu
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Lan Tianyu
     
  • commit c024044d4da2c9c3b32933b4235df1e409293b84 upstream.

    The module test script for the adm1021 driver exposes a cache problem
    when writing temperature limits. temp_min and temp_max are expected
    to be stored in milli-degrees C but are stored in degrees C.

    Reported-by: Guenter Roeck
    Signed-off-by: Axel Lin
    Signed-off-by: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Axel Lin
     
  • commit 1035a9e3e9c76b64a860a774f5b867d28d34acc2 upstream.

    Writing to fanX_div does not clear the cache. As a result, reading
    from fanX_div may return the old value for up to two seconds
    after writing a new value.

    This patch ensures the fan_div cache is updated in set_fan_div().

    Reported-by: Guenter Roeck
    Signed-off-by: Axel Lin
    Signed-off-by: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Axel Lin
     
  • commit 145e74a4e5022225adb84f4e5d4fff7938475c35 upstream.

    Upper limit for write operations to temperature limit registers
    was clamped to a fractional value. However, limit registers do
    not support fractional values. As a result, upper limits of 127.5
    degrees C or higher resulted in a rounded limit of 128 degrees C.
    Since limit registers are signed, this was stored as -128 degrees C.
    Clamp limits to (-55, +127) degrees C to solve the problem.

    Value on writes to auto_temp[12]_min and auto_temp[12]_max were not
    clamped at all, but masked. As a result, out-of-range writes resulted
    in a more or less arbitrary limit. Clamp those attributes to (0, 127)
    degrees C for more predictable results.

    Cc: Axel Lin
    Reviewed-by: Jean Delvare
    Signed-off-by: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Guenter Roeck
     
  • commit f6c2dd20108c35e30e2c1f3c6142d189451a626b upstream.

    It is customary to clamp limits instead of bailing out with an error
    if a configured limit is out of the range supported by the driver.
    This simplifies limit configuration, since the user will not typically
    know chip and/or driver specific limits.

    Reviewed-by: Jean Delvare
    Signed-off-by: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Guenter Roeck
     
  • commit df86754b746e9a0ff6f863f690b1c01d408e3cdc upstream.

    temp2_input should not be writable, fix it.

    Reported-by: Guenter Roeck
    Signed-off-by: Axel Lin
    Signed-off-by: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Axel Lin
     
  • commit e8db5d6736a712a3e2280c0e31f4b301d85172d8 upstream.

    On 05/21/2014 04:22 PM, Aaron Lu wrote:
    > On 05/21/2014 01:57 PM, Kui Zhang wrote:
    >> Hello,
    >>
    >> I get following error when rmmod thermal.
    >>
    >> rmmod thermal
    >> Killed

    While dealing with this problem, I found another problem that also
    results in a kernel crash on thermal module removal:

    From: Aaron Lu
    Date: Wed, 21 May 2014 16:05:38 +0800
    Subject: thermal: hwmon: Make the check for critical temp valid consistent

    We used the tz->ops->get_crit_temp && !tz->ops->get_crit_temp(tz, temp)
    to decide if we need to create the temp_crit attribute file but we just
    check if tz->ops->get_crit_temp exists to decide if we need to remove
    that attribute file. Some ACPI thermal zone doesn't have a valid critical
    trip point and that would result in removing a non-existent device file
    on thermal module unload.

    Signed-off-by: Aaron Lu
    Signed-off-by: Zhang Rui
    Signed-off-by: Greg Kroah-Hartman

    Aaron Lu
     
  • commit 6d827fbcc370ca259a2905309f64161ab7b10596 upstream.

    Commit f36fdb9f0266 (i8k: Force SMM to run on CPU 0) adds support
    for multi-core CPUs to the driver. Unfortunately, that causes it
    to fail loading if compiled without SMP support, at least on
    32 bit kernels. Kernel log shows "i8k: unable to get SMM Dell
    signature", and function i8k_smm is found to return -EINVAL.

    Testing revealed that the culprit is the missing return value check
    of set_cpus_allowed_ptr.

    Fixes: f36fdb9f0266 (i8k: Force SMM to run on CPU 0)
    Reported-by: Jim Bos
    Tested-by: Jim Bos
    Signed-off-by: Guenter Roeck
    Cc: Andreas Mohr
    Signed-off-by: Greg Kroah-Hartman

    Guenter Roeck
     
  • commit 5a6024f1604eef119cf3a6fa413fe0261a81a8f3 upstream.

    When hot-adding and onlining CPU, kernel panic occurs, showing following
    call trace.

    BUG: unable to handle kernel paging request at 0000000000001d08
    IP: [] __alloc_pages_nodemask+0x9d/0xb10
    PGD 0
    Oops: 0000 [#1] SMP
    ...
    Call Trace:
    [] ? cpumask_next_and+0x35/0x50
    [] ? find_busiest_group+0x113/0x8f0
    [] ? deactivate_slab+0x349/0x3c0
    [] new_slab+0x91/0x300
    [] __slab_alloc+0x2bb/0x482
    [] ? copy_process.part.25+0xfc/0x14c0
    [] ? load_balance+0x218/0x890
    [] ? sched_clock+0x9/0x10
    [] ? trace_clock_local+0x9/0x10
    [] kmem_cache_alloc_node+0x8c/0x200
    [] copy_process.part.25+0xfc/0x14c0
    [] ? trace_buffer_unlock_commit+0x4d/0x60
    [] ? kthread_create_on_node+0x140/0x140
    [] do_fork+0xbc/0x360
    [] kernel_thread+0x26/0x30
    [] kthreadd+0x2c2/0x300
    [] ? kthread_create_on_cpu+0x60/0x60
    [] ret_from_fork+0x7c/0xb0
    [] ? kthread_create_on_cpu+0x60/0x60

    In my investigation, I found the root cause is wq_numa_possible_cpumask.
    All entries of wq_numa_possible_cpumask is allocated by
    alloc_cpumask_var_node(). And these entries are used without initializing.
    So these entries have wrong value.

    When hot-adding and onlining CPU, wq_update_unbound_numa() is called.
    wq_update_unbound_numa() calls alloc_unbound_pwq(). And alloc_unbound_pwq()
    calls get_unbound_pool(). In get_unbound_pool(), worker_pool->node is set
    as follow:

    3592 /* if cpumask is contained inside a NUMA node, we belong to that node */
    3593 if (wq_numa_enabled) {
    3594 for_each_node(node) {
    3595 if (cpumask_subset(pool->attrs->cpumask,
    3596 wq_numa_possible_cpumask[node])) {
    3597 pool->node = node;
    3598 break;
    3599 }
    3600 }
    3601 }

    But wq_numa_possible_cpumask[node] does not have correct cpumask. So, wrong
    node is selected. As a result, kernel panic occurs.

    By this patch, all entries of wq_numa_possible_cpumask are allocated by
    zalloc_cpumask_var_node to initialize them. And the panic disappeared.

    Signed-off-by: Yasuaki Ishimatsu
    Reviewed-by: Lai Jiangshan
    Signed-off-by: Tejun Heo
    Fixes: bce903809ab3 ("workqueue: add wq_numa_tbl_len and wq_numa_possible_cpumask[]")
    Signed-off-by: Greg Kroah-Hartman

    Yasuaki Ishimatsu
     
  • commit 391acf970d21219a2a5446282d3b20eace0c0d7a upstream.

    When runing with the kernel(3.15-rc7+), the follow bug occurs:
    [ 9969.258987] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:586
    [ 9969.359906] in_atomic(): 1, irqs_disabled(): 0, pid: 160655, name: python
    [ 9969.441175] INFO: lockdep is turned off.
    [ 9969.488184] CPU: 26 PID: 160655 Comm: python Tainted: G A 3.15.0-rc7+ #85
    [ 9969.581032] Hardware name: FUJITSU-SV PRIMEQUEST 1800E/SB, BIOS PRIMEQUEST 1000 Series BIOS Version 1.39 11/16/2012
    [ 9969.706052] ffffffff81a20e60 ffff8803e941fbd0 ffffffff8162f523 ffff8803e941fd18
    [ 9969.795323] ffff8803e941fbe0 ffffffff8109995a ffff8803e941fc58 ffffffff81633e6c
    [ 9969.884710] ffffffff811ba5dc ffff880405c6b480 ffff88041fdd90a0 0000000000002000
    [ 9969.974071] Call Trace:
    [ 9970.003403] [] dump_stack+0x4d/0x66
    [ 9970.065074] [] __might_sleep+0xfa/0x130
    [ 9970.130743] [] mutex_lock_nested+0x3c/0x4f0
    [ 9970.200638] [] ? kmem_cache_alloc+0x1bc/0x210
    [ 9970.272610] [] cpuset_mems_allowed+0x27/0x140
    [ 9970.344584] [] ? __mpol_dup+0x63/0x150
    [ 9970.409282] [] __mpol_dup+0xe5/0x150
    [ 9970.471897] [] ? __mpol_dup+0x63/0x150
    [ 9970.536585] [] ? copy_process.part.23+0x606/0x1d40
    [ 9970.613763] [] ? trace_hardirqs_on+0xd/0x10
    [ 9970.683660] [] ? monotonic_to_bootbased+0x2f/0x50
    [ 9970.759795] [] copy_process.part.23+0x670/0x1d40
    [ 9970.834885] [] do_fork+0xd8/0x380
    [ 9970.894375] [] ? __audit_syscall_entry+0x9c/0xf0
    [ 9970.969470] [] SyS_clone+0x16/0x20
    [ 9971.030011] [] stub_clone+0x69/0x90
    [ 9971.091573] [] ? system_call_fastpath+0x16/0x1b

    The cause is that cpuset_mems_allowed() try to take
    mutex_lock(&callback_mutex) under the rcu_read_lock(which was hold in
    __mpol_dup()). And in cpuset_mems_allowed(), the access to cpuset is
    under rcu_read_lock, so in __mpol_dup, we can reduce the rcu_read_lock
    protection region to protect the access to cpuset only in
    current_cpuset_is_being_rebound(). So that we can avoid this bug.

    This patch is a temporary solution that just addresses the bug
    mentioned above, can not fix the long-standing issue about cpuset.mems
    rebinding on fork():

    "When the forker's task_struct is duplicated (which includes
    ->mems_allowed) and it races with an update to cpuset_being_rebound
    in update_tasks_nodemask() then the task's mems_allowed doesn't get
    updated. And the child task's mems_allowed can be wrong if the
    cpuset's nodemask changes before the child has been added to the
    cgroup's tasklist."

    Signed-off-by: Gu Zheng
    Acked-by: Li Zefan
    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Gu Zheng
     
  • commit bddbceb688c6d0decaabc7884fede319d02f96c8 upstream.

    Uevents are suppressed during attributes registration, but never
    restored, so kobject_uevent() does nothing.

    Signed-off-by: Maxime Bizon
    Signed-off-by: Tejun Heo
    Fixes: 226223ab3c4118ddd10688cc2c131135848371ab
    Signed-off-by: Greg Kroah-Hartman

    Maxime Bizon
     
  • commit 042d27acb64924a0e8a43e972485913a32407beb upstream.

    This patch affects only architectures where the stack grows upwards
    (currently parisc and metag only). On those do not hardcode the maximum
    initial stack size to 1GB for 32-bit processes, but make it configurable
    via a config option.

    The main problem with the hardcoded stack size is, that we have two
    memory regions which grow upwards: stack and heap. To keep most of the
    memory available for heap in a flexmap memory layout, it makes no sense
    to hard allocate up to 1GB of the memory for stack which can't be used
    as heap then.

    This patch makes the stack size for 32-bit processes configurable and
    uses 80MB as default value which has been in use during the last few
    years on parisc and which hasn't showed any problems yet.

    Signed-off-by: Helge Deller
    Signed-off-by: James Hogan
    Cc: "James E.J. Bottomley"
    Cc: linux-parisc@vger.kernel.org
    Cc: linux-metag@vger.kernel.org
    Cc: John David Anglin
    Signed-off-by: Greg Kroah-Hartman

    Helge Deller
     
  • commit ab8a261ba5e2dd9206da640de5870cc31d568a7c upstream.

    On parisc we can not use the existing compat implementation for fanotify_mark()
    because for the 64bit mask parameter the higher and lower 32bits are ordered
    differently than what the compat function expects from big endian
    architectures.

    Specifically:
    It finally turned out, that on hppa we end up with different assignments
    of parameters to kernel arguments depending on if we call the glibc
    wrapper function
    int fanotify_mark (int __fanotify_fd, unsigned int __flags,
    uint64_t __mask, int __dfd, const char *__pathname);
    or directly calling the syscall manually
    syscall(__NR_fanotify_mark, ...)

    Reason is, that the syscall() function is implemented as C-function and
    because we now have the sysno as first parameter in front of the other
    parameters the compiler will unexpectedly add an empty paramenter in
    front of the u64 value to ensure the correct calling alignment for 64bit
    values.
    This means, on hppa you can't simply use syscall() to call the kernel
    fanotify_mark() function directly, but you have to use the glibc
    function instead.

    This patch fixes the kernel in the hppa-arch specifc coding to adjust
    the parameters in a way as if userspace calls the glibc wrapper function
    fanotify_mark().

    Signed-off-by: Helge Deller
    Signed-off-by: Greg Kroah-Hartman

    Helge Deller
     
  • commit eadcc7208a2237016be7bdff4551ba7614da85c8 upstream.

    Signed-off-by: Helge Deller
    Signed-off-by: Greg Kroah-Hartman

    Helge Deller
     
  • commit baa3c65298c089a9014b4e523a14ec2885cca1bc upstream.

    Since AI lines could be selected at will (linux-3.11) the sending
    and receiving ends of the FIFO does not agree about what step is used
    for a line. It only works if the last lines are used, like 5,6,7,
    and fails if ie 2,4,6 is selected in DT.

    Signed-off-by: Jan Kardell
    Tested-by: Zubair Lutfullah
    Signed-off-by: Jonathan Cameron
    Signed-off-by: Greg Kroah-Hartman

    Jan Kardell
     
  • commit d8279a40e50ad55539780aa617a32a53d7f0953e upstream.

    This adds support for Infineon TriBoard TC1798 [1]. Only interface 1
    is used as serial line (see [2], Figure 8-6).

    [1] http://www.infineon.com/cms/de/product/microcontroller/development-tools-software-and-kits/tricore-tm-development-tools-software-and-kits/starterkits-and-evaluation-boards/starter-kit-tc1798/channel.html?channel=db3a304333b8a7ca0133cfa3d73e4268
    [2] http://www.infineon.com/dgdl/TriBoardManual-TC1798-V10.pdf?folderId=db3a304412b407950112b409ae7c0343&fileId=db3a304333b8a7ca0133cfae99fe426a

    Signed-off-by: Michal Sojka
    Cc: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Michal Sojka
     
  • commit 5a7fbe7e9ea0b1b9d7ffdba64db1faa3a259164c upstream.

    This patch adds PID 0x0003 to the VID 0x128d (Testo). At least the
    Testo 435-4 uses this, likely other gear as well.

    Signed-off-by: Bert Vermeulen
    Cc: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Bert Vermeulen
     
  • commit b9326057a3d8447f5d2e74a7b521ccf21add2ec0 upstream.

    Corsair USB Dongles are shipped with Corsair AXi series PSUs.
    These are cp210x serial usb devices, so make driver detect these.
    I have a program, that can get information from these PSUs.

    Tested with 2 different dongles shipped with Corsair AX860i and
    AX1200i units.

    Signed-off-by: Andras Kovacs
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Andras Kovacs
     
  • commit 3d28bd840b2d3981cd28caf5fe1df38f1344dd60 upstream.

    Add ID of the Telewell 4G v2 hardware to option driver to get legacy
    serial interface working

    Signed-off-by: Bernd Wachter
    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Bernd Wachter
     

10 Jul, 2014

7 commits

  • Greg Kroah-Hartman
     
  • commit d05f0cdcbe6388723f1900c549b4850360545201 upstream.

    In v2.6.34 commit 9d8cebd4bcd7 ("mm: fix mbind vma merge problem")
    introduced vma merging to mbind(), but it should have also changed the
    convention of passing start vma from queue_pages_range() (formerly
    check_range()) to new_vma_page(): vma merging may have already freed
    that structure, resulting in BUG at mm/mempolicy.c:1738 and probably
    worse crashes.

    Fixes: 9d8cebd4bcd7 ("mm: fix mbind vma merge problem")
    Reported-by: Naoya Horiguchi
    Tested-by: Naoya Horiguchi
    Signed-off-by: Hugh Dickins
    Acked-by: Christoph Lameter
    Cc: KOSAKI Motohiro
    Cc: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Hugh Dickins
     
  • commit fd1232b214af43a973443aec6a2808f16ee5bf70 upstream.

    This patch fixes I/O errors with the sym53c8xx_2 driver when the disk
    returns QUEUE FULL status.

    When the controller encounters an error (including QUEUE FULL or BUSY
    status), it aborts all not yet submitted requests in the function
    sym_dequeue_from_squeue.

    This function aborts them with DID_SOFT_ERROR.

    If the disk has full tag queue, the request that caused the overflow is
    aborted with QUEUE FULL status (and the scsi midlayer properly retries
    it until it is accepted by the disk), but the sym53c8xx_2 driver aborts
    the following requests with DID_SOFT_ERROR --- for them, the midlayer
    does just a few retries and then signals the error up to sd.

    The result is that disk returning QUEUE FULL causes request failures.

    The error was reproduced on 53c895 with COMPAQ BD03685A24 disk
    (rebranded ST336607LC) with command queue 48 or 64 tags. The disk has
    64 tags, but under some access patterns it return QUEUE FULL when there
    are less than 64 pending tags. The SCSI specification allows returning
    QUEUE FULL anytime and it is up to the host to retry.

    Signed-off-by: Mikulas Patocka
    Cc: Matthew Wilcox
    Cc: James Bottomley
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 03787301420376ae41fbaf4267f4a6253d152ac5 upstream.

    Commit b1cb0982bdd6 ("change the management method of free objects of
    the slab") introduced a bug on slab leak detector
    ('/proc/slab_allocators'). This detector works like as following
    decription.

    1. traverse all objects on all the slabs.
    2. determine whether it is active or not.
    3. if active, print who allocate this object.

    but that commit changed the way how to manage free objects, so the logic
    determining whether it is active or not is also changed. In before, we
    regard object in cpu caches as inactive one, but, with this commit, we
    mistakenly regard object in cpu caches as active one.

    This intoduces kernel oops if DEBUG_PAGEALLOC is enabled. If
    DEBUG_PAGEALLOC is enabled, kernel_map_pages() is used to detect who
    corrupt free memory in the slab. It unmaps page table mapping if object
    is free and map it if object is active. When slab leak detector check
    object in cpu caches, it mistakenly think this object active so try to
    access object memory to retrieve caller of allocation. At this point,
    page table mapping to this object doesn't exist, so oops occurs.

    Following is oops message reported from Dave.

    It blew up when something tried to read /proc/slab_allocators
    (Just cat it, and you should see the oops below)

    Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
    Modules linked in:
    [snip...]
    CPU: 1 PID: 9386 Comm: trinity-c33 Not tainted 3.14.0-rc5+ #131
    task: ffff8801aa46e890 ti: ffff880076924000 task.ti: ffff880076924000
    RIP: 0010:[] [] handle_slab+0x8a/0x180
    RSP: 0018:ffff880076925de0 EFLAGS: 00010002
    RAX: 0000000000001000 RBX: 0000000000000000 RCX: 000000005ce85ce7
    RDX: ffffea00079be100 RSI: 0000000000001000 RDI: ffff880107458000
    RBP: ffff880076925e18 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000000 R11: 000000000000000f R12: ffff8801e6f84000
    R13: ffffea00079be100 R14: ffff880107458000 R15: ffff88022bb8d2c0
    FS: 00007fb769e45740(0000) GS:ffff88024d040000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: ffff8801e6f84ff8 CR3: 00000000a22db000 CR4: 00000000001407e0
    DR0: 0000000002695000 DR1: 0000000002695000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000070602
    Call Trace:
    leaks_show+0xce/0x240
    seq_read+0x28e/0x490
    proc_reg_read+0x3d/0x80
    vfs_read+0x9b/0x160
    SyS_read+0x58/0xb0
    tracesys+0xd4/0xd9
    Code: f5 00 00 00 0f 1f 44 00 00 48 63 c8 44 3b 0c 8a 0f 84 e3 00 00 00 83 c0 01 44 39 c0 72 eb 41 f6 47 1a 01 0f 84 e9 00 00 00 89 f0 8b 4c 04 f8 4d 85 c9 0f 84 88 00 00 00 49 8b 7e 08 4d 8d 46
    RIP handle_slab+0x8a/0x180

    To fix the problem, I introduce an object status buffer on each slab.
    With this, we can track object status precisely, so slab leak detector
    would not access active object and no kernel oops would occur. Memory
    overhead caused by this fix is only imposed to CONFIG_DEBUG_SLAB_LEAK
    which is mainly used for debugging, so memory overhead isn't big
    problem.

    Signed-off-by: Joonsoo Kim
    Reported-by: Dave Jones
    Reported-by: Tetsuo Handa
    Reviewed-by: Vladimir Davydov
    Cc: Christoph Lameter
    Cc: Pekka Enberg
    Cc: David Rientjes
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Joonsoo Kim
     
  • commit 107437febd495a50e2cd09c81bbaa84d30e57b07 upstream.

    Changing PTEs and PMDs to pte_numa & pmd_numa is done with the
    mmap_sem held for reading, which means a pmd can be instantiated
    and turned into a numa one while __handle_mm_fault() is examining
    the value of old_pmd.

    If that happens, __handle_mm_fault() should just return and let
    the page fault retry, instead of throwing an oops. This is
    handled by the test for pmd_trans_huge(*pmd) below.

    Signed-off-by: Rik van Riel
    Reviewed-by: Naoya Horiguchi
    Reported-by: Sunil Pandey
    Signed-off-by: Peter Zijlstra
    Cc: Andrew Morton
    Cc: Johannes Weiner
    Cc: Kirill A. Shutemov
    Cc: Linus Torvalds
    Cc: Mel Gorman
    Cc: linux-mm@kvack.org
    Cc: lwoodman@redhat.com
    Cc: dave.hansen@intel.com
    Link: http://lkml.kernel.org/r/20140429153615.2d72098e@annuminas.surriel.com
    Signed-off-by: Ingo Molnar
    Patrick McLean
    Signed-off-by: Greg Kroah-Hartman

    Rik van Riel
     
  • commit fbc6c4a13bbfb420eedfdb26a0a859f9c07e8a7b upstream.

    Function unifb_mmap calls functions which are defined in linux/mm.h
    and asm/pgtable.h

    The related error (for unicore32 with unicore32_defconfig):
    CC drivers/video/fbdev/fb-puv3.o
    drivers/video/fbdev/fb-puv3.c: In function 'unifb_mmap':
    drivers/video/fbdev/fb-puv3.c:646: error: implicit declaration of
    function 'vm_iomap_memory'
    drivers/video/fbdev/fb-puv3.c:646: error: implicit declaration of
    function 'pgprot_noncached'

    Signed-off-by: Zhichuang Sun
    Cc: Jean-Christophe Plagniol-Villard
    Cc: Tomi Valkeinen
    Cc: Jingoo Han
    Cc: Daniel Vetter
    Cc: Joe Perches
    Cc: Laurent Pinchart
    Cc: linux-fbdev@vger.kernel.org
    Acked-by: Xuetao Guan
    Signed-off-by: Tomi Valkeinen
    Cc: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Zhichuang SUN
     
  • commit 1ff38c56cbd095c4c0dfa581a859ba3557830f78 upstream.

    Need include "asm/pgtable.h" to include "asm-generic/pgtable-nopmd.h",
    so can let 'pmd_t' defined. The related error with allmodconfig:

    CC arch/unicore32/mm/alignment.o
    In file included from arch/unicore32/mm/alignment.c:24:
    arch/unicore32/include/asm/tlbflush.h:135: error: expected .). before .*. token
    arch/unicore32/include/asm/tlbflush.h:154: error: expected .). before .*. token
    In file included from arch/unicore32/mm/alignment.c:27:
    arch/unicore32/mm/mm.h:15: error: expected .=., .,., .;., .sm. or ._attribute__. before .*. token
    arch/unicore32/mm/mm.h:20: error: expected .=., .,., .;., .sm. or ._attribute__. before .*. token
    arch/unicore32/mm/mm.h:25: error: expected .=., .,., .;., .sm. or ._attribute__. before .*. token
    make[1]: *** [arch/unicore32/mm/alignment.o] Error 1
    make: *** [arch/unicore32/mm] Error 2

    Signed-off-by: Chen Gang
    Acked-by: Xuetao Guan
    Signed-off-by: Xuetao Guan
    Cc: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Chen Gang