14 Sep, 2015

1 commit


13 Sep, 2015

5 commits

  • Linus Torvalds
     
  • Pull CRIS updates from Jesper Nilsson:
    "Mostly removal of old cruft of which we can use a generic version, or
    fixes for code not commonly run in the cris port, but also additions
    to enable some good debug"

    * tag 'cris-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/jesper/cris: (25 commits)
    CRISv10: delete unused lib/dmacopy.c
    CRISv10: delete unused lib/old_checksum.c
    CRIS: fix switch_mm() lockdep splat
    CRISv32: enable LOCKDEP_SUPPORT
    CRIS: add STACKTRACE_SUPPORT
    CRISv32: annotate irq enable in idle loop
    CRISv32: add support for irqflags tracing
    CRIS: UAPI: use generic types.h
    CRIS: UAPI: use generic shmbuf.h
    CRIS: UAPI: use generic msgbuf.h
    CRIS: UAPI: use generic socket.h
    CRIS: UAPI: use generic sembuf.h
    CRIS: UAPI: use generic sockios.h
    CRIS: UAPI: use generic auxvec.h
    CRIS: UAPI: use generic headers via Kbuild
    CRIS: UAPI: fix elf.h export
    CRIS: don't make asm/elf.h depend on asm/user.h
    CRIS: UAPI: fix ptrace.h
    CRISv32: Squash compile warnings for axisflashmap
    CRISv32: Add GPIO driver to the default configs
    ...

    Linus Torvalds
     
  • rq_data_dir() returns either READ or WRITE (0 == READ, 1 == WRITE), not
    a boolean value.

    Now, admittedly the "!= 0" doesn't really change the value (0 stays as
    zero, 1 stays as one), but it's not only redundant, it confuses gcc, and
    causes gcc to warn about the construct

    switch (rq_data_dir(req)) {
    case READ:
    ...
    case WRITE:
    ...

    that we have in a few drivers.

    Now, the gcc warning is silly and stupid (it seems to warn not about the
    switch value having a different type from the case statements, but about
    _any_ boolean switch value), but in this case the code itself is silly
    and stupid too, so let's just change it, and get rid of warnings like
    this:

    drivers/block/hd.c: In function ‘hd_request’:
    drivers/block/hd.c:630:11: warning: switch condition has boolean value [-Wswitch-bool]
    switch (rq_data_dir(req)) {

    The odd '!= 0' came in when "cmd_flags" got turned into a "u64" in
    commit 5953316dbf90 ("block: make rq->cmd_flags be 64-bit") and is
    presumably because the old code (that just did a logical 'and' with 1)
    would then end up making the type of rq_data_dir() be u64 too.

    But if we want to retain the old regular integer type, let's just cast
    the result to 'int' rather than use that rather odd '!= 0'.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Fix up the writeback plugging introduced in commit d353d7587d02
    ("writeback: plug writeback at a high level") that then caused problems
    due to the unplug happening with a spinlock held.

    * writeback-plugging:
    writeback: plug writeback in wb_writeback() and writeback_inodes_wb()
    Revert "writeback: plug writeback at a high level"

    Linus Torvalds
     
  • We had to revert the pluggin in writeback_sb_inodes() because the
    wb->list_lock is held, but we could easily plug at a higher level before
    taking that lock, and unplug after releasing it. This does that.

    Chris will run performance numbers, just to verify that this approach is
    comparable to the alternative (we could just drop and re-take the lock
    around the blk_finish_plug() rather than these two commits.

    I'd have preferred waiting for actual performance numbers before picking
    one approach over the other, but I don't want to release rc1 with the
    known "sleeping function called from invalid context" issue, so I'll
    pick this cleanup version for now. But if the numbers show that we
    really want to plug just at the writeback_sb_inodes() level, and we
    should just play ugly games with the spinlock, we'll switch to that.

    Cc: Chris Mason
    Cc: Josef Bacik
    Cc: Dave Chinner
    Cc: Neil Brown
    Cc: Jan Kara
    Cc: Christoph Hellwig
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

12 Sep, 2015

27 commits

  • I didn't notice this when merging the thermal code from Zhang, but his
    merge (commit 5a924a07f882: "Merge branches 'thermal-core' and
    'thermal-intel' of .git into next") of the thermal-core and
    thermal-intel branches was wrong.

    In thermal-core, commit 17e8351a7739 ("thermal: consistently use int for
    temperatures") converted the thermal layer to use "int" for
    temperatures.

    But in parallel, in the thermal-intel branch commit d0a12625d2ff
    ("thermal: Add Intel PCH thermal driver") added support for the intel
    PCH thermal sensor using the old interfaces that used "unsigned long"
    pointers.

    This resulted in warnings like this:

    drivers/thermal/intel_pch_thermal.c:184:14: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
    .get_temp = pch_thermal_get_temp,
    ^
    drivers/thermal/intel_pch_thermal.c:184:14: note: (near initialization for ‘tzd_ops.get_temp’)
    drivers/thermal/intel_pch_thermal.c:186:19: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
    .get_trip_temp = pch_get_trip_temp,
    ^
    drivers/thermal/intel_pch_thermal.c:186:19: note: (near initialization for ‘tzd_ops.get_trip_temp’)

    This fixes it.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Merge fourth patch-bomb from Andrew Morton:

    - sys_membarier syscall

    - seq_file interface changes

    - a few misc fixups

    * emailed patches from Andrew Morton :
    revert "ocfs2/dlm: use list_for_each_entry instead of list_for_each"
    mm/early_ioremap: add explicit #include of asm/early_ioremap.h
    fs/seq_file: convert int seq_vprint/seq_printf/etc... returns to void
    selftests: enhance membarrier syscall test
    selftests: add membarrier syscall test
    sys_membarrier(): system-wide memory barrier (generic, x86)
    MODSIGN: fix a compilation warning in extract-cert

    Linus Torvalds
     
  • Newer bitfiles needs the reduced clk even for SMP builds

    Cc: #4.2
    Signed-off-by: Vineet Gupta
    Signed-off-by: Linus Torvalds

    Vineet Gupta
     
  • Pull NTB fixes from Jon Mason:
    "NTB bug and documentation fixes, new device IDs, performance
    improvements, and adding a mailing list to MAINTAINERS for NTB"

    * tag 'ntb-4.3' of git://github.com/jonmason/ntb:
    NTB: Fix range check on memory window index
    NTB: Improve index handling in B2B MW workaround
    NTB: Fix documentation for ntb_peer_db_clear.
    NTB: Fix documentation for ntb_link_is_up
    NTB: Use unique DMA channels for TX and RX
    NTB: Remove dma_sync_wait from ntb_async_rx
    NTB: Clean up QP stats info
    NTB: Make the transport list in order of discovery
    NTB: Add PCI Device IDs for Broadwell Xeon
    NTB: Add flow control to the ntb_netdev
    NTB: Add list to MAINTAINERS

    Linus Torvalds
     
  • Pull more input updates from Dmitry Torokhov:
    "Second round of updates for the input subsystem.

    This introduces two brand new touchscreen drivers (Colibri and
    imx6ul_tsc), some small driver fixes, and we are no longer report
    errors from evdev_flush() as users do not really have a way of
    handling errors, error codes that we were returning were not on the
    list of errors supposed to be returned by close(), and errors were
    causing issues with one of older versions of systemd"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: imx_keypad - remove obsolete comment
    Input: touchscreen - add imx6ul_tsc driver support
    Input: Add touchscreen support for Colibri VF50
    Input: i8042 - lower log level for "no controller" message
    Input: evdev - do not report errors form flush()
    Input: elants_i2c - extend the calibration timeout to 12 seconds
    Input: sparcspkr - fix module autoload for OF platform drivers
    Input: regulator-haptic - fix module autoload for OF platform driver
    Input: pwm-beeper - fix module autoload for OF platform driver
    Input: ab8500-ponkey - Fix module autoload for OF platform driver
    Input: cyttsp - remove unnecessary MODULE_ALIAS()
    Input: elan_i2c - add ACPI ID "ELAN1000"

    Linus Torvalds
     
  • Pull more power management and ACPI updates from Rafael Wysocki:
    "These are mostly fixes and cleanups on top of the previous PM+ACPI
    pull request (cpufreq core and drivers, cpuidle, generic power domains
    framework). Some of them didn't make to that pull request and some
    fix issues introduced by it.

    The only really new thing is the support for suspend frequency in the
    cpufreq-dt driver, but it is needed to fix an issue with Exynos
    platforms.

    Specifics:

    - build fix for the new Mediatek MT8173 cpufreq driver (Guenter
    Roeck).

    - generic power domains framework fixes (power on error code path,
    subdomain removal) and cleanup of a deprecated API user (Geert
    Uytterhoeven, Jon Hunter, Ulf Hansson).

    - cpufreq-dt driver fixes including two fixes for bugs related to the
    new Operating Performance Points Device Tree bindings introduced
    recently (Viresh Kumar).

    - suspend frequency support for the cpufreq-dt driver (Bartlomiej
    Zolnierkiewicz, Viresh Kumar).

    - cpufreq core cleanups (Viresh Kumar).

    - intel_pstate driver fixes (Chen Yu, Kristen Carlson Accardi).

    - additional sanity check in the cpuidle core (Xunlei Pang).

    - fix for a comment related to CPU power management (Lina Iyer)"

    * tag 'pm+acpi-4.3-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    intel_pstate: fix PCT_TO_HWP macro
    intel_pstate: Fix user input of min/max to legal policy region
    PM / OPP: Return suspend_opp only if it is enabled
    cpufreq-dt: add suspend frequency support
    cpufreq: allow cpufreq_generic_suspend() to work without suspend frequency
    PM / OPP: add dev_pm_opp_get_suspend_opp() helper
    staging: board: Migrate away from __pm_genpd_name_add_device()
    cpufreq: Use __func__ to print function's name
    cpufreq: staticize cpufreq_cpu_get_raw()
    PM / Domains: Ensure subdomain is not in use before removing
    cpufreq: Add ARM_MT8173_CPUFREQ dependency on THERMAL
    cpuidle/coupled: Add sanity check for safe_state_index
    PM / Domains: Try power off masters in error path of __pm_genpd_poweron()
    cpufreq: dt: Tolerance applies on both sides of target voltage
    cpufreq: dt: Print error on failing to mark OPPs as shared
    cpufreq: dt: Check OPP count before marking them shared
    kernel/cpu_pm: fix cpu_cluster_pm_exit comment

    Linus Torvalds
     
  • Pull SCSI target updates from Nicholas Bellinger:
    "Here are the outstanding target-pending updates for v4.3-rc1.

    Mostly bug-fixes and minor changes this round. The fallout from the
    big v4.2-rc1 RCU conversion have (thus far) been minimal.

    The highlights this round include:

    - Move sense handling routines into scsi_common code (Sagi)

    - Return ABORTED_COMMAND sense key for PI errors (Sagi)

    - Add tpg_enabled_sendtargets attribute for disabled iscsi-target
    discovery (David)

    - Shrink target struct se_cmd by rearranging fields (Roland)

    - Drop iSCSI use of mutex around max_cmd_sn increment (Roland)

    - Replace iSCSI __kernel_sockaddr_storage with sockaddr_storage (Andy +
    Chris)

    - Honor fabric max_data_sg_nents I/O transfer limit (Arun + Himanshu +
    nab)

    - Fix EXTENDED_COPY >= v4.1 regression OOPsen (Alex + nab)"

    * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (37 commits)
    target: use stringify.h instead of own definition
    target/user: Fix UFLAG_UNKNOWN_OP handling
    target: Remove no-op conditional
    target/user: Remove unused variable
    target: Fix max_cmd_sn increment w/o cmdsn mutex regressions
    target: Attach EXTENDED_COPY local I/O descriptors to xcopy_pt_sess
    target/qla2xxx: Honor max_data_sg_nents I/O transfer limit
    target/iscsi: Replace __kernel_sockaddr_storage with sockaddr_storage
    target/iscsi: Replace conn->login_ip with login_sockaddr
    target/iscsi: Keep local_ip as the actual sockaddr
    target/iscsi: Fix np_ip bracket issue by removing np_ip
    target: Drop iSCSI use of mutex around max_cmd_sn increment
    qla2xxx: Update tcm_qla2xxx module description to 24xx+
    iscsi-target: Add tpg_enabled_sendtargets for disabled discovery
    drivers: target: Drop unlikely before IS_ERR(_OR_NULL)
    target: check DPO/FUA usage for COMPARE AND WRITE
    target: Shrink struct se_cmd by rearranging fields
    target: Remove cmd->se_ordered_id (unused except debug log lines)
    target: add support for START_STOP_UNIT SCSI opcode
    target: improve unsupported opcode message
    ...

    Linus Torvalds
     
  • Pull second round of SCSI updates from James Bottomley:
    "There's one late arriving patch here (added today), fixing a build
    issue which the scsi_dh patch set in here uncovered. Other than that,
    everything has been incubated in -next and the checkers for a week.

    The major pieces of this patch are a set patches facilitating better
    integration between scsi and scsi_dh (the device handling layer used
    by multi-path; all the dm parts are acked by Mike Snitzer).

    This also includes driver updates for mp3sas, scsi_debug and an
    assortment of bug fixes"

    * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (50 commits)
    scsi_dh: fix randconfig build error
    scsi: fix scsi_error_handler vs. scsi_host_dev_release race
    fcoe: Convert use of __constant_htons to htons
    mpt2sas: setpci reset kernel oops fix
    pm80xx: Don't override ts->stat on IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY
    lpfc: Fix possible use-after-free and double free in lpfc_mbx_cmpl_rdp_page_a2()
    bfa: Fix incorrect de-reference of pointer
    bfa: Fix indentation
    scsi_transport_sas: Remove check for SAS expander when querying bay/enclosure IDs.
    scsi_debug: resp_request: remove unused variable
    scsi_debug: fix REPORT LUNS Well Known LU
    scsi_debug: schedule_resp fix input variable check
    scsi_debug: make dump_sector static
    scsi_debug: vfree is null safe so drop the check
    scsi_debug: use SCSI_W_LUN_REPORT_LUNS instead of SAM2_WLUN_REPORT_LUNS;
    scsi_debug: define pr_fmt() for consistent logging
    mpt2sas: Refcount fw_events and fix unsafe list usage
    mpt2sas: Refcount sas_device objects and fix unsafe list usage
    scsi_dh: return SCSI_DH_NOTCONN in scsi_dh_activate()
    scsi_dh: don't allow to detach device handlers at runtime
    ...

    Linus Torvalds
     
  • Pull media updates from Mauro Carvalho Chehab:
    "A series of patches that move part of the code used to allocate memory
    from the media subsystem to the mm subsystem"

    [ The mm parts have been acked by VM people, and the series was
    apparently in -mm for a while - Linus ]

    * tag 'media/v4.3-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
    [media] drm/exynos: Convert g2d_userptr_get_dma_addr() to use get_vaddr_frames()
    [media] media: vb2: Remove unused functions
    [media] media: vb2: Convert vb2_dc_get_userptr() to use frame vector
    [media] media: vb2: Convert vb2_vmalloc_get_userptr() to use frame vector
    [media] media: vb2: Convert vb2_dma_sg_get_userptr() to use frame vector
    [media] vb2: Provide helpers for mapping virtual addresses
    [media] media: omap_vout: Convert omap_vout_uservirt_to_phys() to use get_vaddr_pfns()
    [media] mm: Provide new get_vaddr_frames() helper
    [media] vb2: Push mmap_sem down to memops

    Linus Torvalds
     
  • Pull edac updates from Mauro Carvalho Chehab:
    "Two EDAC fixes for Intel systems (Haswell and Ivy Bridge)"

    * tag 'edac/v4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac:
    sb_edac: correctly fetch DIMM width on Ivy Bridge and Haswell
    sb_edac: look harder for DDRIO on Haswell systems

    Linus Torvalds
     
  • Pull thermal updates from Zhang Rui:

    - use int instead of unsigned long to represent temperature to avoid
    bogus overheat detection when negative temperature reported. From
    Sascha Hauer.

    - export available thermal governors information to user space via
    sysfs. From Wei Ni.

    - introduce new thermal driver for Wildcat Point platform controller
    hub, which uses PCH thermal sensor and associated critical and hot
    trip points. From Tushar Dave.

    - add suuport for Intel Skylake and Denlow platforms in powerclamp
    driver.

    - some small cleanups in thermal core.

    * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux:
    thermal: Add Intel PCH thermal driver
    thermal: Add comment explaining test for critical temperature
    thermal: Use IS_ENABLED instead of #ifdef
    thermal: remove unnecessary call to thermal_zone_device_set_polling
    thermal: trivial: fix typo in comment
    thermal: consistently use int for temperatures
    thermal: add available policies sysfs attribute
    thermal/powerclamp: add cpu id for denlow platform
    thermal/powerclamp: add cpu id for Skylake u/y
    thermal/powerclamp: add cpu id for skylake h/s

    Linus Torvalds
     
  • Revert commit f83c7b5e9fd6 ("ocfs2/dlm: use list_for_each_entry instead
    of list_for_each").

    list_for_each_entry() will dereference its `pos' argument, which can be
    NULL in dlm_process_recovery_data().

    Reported-by: Julia Lawall
    Reported-by: Fengguang Wu
    Cc: Joseph Qi
    Cc: Mark Fasheh
    Cc: Joel Becker
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Commit 6b0f68e32ea8 ("mm: add utility for early copy from unmapped ram")
    introduces a function copy_from_early_mem() into mm/early_ioremap.c
    which itself calls early_memremap()/early_memunmap(). However, since
    early_memunmap() has not been declared yet at this point in the .c file,
    nor by any explicitly included header files, we are depending on a
    transitive include of asm/early_ioremap.h to declare it, which is
    fragile.

    So instead, include this header explicitly.

    Signed-off-by: Ard Biesheuvel
    Acked-by: Mark Salter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     
  • The seq_ function return values were frequently misused.

    See: commit 1f33c41c03da ("seq_file: Rename seq_overflow() to
    seq_has_overflowed() and make public")

    All uses of these return values have been removed, so convert the
    return types to void.

    Miscellanea:

    o Move seq_put_decimal_ and seq_escape prototypes closer the
    other seq_vprintf prototypes
    o Reorder seq_putc and seq_puts to return early on overflow
    o Add argument names to seq_vprintf and seq_printf
    o Update the seq_escape kernel-doc
    o Convert a couple of leading spaces to tabs in seq_escape

    Signed-off-by: Joe Perches
    Cc: Al Viro
    Cc: Steven Rostedt
    Cc: Mark Brown
    Cc: Stephen Rothwell
    Cc: Joerg Roedel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • Update the membarrier syscall self-test to match the membarrier
    interface. Extend coverage of the interface. Consider ENOSYS as a
    "SKIP" test, since it is a valid configuration, but does not allow
    testing the system call.

    Signed-off-by: Mathieu Desnoyers
    Cc: Michael Ellerman
    Cc: Pranith Kumar
    Cc: Shuah Khan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mathieu Desnoyers
     
  • Add a self test for the membarrier system call.

    Signed-off-by: Pranith Kumar
    Signed-off-by: Mathieu Desnoyers
    Cc: Michael Ellerman
    Cc: Shuah Khan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pranith Kumar
     
  • Here is an implementation of a new system call, sys_membarrier(), which
    executes a memory barrier on all threads running on the system. It is
    implemented by calling synchronize_sched(). It can be used to
    distribute the cost of user-space memory barriers asymmetrically by
    transforming pairs of memory barriers into pairs consisting of
    sys_membarrier() and a compiler barrier. For synchronization primitives
    that distinguish between read-side and write-side (e.g. userspace RCU
    [1], rwlocks), the read-side can be accelerated significantly by moving
    the bulk of the memory barrier overhead to the write-side.

    The existing applications of which I am aware that would be improved by
    this system call are as follows:

    * Through Userspace RCU library (http://urcu.so)
    - DNS server (Knot DNS) https://www.knot-dns.cz/
    - Network sniffer (http://netsniff-ng.org/)
    - Distributed object storage (https://sheepdog.github.io/sheepdog/)
    - User-space tracing (http://lttng.org)
    - Network storage system (https://www.gluster.org/)
    - Virtual routers (https://events.linuxfoundation.org/sites/events/files/slides/DPDK_RCU_0MQ.pdf)
    - Financial software (https://lkml.org/lkml/2015/3/23/189)

    Those projects use RCU in userspace to increase read-side speed and
    scalability compared to locking. Especially in the case of RCU used by
    libraries, sys_membarrier can speed up the read-side by moving the bulk of
    the memory barrier cost to synchronize_rcu().

    * Direct users of sys_membarrier
    - core dotnet garbage collector (https://github.com/dotnet/coreclr/issues/198)

    Microsoft core dotnet GC developers are planning to use the mprotect()
    side-effect of issuing memory barriers through IPIs as a way to implement
    Windows FlushProcessWriteBuffers() on Linux. They are referring to
    sys_membarrier in their github thread, specifically stating that
    sys_membarrier() is what they are looking for.

    To explain the benefit of this scheme, let's introduce two example threads:

    Thread A (non-frequent, e.g. executing liburcu synchronize_rcu())
    Thread B (frequent, e.g. executing liburcu
    rcu_read_lock()/rcu_read_unlock())

    In a scheme where all smp_mb() in thread A are ordering memory accesses
    with respect to smp_mb() present in Thread B, we can change each
    smp_mb() within Thread A into calls to sys_membarrier() and each
    smp_mb() within Thread B into compiler barriers "barrier()".

    Before the change, we had, for each smp_mb() pairs:

    Thread A Thread B
    previous mem accesses previous mem accesses
    smp_mb() smp_mb()
    following mem accesses following mem accesses

    After the change, these pairs become:

    Thread A Thread B
    prev mem accesses prev mem accesses
    sys_membarrier() barrier()
    follow mem accesses follow mem accesses

    As we can see, there are two possible scenarios: either Thread B memory
    accesses do not happen concurrently with Thread A accesses (1), or they
    do (2).

    1) Non-concurrent Thread A vs Thread B accesses:

    Thread A Thread B
    prev mem accesses
    sys_membarrier()
    follow mem accesses
    prev mem accesses
    barrier()
    follow mem accesses

    In this case, thread B accesses will be weakly ordered. This is OK,
    because at that point, thread A is not particularly interested in
    ordering them with respect to its own accesses.

    2) Concurrent Thread A vs Thread B accesses

    Thread A Thread B
    prev mem accesses prev mem accesses
    sys_membarrier() barrier()
    follow mem accesses follow mem accesses

    In this case, thread B accesses, which are ensured to be in program
    order thanks to the compiler barrier, will be "upgraded" to full
    smp_mb() by synchronize_sched().

    * Benchmarks

    On Intel Xeon E5405 (8 cores)
    (one thread is calling sys_membarrier, the other 7 threads are busy
    looping)

    1000 non-expedited sys_membarrier calls in 33s =3D 33 milliseconds/call.

    * User-space user of this system call: Userspace RCU library

    Both the signal-based and the sys_membarrier userspace RCU schemes
    permit us to remove the memory barrier from the userspace RCU
    rcu_read_lock() and rcu_read_unlock() primitives, thus significantly
    accelerating them. These memory barriers are replaced by compiler
    barriers on the read-side, and all matching memory barriers on the
    write-side are turned into an invocation of a memory barrier on all
    active threads in the process. By letting the kernel perform this
    synchronization rather than dumbly sending a signal to every process
    threads (as we currently do), we diminish the number of unnecessary wake
    ups and only issue the memory barriers on active threads. Non-running
    threads do not need to execute such barrier anyway, because these are
    implied by the scheduler context switches.

    Results in liburcu:

    Operations in 10s, 6 readers, 2 writers:

    memory barriers in reader: 1701557485 reads, 2202847 writes
    signal-based scheme: 9830061167 reads, 6700 writes
    sys_membarrier: 9952759104 reads, 425 writes
    sys_membarrier (dyn. check): 7970328887 reads, 425 writes

    The dynamic sys_membarrier availability check adds some overhead to
    the read-side compared to the signal-based scheme, but besides that,
    sys_membarrier slightly outperforms the signal-based scheme. However,
    this non-expedited sys_membarrier implementation has a much slower grace
    period than signal and memory barrier schemes.

    Besides diminishing the number of wake-ups, one major advantage of the
    membarrier system call over the signal-based scheme is that it does not
    need to reserve a signal. This plays much more nicely with libraries,
    and with processes injected into for tracing purposes, for which we
    cannot expect that signals will be unused by the application.

    An expedited version of this system call can be added later on to speed
    up the grace period. Its implementation will likely depend on reading
    the cpu_curr()->mm without holding each CPU's rq lock.

    This patch adds the system call to x86 and to asm-generic.

    [1] http://urcu.so

    membarrier(2) man page:

    MEMBARRIER(2) Linux Programmer's Manual MEMBARRIER(2)

    NAME
    membarrier - issue memory barriers on a set of threads

    SYNOPSIS
    #include

    int membarrier(int cmd, int flags);

    DESCRIPTION
    The cmd argument is one of the following:

    MEMBARRIER_CMD_QUERY
    Query the set of supported commands. It returns a bitmask of
    supported commands.

    MEMBARRIER_CMD_SHARED
    Execute a memory barrier on all threads running on the system.
    Upon return from system call, the caller thread is ensured that
    all running threads have passed through a state where all memory
    accesses to user-space addresses match program order between
    entry to and return from the system call (non-running threads
    are de facto in such a state). This covers threads from all pro=E2=80=90
    cesses running on the system. This command returns 0.

    The flags argument needs to be 0. For future extensions.

    All memory accesses performed in program order from each targeted
    thread is guaranteed to be ordered with respect to sys_membarrier(). If
    we use the semantic "barrier()" to represent a compiler barrier forcing
    memory accesses to be performed in program order across the barrier,
    and smp_mb() to represent explicit memory barriers forcing full memory
    ordering across the barrier, we have the following ordering table for
    each pair of barrier(), sys_membarrier() and smp_mb():

    The pair ordering is detailed as (O: ordered, X: not ordered):

    barrier() smp_mb() sys_membarrier()
    barrier() X X O
    smp_mb() X O O
    sys_membarrier() O O O

    RETURN VALUE
    On success, these system calls return zero. On error, -1 is returned,
    and errno is set appropriately. For a given command, with flags
    argument set to 0, this system call is guaranteed to always return the
    same value until reboot.

    ERRORS
    ENOSYS System call is not implemented.

    EINVAL Invalid arguments.

    Linux 2015-04-15 MEMBARRIER(2)

    Signed-off-by: Mathieu Desnoyers
    Reviewed-by: Paul E. McKenney
    Reviewed-by: Josh Triplett
    Cc: KOSAKI Motohiro
    Cc: Steven Rostedt
    Cc: Nicholas Miell
    Cc: Ingo Molnar
    Cc: Alan Cox
    Cc: Lai Jiangshan
    Cc: Stephen Hemminger
    Cc: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: David Howells
    Cc: Pranith Kumar
    Cc: Michael Kerrisk
    Cc: Shuah Khan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mathieu Desnoyers
     
  • Fix the following warning when compiling extract-cert:

    scripts/extract-cert.c: In function `write_cert':
    scripts/extract-cert.c:89:2: warning: format not a string literal and no format arguments [-Wformat-security]
    ERR(!i2d_X509_bio(wb, x509), cert_dst);
    ^

    whereby the ERR() macro is taking cert_dst as the format string. "%s"
    should be used as the format string as the path could contain special
    characters.

    Signed-off-by: David Howells
    Reported-by: Jim Davis
    Acked-by : David Woodhouse
    Cc: James Morris
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Pull watchdog updates from Wim Van Sebroeck:
    - new driver for NXP LPC18xx Watchdog Timer
    - new driver for SAMA5D4 watchdog timer
    - add support for MCP79 to nv_tco driver
    - clean-up and improvement of the mpc8xxx watchdog driver
    - improvements to gpio-wdt
    - at91sam9_wdt clock improvements
    ... and other small fixes and improvements

    * git://www.linux-watchdog.org/linux-watchdog: (25 commits)
    Watchdog: Fix parent of watchdog_devices
    watchdog: at91rm9200: Correct check for syscon_node_to_regmap() errors
    watchdog: at91sam9: get and use slow clock
    Documentation: dt: binding: atmel-sama5d4-wdt: for SAMA5D4 watchdog driver
    watchdog: add a driver to support SAMA5D4 watchdog timer
    watchdog: mpc8xxx: allow to compile for MPC512x
    watchdog: mpc8xxx: use better error code when watchdog cannot be enabled
    watchdog: mpc8xxx: use dynamic memory for device specific data
    watchdog: mpc8xxx: use devm_ioremap_resource to map memory
    watchdog: mpc8xxx: make use of of_device_get_match_data
    watchdog: mpc8xxx: simplify registration
    watchdog: mpc8xxx: remove dead code
    watchdog: lpc18xx_wdt_get_timeleft() can be static
    DT: watchdog: Add NXP LPC18xx Watchdog Timer binding documentation
    watchdog: NXP LPC18xx Watchdog Timer Driver
    watchdog: gpio-wdt: ping already at startup for always running devices
    watchdog: gpio-wdt: be more strict about hw_algo matching
    Documentation: watchdog: at91sam9_wdt: add clocks property
    watchdog: booke_wdt: Use infrastructure to check timeout limits
    watchdog: (nv_tco) add support for MCP79
    ...

    Linus Torvalds
     
  • This reverts commit d353d7587d02116b9732d5c06615aed75a4d3a47.

    Doing the block layer plug/unplug inside writeback_sb_inodes() is
    broken, because that function is actually called with a spinlock held:
    wb->list_lock, as pointed out by Chris Mason.

    Chris suggested just dropping and re-taking the spinlock around the
    blk_finish_plug() call (the plgging itself can happen under the
    spinlock), and that would technically work, but is just disgusting.

    We do something fairly similar - but not quite as disgusting because we
    at least have a better reason for it - in writeback_single_inode(), so
    it's not like the caller can depend on the lock being held over the
    call, but in this case there just isn't any good reason for that
    "release and re-take the lock" pattern.

    [ In general, we should really strive to avoid the "release and retake"
    pattern for locks, because in the general case it can easily cause
    subtle bugs when the caller caches any state around the call that
    might be invalidated by dropping the lock even just temporarily. ]

    But in this case, the plugging should be easy to just move up to the
    callers before the spinlock is taken, which should even improve the
    effectiveness of the plug. So there is really no good reason to play
    games with locking here.

    I'll send off a test-patch so that Dave Chinner can verify that that
    plug movement works. In the meantime this just reverts the problematic
    commit and adds a comment to the function so that we hopefully don't
    make this mistake again.

    Reported-by: Chris Mason
    Cc: Josef Bacik
    Cc: Dave Chinner
    Cc: Neil Brown
    Cc: Jan Kara
    Cc: Christoph Hellwig
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Pull btrfs cleanups and fixes from Chris Mason:
    "These are small cleanups, and also some fixes for our async worker
    thread initialization.

    I was having some trouble testing these, but it ended up being a
    combination of changing around my test servers and a shiny new
    schedule while atomic from the new start/finish_plug in
    writeback_sb_inodes().

    That one only hits on btrfs raid5/6 or MD raid10, and if I wasn't
    changing a bunch of things in my test setup at once it would have been
    really clear. Fix for writeback_sb_inodes() on the way as well"

    * 'for-linus-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
    Btrfs: cleanup: remove unnecessary check before btrfs_free_path is called
    btrfs: async_thread: Fix workqueue 'max_active' value when initializing
    btrfs: Add raid56 support for updating num_tolerated_disk_barrier_failures in btrfs_balance
    btrfs: Cleanup for btrfs_calc_num_tolerated_disk_barrier_failures
    btrfs: Remove noused chunk_tree and chunk_objectid from scrub_enumerate_chunks and scrub_chunk
    btrfs: Update out-of-date "skip parity stripe" comment

    Linus Torvalds
     
  • Pull Ceph update from Sage Weil:
    "There are a few fixes for snapshot behavior with CephFS and support
    for the new keepalive protocol from Zheng, a libceph fix that affects
    both RBD and CephFS, a few bug fixes and cleanups for RBD from Ilya,
    and several small fixes and cleanups from Jianpeng and others"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
    ceph: improve readahead for file holes
    ceph: get inode size for each append write
    libceph: check data_len in ->alloc_msg()
    libceph: use keepalive2 to verify the mon session is alive
    rbd: plug rbd_dev->header.object_prefix memory leak
    rbd: fix double free on rbd_dev->header_name
    libceph: set 'exists' flag for newly up osd
    ceph: cleanup use of ceph_msg_get
    ceph: no need to get parent inode in ceph_open
    ceph: remove the useless judgement
    ceph: remove redundant test of head->safe and silence static analysis warnings
    ceph: fix queuing inode to mdsdir's snaprealm
    libceph: rename con_work() to ceph_con_workfn()
    libceph: Avoid holding the zero page on ceph_msgr_slab_init errors
    libceph: remove the unused macro AES_KEY_SIZE
    ceph: invalidate dirty pages after forced umount
    ceph: EIO all operations after forced umount

    Linus Torvalds
     
  • Pull GFS2 updates from Bob Peterson:
    "Here is a list of patches we've accumulated for GFS2 for the current
    upstream merge window. This time we've only got six patches, many of
    which are very small:

    - three cleanups from Andreas Gruenbacher, including a nice cleanup
    of the sequence file code for the sbstats debugfs file.

    - a patch from Ben Hutchings that changes statistics variables from
    signed to unsigned.

    - two patches from me that increase GFS2's glock scalability by
    switching from a conventional hash table to rhashtable"

    * tag 'gfs2-merge-window' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2:
    gfs2: A minor "sbstats" cleanup
    gfs2: Fix a typo in a comment
    gfs2: Make statistics unsigned, suitable for use with do_div()
    GFS2: Use resizable hash table for glocks
    GFS2: Move glock superblock pointer to field gl_name
    gfs2: Simplify the seq file code for "sbstats"

    Linus Torvalds
     
  • It looks like the Kconfig check that was meant to fix this (commit
    fe9233fb6914a0eb20166c967e3020f7f0fba2c9 [SCSI] scsi_dh: fix kconfig related
    build errors) was actually reversed, but no-one noticed until the new set of
    patches which separated DM and SCSI_DH).

    Fixes: fe9233fb6914a0eb20166c967e3020f7f0fba2c9
    Signed-off-by: Christoph Hellwig
    Tested-by: Mike Snitzer
    Signed-off-by: James Bottomley

    Christoph Hellwig
     
  • Pull sound fixes from Takashi Iwai:
    "A collection of small fixes since the last update: the HD-audio quirks
    as usual with a USB-audio fix and a trivial fix for the old sparc
    driver"

    * tag 'sound-fix-4.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: usb-audio: Change internal PCM order
    ALSA: hda - Fix white noise on Dell M3800
    ALSA: hda - Use ALC880_FIXUP_FUJITSU for FSC Amilo M1437
    ALSA: hda - Enable headphone jack detect on old Fujitsu laptops
    ALSA: sparc: amd7930: Fix module autoload for OF platform driver
    ALSA: hda - Add some FIXUP quirks for white noise on Dell laptop.

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "Just a bunch of fixes to squeeze in before -rc1:

    - three nouveau regression fixes

    - one qxl regression fix

    - a bunch of i915 fixes

    ... and some core displayport/atomic fixes"

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    drm/nouveau/device: enable c800 quirk for tecra w50
    drm/nouveau/clk/gt215: Unbreak engine pausing for GT21x/MCP7x
    drm/nouveau/gr/nv04: fix big endian setting on gr context
    drm/qxl: validate monitors config modes
    drm/i915: Allow DSI dual link to be configured on any pipe
    drm/i915: Don't try to use DDR DVFS on CHV when disabled in the BIOS
    drm/i915: Fix CSR MMIO address check
    drm/i915: Limit the number of loops for reading a split 64bit register
    drm/i915: Fix broken mst get_hw_state.
    drm/i915: Pass hpd_status_i915[] to intel_get_hpd_pins() in pre-g4x
    uapi/drm/i915_drm.h: fix userspace compilation.
    drm/i915: Always mark the object as dirty when used by the GPU
    drm/dp: Add dp_aux_i2c_speed_khz module param to set the assume i2c bus speed
    drm/dp: Adjust i2c-over-aux retry count based on message size and i2c bus speed
    drm/dp: Define AUX_RETRY_INTERVAL as 500 us
    drm/atomic: Fix bookkeeping with TEST_ONLY, v3.

    Linus Torvalds
     
  • Prepare second round of input updates for 4.3 merge window.

    Dmitry Torokhov
     

11 Sep, 2015

7 commits

  • * pm-cpu:
    kernel/cpu_pm: fix cpu_cluster_pm_exit comment

    * pm-cpuidle:
    cpuidle/coupled: Add sanity check for safe_state_index

    * pm-domains:
    staging: board: Migrate away from __pm_genpd_name_add_device()
    PM / Domains: Ensure subdomain is not in use before removing
    PM / Domains: Try power off masters in error path of __pm_genpd_poweron()

    Rafael J. Wysocki
     
  • * pm-cpufreq:
    intel_pstate: fix PCT_TO_HWP macro
    intel_pstate: Fix user input of min/max to legal policy region
    cpufreq-dt: add suspend frequency support
    cpufreq: allow cpufreq_generic_suspend() to work without suspend frequency
    cpufreq: Use __func__ to print function's name
    cpufreq: staticize cpufreq_cpu_get_raw()
    cpufreq: Add ARM_MT8173_CPUFREQ dependency on THERMAL
    cpufreq: dt: Tolerance applies on both sides of target voltage
    cpufreq: dt: Print error on failing to mark OPPs as shared
    cpufreq: dt: Check OPP count before marking them shared

    Rafael J. Wysocki
     
  • * pm-opp:
    PM / OPP: Return suspend_opp only if it is enabled
    PM / OPP: add dev_pm_opp_get_suspend_opp() helper

    Rafael J. Wysocki
     
  • Signed-off-by: David Disseldorp
    Acked-by: Andy Grover
    Signed-off-by: Nicholas Bellinger

    David Disseldorp
     
  • Calling transport_generic_request_failure() from here causes list
    corruption. We should be using target_complete_cmd() instead.

    Which we do in all other cases, so the UNKNOWN_OP case can become just
    another member of the big else/if chain in tcmu_handle_completion().

    Signed-off-by: Andy Grover
    Signed-off-by: Nicholas Bellinger

    Andy Grover
     
  • This does nothing, and there are many other places where
    transport_cmd_check_stop_to_fabric()'s retval is not checked>, If we
    wanted to check it here, we should probably do it those other places too.

    Signed-off-by: Andy Grover
    Signed-off-by: Nicholas Bellinger

    Andy Grover
     
  • We don't use it any more.

    Signed-off-by: Andy Grover
    Signed-off-by: Nicholas Bellinger

    Andy Grover