09 Jan, 2017

2 commits

  • Pull USB fixes from Greg KH:
    "Here are a bunch of USB fixes for 4.10-rc3. Yeah, it's a lot, an
    artifact of the holiday break I think.

    Lots of gadget and the usual XHCI fixups for reported issues (one day
    that driver will calm down...) Also included are a bunch of usb-serial
    driver fixes, and for good measure, a number of much-reported MUSB
    driver issues have finally been resolved.

    All of these have been in linux-next with no reported issues"

    * tag 'usb-4.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (72 commits)
    USB: fix problems with duplicate endpoint addresses
    usb: ohci-at91: use descriptor-based gpio APIs correctly
    usb: storage: unusual_uas: Add JMicron JMS56x to unusual device
    usb: hub: Move hub_port_disable() to fix warning if PM is disabled
    usb: musb: blackfin: add bfin_fifo_offset in bfin_ops
    usb: musb: fix compilation warning on unused function
    usb: musb: Fix trying to free already-free IRQ 4
    usb: musb: dsps: implement clear_ep_rxintr() callback
    usb: musb: core: add clear_ep_rxintr() to musb_platform_ops
    USB: serial: ti_usb_3410_5052: fix NULL-deref at open
    USB: serial: spcp8x5: fix NULL-deref at open
    USB: serial: quatech2: fix sleep-while-atomic in close
    USB: serial: pl2303: fix NULL-deref at open
    USB: serial: oti6858: fix NULL-deref at open
    USB: serial: omninet: fix NULL-derefs at open and disconnect
    USB: serial: mos7840: fix misleading interrupt-URB comment
    USB: serial: mos7840: remove unused write URB
    USB: serial: mos7840: fix NULL-deref at open
    USB: serial: mos7720: remove obsolete port initialisation
    USB: serial: mos7720: fix parallel probe
    ...

    Linus Torvalds
     
  • Pull staging/IIO fixes from Greg KH:
    "Here are some staging and IIO driver fixes for 4.10-rc3.

    Most of these are minor IIO fixes of reported issues, along with one
    network driver fix to resolve an issue. And a MAINTAINERS update with
    a new mailing list. All of these, except the MAINTAINERS file update,
    have been in linux-next with no reported issues (the MAINTAINERS patch
    happened on Friday...)"

    * tag 'staging-4.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
    MAINTAINERS: add greybus subsystem mailing list
    staging: octeon: Call SET_NETDEV_DEV()
    iio: accel: st_accel: fix LIS3LV02 reading and scaling
    iio: common: st_sensors: fix channel data parsing
    iio: max44000: correct value in illuminance_integration_time_available
    iio: adc: TI_AM335X_ADC should depend on HAS_DMA
    iio: bmi160: Fix time needed to sleep after command execution
    iio: 104-quad-8: Fix active level mismatch for the preset enable option
    iio: 104-quad-8: Fix off-by-one errors when addressing IOR
    iio: 104-quad-8: Fix index control configuration

    Linus Torvalds
     

08 Jan, 2017

2 commits

  • Several people report seeing warnings about inconsistent radix tree
    nodes followed by crashes in the workingset code, which all looked like
    use-after-free access from the shadow node shrinker.

    Dave Jones managed to reproduce the issue with a debug patch applied,
    which confirmed that the radix tree shrinking indeed frees shadow nodes
    while they are still linked to the shadow LRU:

    WARNING: CPU: 2 PID: 53 at lib/radix-tree.c:643 delete_node+0x1e4/0x200
    CPU: 2 PID: 53 Comm: kswapd0 Not tainted 4.10.0-rc2-think+ #3
    Call Trace:
    delete_node+0x1e4/0x200
    __radix_tree_delete_node+0xd/0x10
    shadow_lru_isolate+0xe6/0x220
    __list_lru_walk_one.isra.4+0x9b/0x190
    list_lru_walk_one+0x23/0x30
    scan_shadow_nodes+0x2e/0x40
    shrink_slab.part.44+0x23d/0x5d0
    shrink_node+0x22c/0x330
    kswapd+0x392/0x8f0

    This is the WARN_ON_ONCE(!list_empty(&node->private_list)) placed in the
    inlined radix_tree_shrink().

    The problem is with 14b468791fa9 ("mm: workingset: move shadow entry
    tracking to radix tree exceptional tracking"), which passes an update
    callback into the radix tree to link and unlink shadow leaf nodes when
    tree entries change, but forgot to pass the callback when reclaiming a
    shadow node.

    While the reclaimed shadow node itself is unlinked by the shrinker, its
    deletion from the tree can cause the left-most leaf node in the tree to
    be shrunk. If that happens to be a shadow node as well, we don't unlink
    it from the LRU as we should.

    Consider this tree, where the s are shadow entries:

    root->rnode
    |
    [0 n]
    | |
    [s ] [sssss]

    Now the shadow node shrinker reclaims the rightmost leaf node through
    the shadow node LRU:

    root->rnode
    |
    [0 ]
    |
    [s ]

    Because the parent of the deleted node is the first level below the
    root and has only one child in the left-most slot, the intermediate
    level is shrunk and the node containing the single shadow is put in
    its place:

    root->rnode
    |
    [s ]

    The shrinker again sees a single left-most slot in a first level node
    and thus decides to store the shadow in root->rnode directly and free
    the node - which is a leaf node on the shadow node LRU.

    root->rnode
    |
    s

    Without the update callback, the freed node remains on the shadow LRU,
    where it causes later shrinker runs to crash.

    Pass the node updater callback into __radix_tree_delete_node() in case
    the deletion causes the left-most branch in the tree to collapse too.

    Also add warnings when linked nodes are freed right away, rather than
    wait for the use-after-free when the list is scanned much later.

    Fixes: 14b468791fa9 ("mm: workingset: move shadow entry tracking to radix tree exceptional tracking")
    Reported-by: Dave Chinner
    Reported-by: Hugh Dickins
    Reported-by: Andrea Arcangeli
    Reported-and-tested-by: Dave Jones
    Signed-off-by: Johannes Weiner
    Cc: Christoph Hellwig
    Cc: Chris Leech
    Cc: Lee Duncan
    Cc: Jan Kara
    Cc: Kirill A. Shutemov
    Cc: Matthew Wilcox
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Johannes Weiner
     
  • Pull kbuild fix from Michal Marek:
    "The asm-prototypes.h file added in the last merge window results in
    invalid code with CONFIG_KMEMCHECK=y. The net result is that genksyms
    segfaults.

    This pull request fixes the header, the genksyms fix is in my kbuild
    branch for 4.11"

    * 'rc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    asm-prototypes: Clear any CPP defines before declaring the functions

    Linus Torvalds
     

07 Jan, 2017

3 commits

  • Pull VFIO fixes from Alex Williamson:
    - Add mtty sample driver properly into build system (Alex Williamson)
    - Restore type1 mapping performance after mdev (Alex Williamson)
    - Fix mdev device race (Alex Williamson)
    - Cleanups to the mdev ABI used by vendor drivers (Alex Williamson)
    - Build fix for old compilers (Arnd Bergmann)
    - Fix sample driver error path (Dan Carpenter)
    - Handle pci_iomap() error (Arvind Yadav)
    - Fix mdev ioctl return type (Paul Gortmaker)

    * tag 'vfio-v4.10-rc3' of git://github.com/awilliam/linux-vfio:
    vfio-mdev: fix non-standard ioctl return val causing i386 build fail
    vfio-pci: Handle error from pci_iomap
    vfio-mdev: fix some error codes in the sample code
    vfio-pci: use 32-bit comparisons for register address for gcc-4.5
    vfio-mdev: Make mdev_device private and abstract interfaces
    vfio-mdev: Make mdev_parent private
    vfio-mdev: de-polute the namespace, rename parent_device & parent_ops
    vfio-mdev: Fix remove race
    vfio/type1: Restore mapping performance with mdev support
    vfio-mdev: Fix mtty sample driver building

    Linus Torvalds
     
  • Pull swiotlb fixes from Konrad Rzeszutek Wilk:
    "This has one fix to make i915 work when using Xen SWIOTLB, and a
    feature from Geert to aid in debugging of devices that can't do DMA
    outside the 32-bit address space.

    The feature from Geert is on top of v4.10 merge window commit
    (specifically you pulling my previous branch), as his changes were
    dependent on the Documentation/ movement patches.

    I figured it would just easier than me trying than to cherry-pick the
    Documentation patches to satisfy git.

    The patches have been soaking since 12/20, albeit I updated the last
    patch due to linux-next catching an compiler error and adding an
    Tested-and-Reported-by tag"

    * 'stable/for-linus-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/swiotlb:
    swiotlb: Export swiotlb_max_segment to users
    swiotlb: Add swiotlb=noforce debug option
    swiotlb: Convert swiotlb_force from int to enum
    x86, swiotlb: Simplify pci_swiotlb_detect_override()

    Linus Torvalds
     
  • So they can figure out what is the optimal number of pages
    that can be contingously stitched together without fear of
    bounce buffer.

    We also expose an mechanism for sub-users of SWIOTLB API, such
    as Xen-SWIOTLB to set the max segment value. And lastly
    if swiotlb=force is set (which mandates we bounce buffer everything)
    we set max_segment so at least we can bounce buffer one 4K page
    instead of a giant 512KB one for which we may not have space.

    Signed-off-by: Konrad Rzeszutek Wilk
    Reported-and-Tested-by: Juergen Gross

    Konrad Rzeszutek Wilk
     

06 Jan, 2017

2 commits

  • Pull audit fixes from Paul Moore:
    "Two small fixes relating to audit's use of fsnotify.

    The first patch plugs a leak and the second fixes some lock
    shenanigans. The patches are small and I banged on this for an
    afternoon with our testsuite and didn't see anything odd"

    * 'stable-4.10' of git://git.infradead.org/users/pcmoore/audit:
    audit: Fix sleep in atomic
    fsnotify: Remove fsnotify_duplicate_mark()

    Linus Torvalds
     
  • Pull ARM SoC fixes from Arnd Bergmann:
    "This is a rather large set of bugfixes, as we just returned from the
    Christmas break. Most of these are relatively unimportant fixes for
    regressions introduced during the merge window, and about half of the
    changes are for mach-omap2.

    A couple of patches are just cleanups and dead code removal that I
    would not normally have considered for merging after -rc2, but I
    decided to take them along with the fixes this time.

    Notable fixes include:

    - removing the skeleton.dtsi include broke a number of machines, and
    we have to put empty /chosen nodes back to be able to pass kernel
    command lines as before

    - enabling Samsung platforms no longer hardwires CONFIG_HZ to 200, as
    it had been for no good reason for a long time"

    * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (46 commits)
    MAINTAINERS: extend PSCI entry to cover the newly add PSCI checker code
    drivers: psci: annotate timer on stack to silence odebug messages
    ARM64: defconfig: enable DRM_MESON as module
    ARM64: dts: meson-gx: Add Graphic Controller nodes
    ARM64: dts: meson-gxl: fix GPIO include
    ARM: dts: imx6: Disable "weim" node in the dtsi files
    ARM: dts: qcom: apq8064: Add missing scm clock
    ARM: davinci: da8xx: Fix sleeping function called from invalid context
    ARM: davinci: Make __clk_{enable,disable} functions public
    ARM: davinci: da850: don't add emac clock to lookup table twice
    ARM: davinci: da850: fix infinite loop in clk_set_rate()
    ARM: i.MX: remove map_io callback
    ARM: dts: vf610-zii-dev-rev-b: Add missing newline
    ARM: dts: imx6qdl-nitrogen6x: remove duplicate iomux entry
    ARM: dts: imx31: fix AVIC base address
    ARM: dts: am572x-idk: Add gpios property to control PCIE_RESETn
    arm64: dts: vexpress: Support GICC_DIR operations
    ARM: dts: vexpress: Support GICC_DIR operations
    firmware: arm_scpi: fix reading sensor values on pre-1.0 SCPI firmwares
    arm64: dts: msm8996: Add required memory carveouts
    ...

    Linus Torvalds
     

05 Jan, 2017

4 commits

  • The asm-prototypes.h file is used to provide dummy function declarations
    for genksyms, when processing asm files with EXPORT_SYMBOL. Make sure
    that any architecture defines get out of our way. x86 currently has an
    issue with memcpy on 64bit with CONFIG_KMEMCHECK=y and with
    memset/__memset on 32bit:

    $ cat init/test.c
    #include
    $ make -s init/test.o
    In file included from ./arch/x86/include/asm/string.h:4:0,
    from ./include/linux/string.h:18,
    from ./include/linux/bitmap.h:8,
    from ./include/linux/cpumask.h:11,
    from ./arch/x86/include/asm/cpumask.h:4,
    from ./arch/x86/include/asm/msr.h:10,
    from ./arch/x86/include/asm/processor.h:20,
    from ./arch/x86/include/asm/cpufeature.h:4,
    from ./arch/x86/include/asm/thread_info.h:52,
    from ./include/linux/thread_info.h:25,
    from ./arch/x86/include/asm/preempt.h:6,
    from ./include/linux/preempt.h:59,
    from ./include/linux/spinlock.h:50,
    from ./include/linux/seqlock.h:35,
    from ./include/linux/time.h:5,
    from ./include/uapi/linux/timex.h:56,
    from ./include/linux/timex.h:56,
    from ./include/linux/sched.h:19,
    from ./include/linux/uaccess.h:4,
    from ./arch/x86/include/asm/asm-prototypes.h:2,
    from init/test.c:1:
    ./arch/x86/include/asm/string_64.h:52:47: error: expected declaration specifiers or ‘...’ before ‘(’ token
    #define memcpy(dst, src, len) __inline_memcpy((dst), (src), (len))
    ./include/asm-generic/asm-prototypes.h:6:14: note: in expansion of macro ‘memcpy’
    extern void *memcpy(void *, const void *, __kernel_size_t);

    ^
    ...

    During real build, this manifests itself by genksyms segfaulting.

    Fixes: 334bb7738764 ("x86/kbuild: enable modversions for symbols exported from asm")
    Reported-and-tested-by: Borislav Petkov
    Cc: Adam Borowski
    Signed-off-by: Michal Marek

    Michal Marek
     
  • Pull networking fixes from David Miller:

    1) stmmac_drv_probe() can race with stmmac_open() because we register
    the netdevice too early. Fix from Florian Fainelli.

    2) UFO handling in __ip6_append_data() and ip6_finish_output() use
    different tests for deciding whether a frame will be fragmented or
    not, put them in sync. Fix from Zheng Li.

    3) The rtnetlink getstats handlers need to validate that the netlink
    request is large enough, fix from Mathias Krause.

    4) Use after free in mlx4 driver, from Jack Morgenstein.

    5) Fix setting of garbage UID value in sockets during setattr() calls,
    from Eric Biggers.

    6) Packet drop_monitor doesn't format the netlink messages properly
    such that nlmsg_next fails to work, fix from Reiter Wolfgang.

    7) Fix handling of wildcard addresses in l2tp lookups, from Guillaume
    Nault.

    8) __skb_flow_dissect() can crash on pptp packets, from Ian Kumlien.

    9) IGMP code doesn't reset group query timers properly, from Michal
    Tesar.

    10) Fix overzealous MAIN/LOCAL route table combining in ipv4, from
    Alexander Duyck.

    11) vxlan offload check needs to be more strict in be2net driver, from
    Sabrina Dubroca.

    12) Moving l3mdev to packet hooks lost RX stat counters unintentionally,
    fix from David Ahern.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (52 commits)
    sh_eth: enable RX descriptor word 0 shift on SH7734
    sfc: don't report RX hash keys to ethtool when RSS wasn't enabled
    dpaa_eth: Initialize CGR structure before init
    dpaa_eth: cleanup after init_phy() failure
    net: systemport: Pad packet before inserting TSB
    net: systemport: Utilize skb_put_padto()
    LiquidIO VF: s/select/imply/ for PTP_1588_CLOCK
    libcxgb: fix error check for ip6_route_output()
    net: usb: asix_devices: add .reset_resume for USB PM
    net: vrf: Add missing Rx counters
    drop_monitor: consider inserted data in genlmsg_end
    benet: stricter vxlan offloading check in be_features_check
    ipv4: Do not allow MAIN to be alias for new LOCAL w/ custom rules
    net: macb: Updated resource allocation function calls to new version of API.
    net: stmmac: dwmac-oxnas: use generic pm implementation
    net: stmmac: dwmac-oxnas: fix fixed-link-phydev leaks
    net: stmmac: dwmac-oxnas: fix of-node leak
    Documentation/networking: fix typo in mpls-sysctl
    igmp: Make igmp group member RFC 3376 compliant
    flow_dissector: Update pptp handling to avoid null pointer deref.
    ...

    Linus Torvalds
     
  • What appears to be a copy and paste error from the line above gets
    the ioctl a ssize_t return value instead of the traditional "int".

    The associated sample code used "long" which meant it would compile
    for x86-64 but not i386, with the latter failing as follows:

    CC [M] samples/vfio-mdev/mtty.o
    samples/vfio-mdev/mtty.c:1418:20: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
    .ioctl = mtty_ioctl,
    ^
    samples/vfio-mdev/mtty.c:1418:20: note: (near initialization for ‘mdev_fops.ioctl’)
    cc1: some warnings being treated as errors

    Since in this case, vfio is working with struct file_operations; as such:

    long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
    long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

    ...and so here we just standardize on long vs. the normal int that user
    space typically sees and documents as per "man ioctl" and similar.

    Fixes: 9d1a546c53b4 ("docs: Sample driver to demonstrate how to use Mediated device framework.")
    Cc: Kirti Wankhede
    Cc: Neo Jia
    Cc: kvm@vger.kernel.org
    Signed-off-by: Paul Gortmaker
    Signed-off-by: Alex Williamson

    Paul Gortmaker
     
  • Pull block layer fixes from Jens Axboe:
    "A set of fixes for the current series, one fixing a regression with
    block size < page cache size in the alias series from Jan. Outside of
    that, two small cleanups for wbt from Bart, a nvme pull request from
    Christoph, and a few small fixes of documentation updates"

    * 'for-linus' of git://git.kernel.dk/linux-block:
    block: fix up io_poll documentation
    block: Avoid that sparse complains about context imbalance in __wbt_wait()
    block: Make wbt_wait() definition consistent with declaration
    clean_bdev_aliases: Prevent cleaning blocks that are not in block range
    genhd: remove dead and duplicated scsi code
    block: add back plugging in __blkdev_direct_IO
    nvmet/fcloop: remove some logically dead code performing redundant ret checks
    nvmet: fix KATO offset in Set Features
    nvme/fc: simplify error handling of nvme_fc_create_hw_io_queues
    nvme/fc: correct some printk information
    nvme/scsi: Remove START STOP emulation
    nvme/pci: Delete misleading queue-wrap comment
    nvme/pci: Fix whitespace problem
    nvme: simplify stripe quirk
    nvme: update maintainers information

    Linus Torvalds
     

04 Jan, 2017

1 commit

  • …l/git/tmlind/linux-omap into fixes

    Pull "omap fixes for v4.10-rc cycle" from Tony Lindgren:

    Fist set of fixes for omaps for v4.10-rc cycle, mostly
    to deal with various regressions noticed during the merge
    window and to fix various device tree configurations for
    boards. Also included is removal of mach-omap2/gpio.c that
    is now dead code with device tree based booting that should
    be OK for the early -rc cycle:

    - A series of fixes to add empty chosen node to fix regressions
    caused for bootloaders that don't create chosen node as the
    decompressor needs the chosen node to merge command line and
    ATAGs into it

    - Fix missing logicpd-som-lv-37xx-devkit.dtb entry in Makefile

    - Fix regression for am437x timers

    - Fix wrong strcat for non-NULL terminated string

    - A series of changes to fix tps65217 interrupts to not use
    defines as we don't do that for interrupts

    - Two patches to fix USB VBUS detection on am57xx-idk and force it
    to peripheral mode until dwc3 role detection is working

    - Add missing dra72-evm-tps65917 missing voltage supplies
    accidentally left out of an earlier patch

    - Fix n900 eMMC detection when booted on qemu

    - Remove unwanted pr_err on failed memory allocation for
    prm_common.c

    - Remove legacy mach-omap2/gpio.c that now is dead code
    since we boot mach-omap2 in device tree only mode

    - Fix am572x-idk pcie1 by adding the missing gpio reset pin

    * tag 'omap-for-v4.10/fixes-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (23 commits)
    ARM: dts: am572x-idk: Add gpios property to control PCIE_RESETn
    ARM: OMAP2+: PRM: Delete an error message for a failed memory allocation
    ARM: dts: n900: Mark eMMC slot with no-sdio and no-sd flags
    ARM: dts: dra72-evm-tps65917: Add voltage supplies to usb_phy, mmc, dss
    ARM: dts: am57xx-idk: Put USB2 port in peripheral mode
    ARM: dts: am57xx-idk: Support VBUS detection on USB2 port
    dt-bindings: input: Specify the interrupt number of TPS65217 power button
    dt-bindings: power/supply: Update TPS65217 properties
    dt-bindings: mfd: Remove TPS65217 interrupts
    ARM: dts: am335x: Fix the interrupt name of TPS65217
    ARM: omap2+: fixing wrong strcat for Non-NULL terminated string
    ARM: omap2+: am437x: rollback to use omap3_gptimer_timer_init()
    ARM: dts: omap3: Add DTS for Logic PD SOM-LV 37xx Dev Kit
    ARM: dts: dra7: Add an empty chosen node to top level DTSI
    ARM: dts: dm816x: Add an empty chosen node to top level DTSI
    ARM: dts: dm814x: Add an empty chosen node to top level DTSI
    ARM: dts: am4372: Add an empty chosen node to top level DTSI
    ARM: dts: am33xx: Add an empty chosen node to top level DTSI
    ARM: dts: omap5: Add an empty chosen node to top level DTSI
    ARM: dts: omap4: Add an empty chosen node to top level DTSI
    ...

    Arnd Bergmann
     

02 Jan, 2017

3 commits

  • …/jic23/iio into staging-linus

    Jonathan writes:

    First round of IIO fixes for the 4.10 cycle.

    * 104-quad-8
    - Fix selecting wrong register when the index control register is desired.
    - Fix an off by one error when addressing the input/output control register.
    - Fix inverted logic on the active high / low control
    * bmi160
    - Sleep for worst case rather than best case amount of time after cmd
    execution begins.
    * max44000
    - typo fix in illuminance_integration_time_available listing.
    * st-sensors
    - Fix channel data passing. This one took a while to get tested on 24bit
    parts. Definitely one for stable asap as the bug broke quite a few parts.
    - lis3lv02 needs a data alignment bit set and the scaling was wrong.
    * ti_am335x
    - depend on HAS_DMA

    Greg Kroah-Hartman
     
  • When FUNCTIONFS_EVENTFD flag is set, __ffs_data_got_descs reads a 32bits,
    little-endian value right after the fixed structure header, and passes it
    to eventfd_ctx_fdget. Document this.

    Also, rephrase a comment to be affirmative about the role of string
    descriptor at index 0. Ref: USB 2.0 spec paragraph "9.6.7 String", and
    also checked to still be current in USB 3.0 spec paragraph "9.6.9 String".

    Signed-off-by: Vincent Pelletier
    Signed-off-by: Felipe Balbi

    Vincent Pelletier
     
  • Pull DAX updates from Dan Williams:
    "The completion of Jan's DAX work for 4.10.

    As I mentioned in the libnvdimm-for-4.10 pull request, these are some
    final fixes for the DAX dirty-cacheline-tracking invalidation work
    that was merged through the -mm, ext4, and xfs trees in -rc1. These
    patches were prepared prior to the merge window, but we waited for
    4.10-rc1 to have a stable merge base after all the prerequisites were
    merged.

    Quoting Jan on the overall changes in these patches:

    "So I'd like all these 6 patches to go for rc2. The first three
    patches fix invalidation of exceptional DAX entries (a bug which
    is there for a long time) - without these patches data loss can
    occur on power failure even though user called fsync(2). The other
    three patches change locking of DAX faults so that ->iomap_begin()
    is called in a more relaxed locking context and we are safe to
    start a transaction there for ext4"

    These have received a build success notification from the kbuild
    robot, and pass the latest libnvdimm unit tests. There have not been
    any -next releases since -rc1, so they have not appeared there"

    * 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
    ext4: Simplify DAX fault path
    dax: Call ->iomap_begin without entry lock during dax fault
    dax: Finish fault completely when loading holes
    dax: Avoid page invalidation races and unnecessary radix tree traversals
    mm: Invalidate DAX radix tree entries only if appropriate
    ext2: Return BH_New buffers for zeroed blocks

    Linus Torvalds
     

31 Dec, 2016

1 commit

  • The LIS3LV02 has a special bit that need to be set to get the
    read values left aligned. Before this patch we get gibberish
    like this:

    iio_generic_buffer -a -c10 -n lis3lv02dl_accel
    (...)
    0.000000 -0.010042 -0.642688 19155832931907
    0.000000 -0.010042 -0.642688 19155858751073

    Which is because we read a raw value for 1g as 64 which is
    the nominal 1024 for 1g shifted 4 bits to the left by being
    right-aligned rather than left aligned.

    Since all other sensors are left aligned, add some code to
    set the special DAS (data alignment setting) bit to 1 so that
    the right value is now read like this:

    iio_generic_buffer -a -c10 -n lis3lv02dl_accel
    (...)
    0.000000 -0.147095 -10.120135 24761614364956
    -0.029419 -0.176514 -10.120135 24761631624540

    The scaling was weird as well: we have a gain of 1000 for 1g
    and 3000 for 6g. I don't even remember how I came up with the
    old values but they are wrong.

    Fixes: 3acddf74f807 ("iio: st-sensors: add support for lis3lv02d accelerometer")
    Cc: Lorenzo Bianconi
    Cc: Giuseppe Barba
    Cc: Denis Ciocca
    Signed-off-by: Linus Walleij
    Signed-off-by: Jonathan Cameron

    Linus Walleij
     

30 Dec, 2016

5 commits

  • Abstract access to mdev_device so that we can define which interfaces
    are public rather than relying on comments in the structure.

    Cc: Zhenyu Wang
    Cc: Zhi Wang
    Signed-off-by: Alex Williamson
    Reviewed-by: Jike Song
    Reviewed by: Kirti Wankhede

    Alex Williamson
     
  • Rather than hoping for good behavior by marking some elements
    internal, enforce it by making the entire structure private and
    creating an accessor function for the one useful external field.

    Cc: Zhenyu Wang
    Cc: Zhi Wang
    Cc: Jike Song
    Signed-off-by: Alex Williamson
    Reviewed by: Kirti Wankhede

    Alex Williamson
     
  • Add an mdev_ prefix so we're not poluting the namespace so much.

    Cc: Zhenyu Wang
    Cc: Zhi Wang
    Cc: Jike Song
    Signed-off-by: Alex Williamson
    Reviewed by: Kirti Wankhede

    Alex Williamson
     
  • Demoting simple flow steering rule priority (for DPDK) was achieved by
    wrapping FW commands MLX4_QP_FLOW_STEERING_ATTACH/DETACH for the PF
    as well, and forcing the priority to MLX4_DOMAIN_NIC in the wrapper
    function for the PF and all VFs.

    In function mlx4_ib_create_flow(), this change caused the main rule
    creation for the PF to be wrapped, while it left the associated
    tunnel steering rule creation unwrapped for the PF.

    This mismatch caused rule deletion failures in mlx4_ib_destroy_flow()
    for the PF when the detach wrapper function did not find the associated
    tunnel-steering rule (since creation of that rule for the PF did not
    go through the wrapper function).

    Fix this by setting MLX4_QP_FLOW_STEERING_ATTACH/DETACH to be "native"
    (so that the PF invocation does not go through the wrapper), and perform
    the required priority demotion for the PF in the mlx4_ib_create_flow()
    code path.

    Fixes: 48564135cba8 ("net/mlx4_core: Demote simple multicast and broadcast flow steering rules")
    Signed-off-by: Jack Morgenstein
    Signed-off-by: Tariq Toukan
    Signed-off-by: David S. Miller

    Jack Morgenstein
     
  • In commit 62906027091f ("mm: add PageWaiters indicating tasks are
    waiting for a page bit") Nick Piggin made our page locking no longer
    unconditionally touch the hashed page waitqueue, which not only helps
    performance in general, but is particularly helpful on NUMA machines
    where the hashed wait queues can bounce around a lot.

    However, the "clear lock bit atomically and then test the waiters bit"
    sequence turns out to be much more expensive than it needs to be,
    because you get a nasty stall when trying to access the same word that
    just got updated atomically.

    On architectures where locking is done with LL/SC, this would be trivial
    to fix with a new primitive that clears one bit and tests another
    atomically, but that ends up not working on x86, where the only atomic
    operations that return the result end up being cmpxchg and xadd. The
    atomic bit operations return the old value of the same bit we changed,
    not the value of an unrelated bit.

    On x86, we could put the lock bit in the high bit of the byte, and use
    "xadd" with that bit (where the overflow ends up not touching other
    bits), and look at the other bits of the result. However, an even
    simpler model is to just use a regular atomic "and" to clear the lock
    bit, and then the sign bit in eflags will indicate the resulting state
    of the unrelated bit #7.

    So by moving the PageWaiters bit up to bit #7, we can atomically clear
    the lock bit and test the waiters bit on x86 too. And architectures
    with LL/SC (which is all the usual RISC suspects), the particular bit
    doesn't matter, so they are fine with this approach too.

    This avoids the extra access to the same atomic word, and thus avoids
    the costly stall at page unlock time.

    The only downside is that the interface ends up being a bit odd and
    specialized: clear a bit in a byte, and test the sign bit. Nick doesn't
    love the resulting name of the new primitive, but I'd rather make the
    name be descriptive and very clear about the limitation imposed by
    trying to work across all relevant architectures than make it be some
    generic thing that doesn't make the odd semantics explicit.

    So this introduces the new architecture primitive

    clear_bit_unlock_is_negative_byte();

    and adds the trivial implementation for x86. We have a generic
    non-optimized fallback (that just does a "clear_bit()"+"test_bit(7)"
    combination) which can be overridden by any architecture that can do
    better. According to Nick, Power has the same hickup x86 has, for
    example, but some other architectures may not even care.

    All these optimizations mean that my page locking stress-test (which is
    just executing a lot of small short-lived shell scripts: "make test" in
    the git source tree) no longer makes our page locking look horribly bad.
    Before all these optimizations, just the unlock_page() costs were just
    over 3% of all CPU overhead on "make test". After this, it's down to
    0.66%, so just a quarter of the cost it used to be.

    (The difference on NUMA is bigger, but there this micro-optimization is
    likely less noticeable, since the big issue on NUMA was not the accesses
    to 'struct page', but the waitqueue accesses that were already removed
    by Nick's earlier commit).

    Acked-by: Nick Piggin
    Cc: Dave Hansen
    Cc: Bob Peterson
    Cc: Steven Whitehouse
    Cc: Andrew Lutomirski
    Cc: Andreas Gruenbacher
    Cc: Peter Zijlstra
    Cc: Mel Gorman
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

29 Dec, 2016

1 commit


28 Dec, 2016

4 commits

  • Pull networking fixes from David Miller:

    1) Various ipvlan fixes from Eric Dumazet and Mahesh Bandewar.

    The most important is to not assume the packet is RX just because
    the destination address matches that of the device. Such an
    assumption causes problems when an interface is put into loopback
    mode.

    2) If we retry when creating a new tc entry (because we dropped the
    RTNL mutex in order to load a module, for example) we end up with
    -EAGAIN and then loop trying to replay the request. But we didn't
    reset some state when looping back to the top like this, and if
    another thread meanwhile inserted the same tc entry we were trying
    to, we re-link it creating an enless loop in the tc chain. Fix from
    Daniel Borkmann.

    3) There are two different WRITE bits in the MDIO address register for
    the stmmac chip, depending upon the chip variant. Due to a bug we
    could set them both, fix from Hock Leong Kweh.

    4) Fix mlx4 bug in XDP_TX handling, from Tariq Toukan.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
    net: stmmac: fix incorrect bit set in gmac4 mdio addr register
    r8169: add support for RTL8168 series add-on card.
    net: xdp: remove unused bfp_warn_invalid_xdp_buffer()
    openvswitch: upcall: Fix vlan handling.
    ipv4: Namespaceify tcp_tw_reuse knob
    net: korina: Fix NAPI versus resources freeing
    net, sched: fix soft lockup in tc_classify
    net/mlx4_en: Fix user prio field in XDP forward
    tipc: don't send FIN message from connectionless socket
    ipvlan: fix multicast processing
    ipvlan: fix various issues in ipvlan_process_multicast()

    Linus Torvalds
     
  • Interrupt numbers are from the datasheet, so no need to keep them in
    the ABI. Use the number in the DT file.

    Signed-off-by: Milo Kim
    Acked-by: Rob Herring
    Signed-off-by: Tony Lindgren

    Milo Kim
     
  • After commit 73b62bd085f4737679ea9afc7867fa5f99ba7d1b ("virtio-net:
    remove the warning before XDP linearizing"), there's no users for
    bpf_warn_invalid_xdp_buffer(), so remove it. This is a revert for
    commit f23bc46c30ca5ef58b8549434899fcbac41b2cfc.

    Cc: Daniel Borkmann
    Cc: John Fastabend
    Signed-off-by: Jason Wang
    Acked-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Jason Wang
     
  • Different namespaces might have different requirements to reuse
    TIME-WAIT sockets for new connections. This might be required in
    cases where different namespace applications are in place which
    require TIME_WAIT socket connections to be reduced independently
    of the host.

    Signed-off-by: Haishuang Yan
    Signed-off-by: David S. Miller

    Haishuang Yan
     

27 Dec, 2016

1 commit

  • Currently invalidate_inode_pages2_range() and invalidate_mapping_pages()
    just delete all exceptional radix tree entries they find. For DAX this
    is not desirable as we track cache dirtiness in these entries and when
    they are evicted, we may not flush caches although it is necessary. This
    can for example manifest when we write to the same block both via mmap
    and via write(2) (to different offsets) and fsync(2) then does not
    properly flush CPU caches when modification via write(2) was the last
    one.

    Create appropriate DAX functions to handle invalidation of DAX entries
    for invalidate_inode_pages2_range() and invalidate_mapping_pages() and
    wire them up into the corresponding mm functions.

    Acked-by: Johannes Weiner
    Reviewed-by: Ross Zwisler
    Signed-off-by: Jan Kara
    Signed-off-by: Dan Williams

    Jan Kara
     

26 Dec, 2016

7 commits

  • Pull timer type cleanups from Thomas Gleixner:
    "This series does a tree wide cleanup of types related to
    timers/timekeeping.

    - Get rid of cycles_t and use a plain u64. The type is not really
    helpful and caused more confusion than clarity

    - Get rid of the ktime union. The union has become useless as we use
    the scalar nanoseconds storage unconditionally now. The 32bit
    timespec alike storage got removed due to the Y2038 limitations
    some time ago.

    That leaves the odd union access around for no reason. Clean it up.

    Both changes have been done with coccinelle and a small amount of
    manual mopping up"

    * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    ktime: Get rid of ktime_equal()
    ktime: Cleanup ktime_set() usage
    ktime: Get rid of the union
    clocksource: Use a plain u64 instead of cycle_t

    Linus Torvalds
     
  • Pull SMP hotplug notifier removal from Thomas Gleixner:
    "This is the final cleanup of the hotplug notifier infrastructure. The
    series has been reintgrated in the last two days because there came a
    new driver using the old infrastructure via the SCSI tree.

    Summary:

    - convert the last leftover drivers utilizing notifiers

    - fixup for a completely broken hotplug user

    - prevent setup of already used states

    - removal of the notifiers

    - treewide cleanup of hotplug state names

    - consolidation of state space

    There is a sphinx based documentation pending, but that needs review
    from the documentation folks"

    * 'smp-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    irqchip/armada-xp: Consolidate hotplug state space
    irqchip/gic: Consolidate hotplug state space
    coresight/etm3/4x: Consolidate hotplug state space
    cpu/hotplug: Cleanup state names
    cpu/hotplug: Remove obsolete cpu hotplug register/unregister functions
    staging/lustre/libcfs: Convert to hotplug state machine
    scsi/bnx2i: Convert to hotplug state machine
    scsi/bnx2fc: Convert to hotplug state machine
    cpu/hotplug: Prevent overwriting of callbacks
    x86/msr: Remove bogus cleanup from the error path
    bus: arm-ccn: Prevent hotplug callback leak
    perf/x86/intel/cstate: Prevent hotplug callback leak
    ARM/imx/mmcd: Fix broken cpu hotplug handling
    scsi: qedi: Convert to hotplug state machine

    Linus Torvalds
     
  • Add a new page flag, PageWaiters, to indicate the page waitqueue has
    tasks waiting. This can be tested rather than testing waitqueue_active
    which requires another cacheline load.

    This bit is always set when the page has tasks on page_waitqueue(page),
    and is set and cleared under the waitqueue lock. It may be set when
    there are no tasks on the waitqueue, which will cause a harmless extra
    wakeup check that will clears the bit.

    The generic bit-waitqueue infrastructure is no longer used for pages.
    Instead, waitqueues are used directly with a custom key type. The
    generic code was not flexible enough to have PageWaiters manipulation
    under the waitqueue lock (which simplifies concurrency).

    This improves the performance of page lock intensive microbenchmarks by
    2-3%.

    Putting two bits in the same word opens the opportunity to remove the
    memory barrier between clearing the lock bit and testing the waiters
    bit, after some work on the arch primitives (e.g., ensuring memory
    operand widths match and cover both bits).

    Signed-off-by: Nicholas Piggin
    Cc: Dave Hansen
    Cc: Bob Peterson
    Cc: Steven Whitehouse
    Cc: Andrew Lutomirski
    Cc: Andreas Gruenbacher
    Cc: Peter Zijlstra
    Cc: Mel Gorman
    Signed-off-by: Linus Torvalds

    Nicholas Piggin
     
  • A page is not added to the swap cache without being swap backed,
    so PageSwapBacked mappings can use PG_owner_priv_1 for PageSwapCache.

    Signed-off-by: Nicholas Piggin
    Acked-by: Hugh Dickins
    Cc: Dave Hansen
    Cc: Bob Peterson
    Cc: Steven Whitehouse
    Cc: Andrew Lutomirski
    Cc: Andreas Gruenbacher
    Cc: Peter Zijlstra
    Cc: Mel Gorman
    Signed-off-by: Linus Torvalds

    Nicholas Piggin
     
  • No point in going through loops and hoops instead of just comparing the
    values.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra

    Thomas Gleixner
     
  • ktime_set(S,N) was required for the timespec storage type and is still
    useful for situations where a Seconds and Nanoseconds part of a time value
    needs to be converted. For anything where the Seconds argument is 0, this
    is pointless and can be replaced with a simple assignment.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra

    Thomas Gleixner
     
  • ktime is a union because the initial implementation stored the time in
    scalar nanoseconds on 64 bit machine and in a endianess optimized timespec
    variant for 32bit machines. The Y2038 cleanup removed the timespec variant
    and switched everything to scalar nanoseconds. The union remained, but
    become completely pointless.

    Get rid of the union and just keep ktime_t as simple typedef of type s64.

    The conversion was done with coccinelle and some manual mopping up.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra

    Thomas Gleixner
     

25 Dec, 2016

4 commits

  • There is no point in having an extra type for extra confusion. u64 is
    unambiguous.

    Conversion was done with the following coccinelle script:

    @rem@
    @@
    -typedef u64 cycle_t;

    @fix@
    typedef cycle_t;
    @@
    -cycle_t
    +u64

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: John Stultz

    Thomas Gleixner
     
  • The mpic is either the main interrupt controller or is cascaded behind a
    GIC. The mpic is single instance and the modes are mutually exclusive, so
    there is no reason to have seperate cpu hotplug states.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Thomas Petazzoni
    Cc: Sebastian Siewior
    Cc: Marc Zyngier
    Link: http://lkml.kernel.org/r/20161221192112.333161745@linutronix.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • Even if both drivers are compiled in only one instance can run on a given
    system depending on the available GIC version.

    So having seperate hotplug states for them is pointless.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Marc Zyngier
    Cc: Sebastian Siewior
    Link: http://lkml.kernel.org/r/20161221192112.252416267@linutronix.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • Even if both drivers are compiled in only one instance can run on a given
    system depending on the available tracer cell.

    So having seperate hotplug states for them is pointless.

    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Sebastian Siewior
    Cc: Mathieu Poirier
    Link: http://lkml.kernel.org/r/20161221192112.162765484@linutronix.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner