02 Mar, 2016

3 commits


29 Feb, 2016

1 commit


28 Feb, 2016

29 commits

  • Pull perf fixes from Thomas Gleixner:
    "A rather largish series of 12 patches addressing a maze of race
    conditions in the perf core code from Peter Zijlstra"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf: Robustify task_function_call()
    perf: Fix scaling vs. perf_install_in_context()
    perf: Fix scaling vs. perf_event_enable()
    perf: Fix scaling vs. perf_event_enable_on_exec()
    perf: Fix ctx time tracking by introducing EVENT_TIME
    perf: Cure event->pending_disable race
    perf: Fix race between event install and jump_labels
    perf: Fix cloning
    perf: Only update context time when active
    perf: Allow perf_release() with !event->ctx
    perf: Do not double free
    perf: Close install vs. exit race

    Linus Torvalds
     
  • Pull x86 fixes from Thomas Gleixner:
    "This update contains:

    - Hopefully the last ASM CLAC fixups

    - A fix for the Quark family related to the IMR lock which makes
    kexec work again

    - A off-by-one fix in the MPX code. Ironic, isn't it?

    - A fix for X86_PAE which addresses once more an unsigned long vs
    phys_addr_t hickup"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/mpx: Fix off-by-one comparison with nr_registers
    x86/mm: Fix slow_virt_to_phys() for X86_PAE again
    x86/entry/compat: Add missing CLAC to entry_INT80_32
    x86/entry/32: Add an ASM_CLAC to entry_SYSENTER_32
    x86/platform/intel/quark: Change the kernel's IMR lock bit to false

    Linus Torvalds
     
  • Pull scheduler fixlet from Thomas Gleixner:
    "A trivial printk typo fix"

    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    sched/deadline: Fix trivial typo in printk() message

    Linus Torvalds
     
  • Pull irq fixes from Thomas Gleixner:
    "Four small fixes for irqchip drivers:

    - Add missing low level irq handler initialization on mxs, so
    interrupts can acutally be delivered

    - Add a missing barrier to the GIC driver

    - Two fixes for the GIC-V3-ITS driver, addressing a double EOI write
    and a cache flush beyond the actual region"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    irqchip/gic-v3: Add missing barrier to 32bit version of gic_read_iar()
    irqchip/mxs: Add missing set_handle_irq()
    irqchip/gicv3-its: Avoid cache flush beyond ITS_BASERn memory size
    irqchip/gic-v3-its: Fix double ICC_EOIR write for LPI in EOImode==1

    Linus Torvalds
     
  • Pull staging/android fix from Greg KH:
    "Here is one patch, for the android binder driver, to resolve a
    reported problem. Turns out it has been around for a while (since
    3.15), so it is good to finally get it resolved.

    It has been in linux-next for a while with no reported issues"

    * tag 'staging-4.5-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
    drivers: android: correct the size of struct binder_uintptr_t for BC_DEAD_BINDER_DONE

    Linus Torvalds
     
  • Pull USB fixes from Greg KH:
    "Here are a few USB fixes for 4.5-rc6

    They fix a reported bug for some USB 3 devices by reverting the recent
    patch, a MAINTAINERS change for some drivers, some new device ids, and
    of course, the usual bunch of USB gadget driver fixes.

    All have been in linux-next for a while with no reported issues"

    * tag 'usb-4.5-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
    MAINTAINERS: drop OMAP USB and MUSB maintainership
    usb: musb: fix DMA for host mode
    usb: phy: msm: Trigger USB state detection work in DRD mode
    usb: gadget: net2280: fix endpoint max packet for super speed connections
    usb: gadget: gadgetfs: unregister gadget only if it got successfully registered
    usb: gadget: remove driver from pending list on probe error
    Revert "usb: hub: do not clear BOS field during reset device"
    usb: chipidea: fix return value check in ci_hdrc_pci_probe()
    usb: chipidea: error on overflow for port_test_write
    USB: option: add "4G LTE usb-modem U901"
    USB: cp210x: add IDs for GE B650V3 and B850V3 boards
    USB: option: add support for SIM7100E
    usb: musb: Fix DMA desired mode for Mentor DMA engine
    usb: gadget: fsl_qe_udc: fix IS_ERR_VALUE usage
    usb: dwc2: USB_DWC2 should depend on HAS_DMA
    usb: dwc2: host: fix the data toggle error in full speed descriptor dma
    usb: dwc2: host: fix logical omissions in dwc2_process_non_isoc_desc
    usb: dwc3: Fix assignment of EP transfer resources
    usb: dwc2: Add extra delay when forcing dr_mode

    Linus Torvalds
     
  • Pull vfs fixes from Al Viro.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    do_last(): ELOOP failure exit should be done after leaving RCU mode
    should_follow_link(): validate ->d_seq after having decided to follow
    namei: ->d_inode of a pinned dentry is stable only for positives
    do_last(): don't let a bogus return value from ->open() et.al. to confuse us
    fs: return -EOPNOTSUPP if clone is not supported
    hpfs: don't truncate the file when delete fails

    Linus Torvalds
     
  • Pull ARM SoC fixes from Olof Johansson:
    "We didn't have a batch last week, so this one is slightly larger.

    None of them are scary though, a handful of fixes for small DT pieces,
    replacing properties with newer conventions.

    Highlights:
    - N900 fix for setting system revision
    - onenand init fix to avoid filesystem corruption
    - Clock fix for audio on Beaglebone-x15
    - Fixes on shmobile to deal with CONFIG_DEBUG_RODATA (default y in 4.6)

    + misc smaller stuff"

    * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
    MAINTAINERS: Extend info, add wiki and ml for meson arch
    MAINTAINERS: alpine: add a new maintainer and update the entry
    ARM: at91/dt: fix typo in sama5d2 pinmux descriptions
    ARM: OMAP2+: Fix onenand initialization to avoid filesystem corruption
    Revert "regulator: tps65217: remove tps65217.dtsi file"
    ARM: shmobile: Remove shmobile_boot_arg
    ARM: shmobile: Move shmobile_smp_{mpidr, fn, arg}[] from .text to .bss
    ARM: shmobile: r8a7779: Remove remainings of removed SCU boot setup code
    ARM: shmobile: Move shmobile_scu_base from .text to .bss
    ARM: OMAP2+: Fix omap_device for module reload on PM runtime forbid
    ARM: OMAP2+: Improve omap_device error for driver writers
    ARM: DTS: am57xx-beagle-x15: Select SYS_CLK2 for audio clocks
    ARM: dts: am335x/am57xx: replace gpio-key,wakeup with wakeup-source property
    ARM: OMAP2+: Set system_rev from ATAGS for n900
    ARM: dts: orion5x: fix the missing mtd flash on linkstation lswtgl
    ARM: dts: kirkwood: use unique machine name for ds112
    ARM: dts: imx6: remove bogus interrupt-parent from CAAM node

    Linus Torvalds
     
  • ... or we risk seeing a bogus value of d_is_symlink() there.

    Cc: stable@vger.kernel.org # v4.2+
    Signed-off-by: Al Viro

    Al Viro
     
  • ... otherwise d_is_symlink() above might have nothing to do with
    the inode value we've got.

    Cc: stable@vger.kernel.org # v4.2+
    Signed-off-by: Al Viro

    Al Viro
     
  • both do_last() and walk_component() risk picking a NULL inode out
    of dentry about to become positive, *then* checking its flags and
    seeing that it's not negative anymore and using (already stale by
    then) value they'd fetched earlier. Usually ends up oopsing soon
    after that...

    Cc: stable@vger.kernel.org # v3.13+
    Signed-off-by: Al Viro

    Al Viro
     
  • ... into returning a positive to path_openat(), which would interpret that
    as "symlink had been encountered" and proceed to corrupt memory, etc.
    It can only happen due to a bug in some ->open() instance or in some LSM
    hook, etc., so we report any such event *and* make sure it doesn't trick
    us into further unpleasantness.

    Cc: stable@vger.kernel.org # v3.6+, at least
    Signed-off-by: Al Viro

    Al Viro
     
  • -EBADF is a rather confusing error if an operations is not supported,
    and nfsd gets rather upset about it.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     
  • The delete opration can allocate additional space on the HPFS filesystem
    due to btree split. The HPFS driver checks in advance if there is
    available space, so that it won't corrupt the btree if we run out of space
    during splitting.

    If there is not enough available space, the HPFS driver attempted to
    truncate the file, but this results in a deadlock since the commit
    7dd29d8d865efdb00c0542a5d2c87af8c52ea6c7 ("HPFS: Introduce a global mutex
    and lock it on every callback from VFS").

    This patch removes the code that tries to truncate the file and -ENOSPC is
    returned instead. If the user hits -ENOSPC on delete, he should try to
    delete other files (that are stored in a leaf btree node), so that the
    delete operation will make some space for deleting the file stored in
    non-leaf btree node.

    Reported-by: Al Viro
    Signed-off-by: Mikulas Patocka
    Cc: stable@vger.kernel.org # 2.6.39+
    Signed-off-by: Al Viro

    Mikulas Patocka
     
  • Merge fixes from Andrew Morton:
    "10 fixes"

    * emailed patches from Andrew Morton :
    dax: move writeback calls into the filesystems
    dax: give DAX clearing code correct bdev
    ext4: online defrag not supported with DAX
    ext2, ext4: only set S_DAX for regular inodes
    block: disable block device DAX by default
    ocfs2: unlock inode if deleting inode from orphan fails
    mm: ASLR: use get_random_long()
    drivers: char: random: add get_random_long()
    mm: numa: quickly fail allocations for NUMA balancing on full nodes
    mm: thp: fix SMP race condition between THP page fault and MADV_DONTNEED

    Linus Torvalds
     
  • Pull ext2/4 DAX fix from Ted Ts'o:
    "This fixes a file system corruption bug with DAX"

    * tag 'tags/ext4_for_linus_stable' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
    ext2, ext4: fix issue with missing journal entry in ext4_dax_mkwrite()

    Linus Torvalds
     
  • Pull PCI fixes from Bjorn Helgaas:
    "Enumeration:
    Revert x86 pcibios_alloc_irq() to fix regression (Bjorn Helgaas)

    Marvell MVEBU host bridge driver:
    Restrict build to 32-bit ARM (Thierry Reding)"

    * tag 'pci-v4.5-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
    PCI: mvebu: Restrict build to 32-bit ARM
    Revert "PCI, x86: Implement pcibios_alloc_irq() and pcibios_free_irq()"
    Revert "PCI: Add helpers to manage pci_dev->irq and pci_dev->irq_managed"
    Revert "x86/PCI: Don't alloc pcibios-irq when MSI is enabled"

    Linus Torvalds
     
  • As it is currently written ext4_dax_mkwrite() assumes that the call into
    __dax_mkwrite() will not have to do a block allocation so it doesn't create
    a journal entry. For a read that creates a zero page to cover a hole
    followed by a write that actually allocates storage this is incorrect. The
    ext4_dax_mkwrite() -> __dax_mkwrite() -> __dax_fault() path calls
    get_blocks() to allocate storage.

    Fix this by having the ->page_mkwrite fault handler call ext4_dax_fault()
    as this function already has all the logic needed to allocate a journal
    entry and call __dax_fault().

    Also update the ext2 fault handlers in this same way to remove duplicate
    code and keep the logic between ext2 and ext4 the same.

    Reviewed-by: Jan Kara
    Signed-off-by: Ross Zwisler
    Signed-off-by: Theodore Ts'o

    Ross Zwisler
     
  • Pull clk fix from Stephen Boyd:
    "One small fix to keep OMAP platforms working across a suspend/resume
    cycle"

    * tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
    clk: ti: omap3+: dpll: use non-locking version of clk_get_rate

    Linus Torvalds
     
  • Previously calls to dax_writeback_mapping_range() for all DAX filesystems
    (ext2, ext4 & xfs) were centralized in filemap_write_and_wait_range().

    dax_writeback_mapping_range() needs a struct block_device, and it used
    to get that from inode->i_sb->s_bdev. This is correct for normal inodes
    mounted on ext2, ext4 and XFS filesystems, but is incorrect for DAX raw
    block devices and for XFS real-time files.

    Instead, call dax_writeback_mapping_range() directly from the filesystem
    ->writepages function so that it can supply us with a valid block
    device. This also fixes DAX code to properly flush caches in response
    to sync(2).

    Signed-off-by: Ross Zwisler
    Signed-off-by: Jan Kara
    Cc: Al Viro
    Cc: Dan Williams
    Cc: Dave Chinner
    Cc: Jens Axboe
    Cc: Matthew Wilcox
    Cc: Theodore Ts'o
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ross Zwisler
     
  • dax_clear_blocks() needs a valid struct block_device and previously it
    was using inode->i_sb->s_bdev in all cases. This is correct for normal
    inodes on mounted ext2, ext4 and XFS filesystems, but is incorrect for
    DAX raw block devices and for XFS real-time devices.

    Instead, rename dax_clear_blocks() to dax_clear_sectors(), and change
    its arguments to take a bdev and a sector instead of an inode and a
    block. This better reflects what the function does, and it allows the
    filesystem and raw block device code to pass in an appropriate struct
    block_device.

    Signed-off-by: Ross Zwisler
    Suggested-by: Dan Williams
    Reviewed-by: Jan Kara
    Cc: Theodore Ts'o
    Cc: Al Viro
    Cc: Dave Chinner
    Cc: Jens Axboe
    Cc: Matthew Wilcox
    Cc: Ross Zwisler
    Cc: Theodore Ts'o
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ross Zwisler
     
  • Online defrag operations for ext4 are hard coded to use the page cache.
    See ext4_ioctl() -> ext4_move_extents() -> move_extent_per_page()

    When combined with DAX I/O, which circumvents the page cache, this can
    result in data corruption. This was observed with xfstests ext4/307 and
    ext4/308.

    Fix this by only allowing online defrag for non-DAX files.

    Signed-off-by: Ross Zwisler
    Reviewed-by: Jan Kara
    Cc: Theodore Ts'o
    Cc: Al Viro
    Cc: Dan Williams
    Cc: Dave Chinner
    Cc: Jens Axboe
    Cc: Matthew Wilcox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ross Zwisler
     
  • When S_DAX is set on an inode we assume that if there are pages attached
    to the mapping (mapping->nrpages != 0), those pages are clean zero pages
    that were used to service reads from holes. Any dirty data associated
    with the inode should be in the form of DAX exceptional entries
    (mapping->nrexceptional) that is written back via
    dax_writeback_mapping_range().

    With the current code, though, this isn't always true. For example,
    ext2 and ext4 directory inodes can have S_DAX set, but have their dirty
    data stored as dirty page cache entries. For these types of inodes,
    having S_DAX set doesn't really make sense since their I/O doesn't
    actually happen through the DAX code path.

    Instead, only allow S_DAX to be set for regular inodes for ext2 and
    ext4. This allows us to have strict DAX vs non-DAX paths in the
    writeback code.

    Signed-off-by: Ross Zwisler
    Reviewed-by: Jan Kara
    Cc: Theodore Ts'o
    Cc: Al Viro
    Cc: Dan Williams
    Cc: Dave Chinner
    Cc: Jens Axboe
    Cc: Matthew Wilcox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ross Zwisler
     
  • The recent *sync enabling discovered that we are inserting into the
    block_device pagecache counter to the expectations of the dirty data
    tracking for dax mappings. This can lead to data corruption.

    We want to support DAX for block devices eventually, but it requires
    wider changes to properly manage the pagecache.

    dump_stack+0x85/0xc2
    dax_writeback_mapping_range+0x60/0xe0
    blkdev_writepages+0x3f/0x50
    do_writepages+0x21/0x30
    __filemap_fdatawrite_range+0xc6/0x100
    filemap_write_and_wait+0x4a/0xa0
    set_blocksize+0x70/0xd0
    sb_set_blocksize+0x1d/0x50
    ext4_fill_super+0x75b/0x3360
    mount_bdev+0x180/0x1b0
    ext4_mount+0x15/0x20
    mount_fs+0x38/0x170

    Mark the support broken so its disabled by default, but otherwise still
    available for testing.

    Signed-off-by: Dan Williams
    Signed-off-by: Ross Zwisler
    Reported-by: Ross Zwisler
    Suggested-by: Dave Chinner
    Reviewed-by: Jan Kara
    Cc: Jens Axboe
    Cc: Matthew Wilcox
    Cc: Al Viro
    Cc: Theodore Ts'o
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dan Williams
     
  • When doing append direct io cleanup, if deleting inode fails, it goes
    out without unlocking inode, which will cause the inode deadlock.

    This issue was introduced by commit cf1776a9e834 ("ocfs2: fix a tiny
    race when truncate dio orohaned entry").

    Signed-off-by: Guozhonghua
    Signed-off-by: Joseph Qi
    Reviewed-by: Gang He
    Cc: Mark Fasheh
    Cc: Joel Becker
    Cc: Junxiao Bi
    Cc: [4.2+]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Guozhonghua
     
  • Replace calls to get_random_int() followed by a cast to (unsigned long)
    with calls to get_random_long(). Also address shifting bug which, in
    case of x86 removed entropy mask for mmap_rnd_bits values > 31 bits.

    Signed-off-by: Daniel Cashman
    Acked-by: Kees Cook
    Cc: "Theodore Ts'o"
    Cc: Arnd Bergmann
    Cc: Greg Kroah-Hartman
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: David S. Miller
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Al Viro
    Cc: Nick Kralevich
    Cc: Jeff Vander Stoep
    Cc: Mark Salyzyn
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Cashman
     
  • Commit d07e22597d1d ("mm: mmap: add new /proc tunable for mmap_base
    ASLR") added the ability to choose from a range of values to use for
    entropy count in generating the random offset to the mmap_base address.

    The maximum value on this range was set to 32 bits for 64-bit x86
    systems, but this value could be increased further, requiring more than
    the 32 bits of randomness provided by get_random_int(), as is already
    possible for arm64. Add a new function: get_random_long() which more
    naturally fits with the mmap usage of get_random_int() but operates
    exactly the same as get_random_int().

    Also, fix the shifting constant in mmap_rnd() to be an unsigned long so
    that values greater than 31 bits generate an appropriate mask without
    overflow. This is especially important on x86, as its shift instruction
    uses a 5-bit mask for the shift operand, which meant that any value for
    mmap_rnd_bits over 31 acts as a no-op and effectively disables mmap_base
    randomization.

    Finally, replace calls to get_random_int() with get_random_long() where
    appropriate.

    This patch (of 2):

    Add get_random_long().

    Signed-off-by: Daniel Cashman
    Acked-by: Kees Cook
    Cc: "Theodore Ts'o"
    Cc: Arnd Bergmann
    Cc: Greg Kroah-Hartman
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: David S. Miller
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Al Viro
    Cc: Nick Kralevich
    Cc: Jeff Vander Stoep
    Cc: Mark Salyzyn
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Cashman
     
  • Commit 4167e9b2cf10 ("mm: remove GFP_THISNODE") removed the GFP_THISNODE
    flag combination due to confusing semantics. It noted that
    alloc_misplaced_dst_page() was one such user after changes made by
    commit e97ca8e5b864 ("mm: fix GFP_THISNODE callers and clarify").

    Unfortunately when GFP_THISNODE was removed, users of
    alloc_misplaced_dst_page() started waking kswapd and entering direct
    reclaim because the wrong GFP flags are cleared. The consequence is
    that workloads that used to fit into memory now get reclaimed which is
    addressed by this patch.

    The problem can be demonstrated with "mutilate" that exercises memcached
    which is software dedicated to memory object caching. The configuration
    uses 80% of memory and is run 3 times for varying numbers of clients.
    The results on a 4-socket NUMA box are

    mutilate
    4.4.0 4.4.0
    vanilla numaswap-v1
    Hmean 1 8394.71 ( 0.00%) 8395.32 ( 0.01%)
    Hmean 4 30024.62 ( 0.00%) 34513.54 ( 14.95%)
    Hmean 7 32821.08 ( 0.00%) 70542.96 (114.93%)
    Hmean 12 55229.67 ( 0.00%) 93866.34 ( 69.96%)
    Hmean 21 39438.96 ( 0.00%) 85749.21 (117.42%)
    Hmean 30 37796.10 ( 0.00%) 50231.49 ( 32.90%)
    Hmean 47 18070.91 ( 0.00%) 38530.13 (113.22%)

    The metric is queries/second with the more the better. The results are
    way outside of the noise and the reason for the improvement is obvious
    from some of the vmstats

    4.4.0 4.4.0
    vanillanumaswap-v1r1
    Minor Faults 1929399272 2146148218
    Major Faults 19746529 3567
    Swap Ins 57307366 9913
    Swap Outs 50623229 17094
    Allocation stalls 35909 443
    DMA allocs 0 0
    DMA32 allocs 72976349 170567396
    Normal allocs 5306640898 5310651252
    Movable allocs 0 0
    Direct pages scanned 404130893 799577
    Kswapd pages scanned 160230174 0
    Kswapd pages reclaimed 55928786 0
    Direct pages reclaimed 1843936 41921
    Page writes file 2391 0
    Page writes anon 50623229 17094

    The vanilla kernel is swapping like crazy with large amounts of direct
    reclaim and kswapd activity. The figures are aggregate but it's known
    that the bad activity is throughout the entire test.

    Note that simple streaming anon/file memory consumers also see this
    problem but it's not as obvious. In those cases, kswapd is awake when
    it should not be.

    As there are at least two reclaim-related bugs out there, it's worth
    spelling out the user-visible impact. This patch only addresses bugs
    related to excessive reclaim on NUMA hardware when the working set is
    larger than a NUMA node. There is a bug related to high kswapd CPU
    usage but the reports are against laptops and other UMA hardware and is
    not addressed by this patch.

    Signed-off-by: Mel Gorman
    Cc: Vlastimil Babka
    Cc: Johannes Weiner
    Cc: David Rientjes
    Cc: [4.1+]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mel Gorman
     
  • pmd_trans_unstable()/pmd_none_or_trans_huge_or_clear_bad() were
    introduced to locklessy (but atomically) detect when a pmd is a regular
    (stable) pmd or when the pmd is unstable and can infinitely transition
    from pmd_none() and pmd_trans_huge() from under us, while only holding
    the mmap_sem for reading (for writing not).

    While holding the mmap_sem only for reading, MADV_DONTNEED can run from
    under us and so before we can assume the pmd to be a regular stable pmd
    we need to compare it against pmd_none() and pmd_trans_huge() in an
    atomic way, with pmd_trans_unstable(). The old pmd_trans_huge() left a
    tiny window for a race.

    Useful applications are unlikely to notice the difference as doing
    MADV_DONTNEED concurrently with a page fault would lead to undefined
    behavior.

    [akpm@linux-foundation.org: tidy up comment grammar/layout]
    Signed-off-by: Andrea Arcangeli
    Reported-by: Kirill A. Shutemov
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrea Arcangeli
     

27 Feb, 2016

6 commits

  • This driver uses PCI glue that is only available on 32-bit ARM. This used
    to work fine as long as ARCH_MVEBU and ARCH_DOVE were exclusively 32-bit,
    but there's a patch in the pipe to make ARCH_MVEBU also available on 64-bit
    ARM.

    [bhelgaas: changelog; patch is coming but not merged yet]
    Signed-off-by: Thierry Reding
    Signed-off-by: Bjorn Helgaas
    Acked-by: Thomas Petazzoni

    Thierry Reding
     
  • 991de2e59090 ("PCI, x86: Implement pcibios_alloc_irq() and
    pcibios_free_irq()") appeared in v4.3 and helps support IOAPIC hotplug.

    Олег reported that the Elcus-1553 TA1-PCI driver worked in v4.2 but not
    v4.3 and bisected it to 991de2e59090. Sunjin reported that the RocketRAID
    272x driver worked in v4.2 but not v4.3. In both cases booting with
    "pci=routirq" is a workaround.

    I think the problem is that after 991de2e59090, we no longer call
    pcibios_enable_irq() for upstream bridges. Prior to 991de2e59090, when a
    driver called pci_enable_device(), we recursively called
    pcibios_enable_irq() for upstream bridges via pci_enable_bridge().

    After 991de2e59090, we call pcibios_enable_irq() from pci_device_probe()
    instead of the pci_enable_device() path, which does *not* call
    pcibios_enable_irq() for upstream bridges.

    Revert 991de2e59090 to fix these driver regressions.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=111211
    Fixes: 991de2e59090 ("PCI, x86: Implement pcibios_alloc_irq() and pcibios_free_irq()")
    Reported-and-tested-by: Олег Мороз
    Reported-by: Sunjin Yang
    Signed-off-by: Bjorn Helgaas
    Acked-by: Rafael J. Wysocki
    CC: Jiang Liu

    Bjorn Helgaas
     
  • In the unlikely event that regno == nr_registers then we get an array
    overrun on regoff because the invalid register check is currently
    off-by-one. Fix this with a check that regno is >= nr_registers instead.

    Detected with static analysis using CoverityScan.

    Fixes: fcc7ffd67991 "x86, mpx: Decode MPX instruction to get bound violation information"
    Signed-off-by: Colin Ian King
    Acked-by: Dave Hansen
    Cc: Borislav Petkov
    Cc: "Kirill A . Shutemov"
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1456512931-3388-1-git-send-email-colin.king@canonical.com
    Signed-off-by: Thomas Gleixner

    Colin Ian King
     
  • Pull Ceph fixes from Sage Weil:
    "There are two small messenger bug fixes and a log spam regression fix"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
    libceph: don't spam dmesg with stray reply warnings
    libceph: use the right footer size when skipping a message
    libceph: don't bail early from try_read() when skipping a message

    Linus Torvalds
     
  • Pull sound fixes from Takashi Iwai:
    "Things got calmed down for rc6, as it seems, and we have only a few
    HD-audio fixes at this time: a fix for Skylake codec probe errors, a
    fix for missing interrupt handling, and a few Dell and HP quirks"

    * tag 'sound-4.5-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: hda - Loop interrupt handling until really cleared
    ALSA: hda - Fix headset support and noise on HP EliteBook 755 G2
    ALSA: hda - Fixup speaker pass-through control for nid 0x14 on ALC225
    ALSA: hda - Fixing background noise on Dell Inspiron 3162
    ALSA: hda - Apply clock gate workaround to Skylake, too

    Linus Torvalds
     
  • Pull power management and ACPI fixes from Rafael Wysocki:
    "These are two reverts of recent PCI-related ACPI core changes (one of
    which caused some systems to crash on boot and the other was a cleanup
    on top of it) and a devfreq fix for Tegra.

    Specifics:

    - Revert an ACPI core change related to IRQ management in PCI that
    introduced code relying on the use of kmalloc() which turned out to
    also run during early init when that's not available yet and caused
    some systems to crash on boot for this reason along with a cleanup
    on top of it (Rafael Wysocki).

    - Prevent devfreq from flooding the kernel log with useless messages
    on Tegra (which started to happen after some recent changes in the
    devfreq core) by fixing the driver to follow the documentation and
    the core's expectations in its ->target callback (Tomeu Vizoso)"

    * tag 'pm+acpi-4.5-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    Revert "ACPI, PCI, irq: remove interrupt count restriction"
    Revert "ACPI / PCI: Simplify acpi_penalize_isa_irq()"
    PM / devfreq: tegra: Set freq in rate callback

    Linus Torvalds
     

26 Feb, 2016

1 commit