12 Aug, 2015

1 commit

  • Init functions defined in regmap*.c files are now prefixed with
    __, take lockdep key and class parameters, and should not be
    called directly: move the documentation to regmap.h, where the
    macros are defined.

    Signed-off-by: Nicolas Boichat
    Signed-off-by: Mark Brown

    Nicolas Boichat
     

07 Aug, 2015

3 commits

  • Lockdep validator complains about recursive locking and deadlock
    when two different regmap instances are called in a nested order.
    That happens anytime a regmap read/write call needs to access
    another regmap.

    This is because, for performance reason, lockdep groups all locks
    initialized by the same mutex_init() in the same lock class.
    Therefore all regmap mutexes are in the same lock class, leading
    to lockdep "nested locking" warnings if a regmap accesses another
    regmap.

    In general, it is impossible to establish in advance the hierarchy
    of regmaps, so we make sure that each regmap init call initializes
    its own static lock_class_key. This is done by wrapping all
    regmap_init calls into macros.

    This also allows us to give meaningful names to the lock_class_key.
    For example, in rt5677 case, we have in /proc/lockdep_chains:
    irq_context: 0
    [ffffffc0018d2198] &dev->mutex
    [ffffffc0018d2198] &dev->mutex
    [ffffffc001bd7f60] rt5677:5104:(&rt5677_regmap)->_lock
    [ffffffc001bd7f58] rt5677:5096:(&rt5677_regmap_physical)->_lock
    [ffffffc001b95448] &(&base->lock)->rlock

    The above would have resulted in a lockdep recursive warning
    previously. This is not the case anymore as the lockdep validator
    now clearly identifies the 2 regmaps as separate.

    Signed-off-by: Nicolas Boichat
    Signed-off-by: Mark Brown

    Nicolas Boichat
     
  • regmap_init(...) is a macro since commit
    "regmap: Use different lockdep class for each regmap init call".
    That same name is used as a function pointer: prevent its expansion
    by adding parentheses around the function pointer.

    Signed-off-by: Nicolas Boichat
    Signed-off-by: Mark Brown

    Nicolas Boichat
     
  • regmap_init(...) is a macro since commit
    "regmap: Use different lockdep class for each regmap init call".
    That same name is used as a function pointer: prevent its expansion
    by adding parentheses around the function pointer.

    Signed-off-by: Nicolas Boichat
    Signed-off-by: Mark Brown

    Nicolas Boichat
     

13 Jul, 2015

7 commits

  • Linus Torvalds
     
  • This reverts commit dec4f799d0a4c9edae20512fa60b0a36f3299ca2.

    Jörg Otte reports a NULL pointder dereference due to this commit, as
    'crtc_state' very much can be NULL:

    crtc_state = state->base.state ?
    intel_atomic_get_crtc_state(state->base.state, intel_crtc) : NULL;

    So the change to test 'crtc_state->base.active' cannot possibly be
    correct as-is.

    There may be some other minimal fix (like just checking crtc_state for
    NULL), but I'm just reverting it now for the rc2 release, and people
    like Daniel Vetter who actually know this code will figure out what the
    right solution is in the longer term.

    Reported-and-bisected-by: Jörg Otte
    Cc: Ander Conselvan de Oliveira
    Cc: Jani Nikula
    Cc: Daniel Vetter
    CC: Maarten Lankhorst
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Pull VFS fixes from Al Viro:
    "Fixes for this cycle regression in overlayfs and a couple of
    long-standing (== all the way back to 2.6.12, at least) bugs"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    freeing unlinked file indefinitely delayed
    fix a braino in ovl_d_select_inode()
    9p: don't leave a half-initialized inode sitting around

    Linus Torvalds
     
  • Pull MIPS fixes from Ralf Baechle:
    "A fair number of 4.2 fixes also because Markos opened the flood gates.

    - Patch up the math used calculate the location for the page bitmap.

    - The FDC (Not what you think, FDC stands for Fast Debug Channel) IRQ
    around was causing issues on non-Malta platforms, so move the code
    to a Malta specific location.

    - A spelling fix replicated through several files.

    - Fix to the emulation of an R2 instruction for R6 cores.

    - Fix the JR emulation for R6.

    - Further patching of mindless 64 bit issues.

    - Ensure the kernel won't crash on CPUs with L2 caches with >= 8
    ways.

    - Use compat_sys_getsockopt for O32 ABI on 64 bit kernels.

    - Fix cache flushing for multithreaded cores.

    - A build fix"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
    MIPS: O32: Use compat_sys_getsockopt.
    MIPS: c-r4k: Extend way_string array
    MIPS: Pistachio: Support CDMM & Fast Debug Channel
    MIPS: Malta: Make GIC FDC IRQ workaround Malta specific
    MIPS: c-r4k: Fix cache flushing for MT cores
    Revert "MIPS: Kconfig: Disable SMP/CPS for 64-bit"
    MIPS: cps-vec: Use macros for various arithmetics and memory operations
    MIPS: kernel: cps-vec: Replace KSEG0 with CKSEG0
    MIPS: kernel: cps-vec: Use ta0-ta3 pseudo-registers for 64-bit
    MIPS: kernel: cps-vec: Replace mips32r2 ISA level with mips64r2
    MIPS: kernel: cps-vec: Replace 'la' macro with PTR_LA
    MIPS: kernel: smp-cps: Fix 64-bit compatibility errors due to pointer casting
    MIPS: Fix erroneous JR emulation for MIPS R6
    MIPS: Fix branch emulation for BLTC and BGEC instructions
    MIPS: kernel: traps: Fix broken indentation
    MIPS: bootmem: Don't use memory holes for page bitmap
    MIPS: O32: Do not handle require 32 bytes from the stack to be readable.
    MIPS, CPUFREQ: Fix spelling of Institute.
    MIPS: Lemote 2F: Fix build caused by recent mass rename.

    Linus Torvalds
     
  • Pull x86 fixes from Thomas Gleixner:

    - the high latency PIT detection fix, which slipped through the cracks
    for rc1

    - a regression fix for the early printk mechanism

    - the x86 part to plug irq/vector related hotplug races

    - move the allocation of the espfix pages on cpu hotplug to non atomic
    context. The current code triggers a might_sleep() warning.

    - a series of KASAN fixes addressing boot crashes and usability

    - a trivial typo fix for Kconfig help text

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/kconfig: Fix typo in the CONFIG_CMDLINE_BOOL help text
    x86/irq: Retrieve irq data after locking irq_desc
    x86/irq: Use proper locking in check_irq_vectors_for_cpu_disable()
    x86/irq: Plug irq vector hotplug race
    x86/earlyprintk: Allow early_printk() to use console style parameters like '115200n8'
    x86/espfix: Init espfix on the boot CPU side
    x86/espfix: Add 'cpu' parameter to init_espfix_ap()
    x86/kasan: Move KASAN_SHADOW_OFFSET to the arch Kconfig
    x86/kasan: Add message about KASAN being initialized
    x86/kasan: Fix boot crash on AMD processors
    x86/kasan: Flush TLBs after switching CR3
    x86/kasan: Fix KASAN shadow region page tables
    x86/init: Clear 'init_level4_pgt' earlier
    x86/tsc: Let high latency PIT fail fast in quick_pit_calibrate()

    Linus Torvalds
     
  • Pull timer fixes from Thomas Gleixner:
    "This update from the timer departement contains:

    - A series of patches which address a shortcoming in the tick
    broadcast code.

    If the broadcast device is not available or an hrtimer emulated
    broadcast device, some of the original assumptions lead to boot
    failures. I rather plugged all of the corner cases instead of only
    addressing the issue reported, so the change got a little larger.

    Has been extensivly tested on x86 and arm.

    - Get rid of the last holdouts using do_posix_clock_monotonic_gettime()

    - A regression fix for the imx clocksource driver

    - An update to the new state callbacks mechanism for clockevents.
    This is required to simplify the conversion, which will take place
    in 4.3"

    * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    tick/broadcast: Prevent NULL pointer dereference
    time: Get rid of do_posix_clock_monotonic_gettime
    cris: Replace do_posix_clock_monotonic_gettime()
    tick/broadcast: Unbreak CONFIG_GENERIC_CLOCKEVENTS=n build
    tick/broadcast: Handle spurious interrupts gracefully
    tick/broadcast: Check for hrtimer broadcast active early
    tick/broadcast: Return busy when IPI is pending
    tick/broadcast: Return busy if periodic mode and hrtimer broadcast
    tick/broadcast: Move the check for periodic mode inside state handling
    tick/broadcast: Prevent deep idle if no broadcast device available
    tick/broadcast: Make idle check independent from mode and config
    tick/broadcast: Sanity check the shutdown of the local clock_event
    tick/broadcast: Prevent hrtimer recursion
    clockevents: Allow set-state callbacks to be optional
    clocksource/imx: Define clocksource for mx27

    Linus Torvalds
     
  • Pull irq fix from Thomas Gleixner:
    "A single fix for a cpu hotplug race vs. interrupt descriptors:

    Prevent irq setup/teardown across the cpu starting/dying parts of cpu
    hotplug so that the starting/dying cpu has a stable view of the
    descriptor space. This has been an issue for all architectures in the
    cpu dying phase, where interrupts are migrated away from the dying
    cpu. In the starting phase its mostly a x86 issue vs the vector space
    update"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    hotplug: Prevent alloc/free of irq descriptors during cpu up/down

    Linus Torvalds
     

12 Jul, 2015

11 commits

  • Normally opening a file, unlinking it and then closing will have
    the inode freed upon close() (provided that it's not otherwise busy and
    has no remaining links, of course). However, there's one case where that
    does *not* happen. Namely, if you open it by fhandle with cold dcache,
    then unlink() and close().

    In normal case you get d_delete() in unlink(2) notice that dentry
    is busy and unhash it; on the final dput() it will be forcibly evicted from
    dcache, triggering iput() and inode removal. In this case, though, we end
    up with *two* dentries - disconnected (created by open-by-fhandle) and
    regular one (used by unlink()). The latter will have its reference to inode
    dropped just fine, but the former will not - it's considered hashed (it
    is on the ->s_anon list), so it will stay around until the memory pressure
    will finally do it in. As the result, we have the final iput() delayed
    indefinitely. It's trivial to reproduce -

    void flush_dcache(void)
    {
    system("mount -o remount,rw /");
    }

    static char buf[20 * 1024 * 1024];

    main()
    {
    int fd;
    union {
    struct file_handle f;
    char buf[MAX_HANDLE_SZ];
    } x;
    int m;

    x.f.handle_bytes = sizeof(x);
    chdir("/root");
    mkdir("foo", 0700);
    fd = open("foo/bar", O_CREAT | O_RDWR, 0600);
    close(fd);
    name_to_handle_at(AT_FDCWD, "foo/bar", &x.f, &m, 0);
    flush_dcache();
    fd = open_by_handle_at(AT_FDCWD, &x.f, O_RDWR);
    unlink("foo/bar");
    write(fd, buf, sizeof(buf));
    system("df ."); /* 20Mb eaten */
    close(fd);
    system("df ."); /* should've freed those 20Mb */
    flush_dcache();
    system("df ."); /* should be the same as #2 */
    }

    will spit out something like
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/root 322023 303843 1131 100% /
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/root 322023 303843 1131 100% /
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/root 322023 283282 21692 93% /
    - inode gets freed only when dentry is finally evicted (here we trigger
    than by remount; normally it would've happened in response to memory
    pressure hell knows when).

    Cc: stable@vger.kernel.org # v2.6.38+; earlier ones need s/kill_it/unhash_it/
    Acked-by: J. Bruce Fields
    Signed-off-by: Al Viro

    Al Viro
     
  • when opening a directory we want the overlayfs inode, not one from
    the topmost layer.

    Reported-By: Andrey Jr. Melnikov
    Tested-By: Andrey Jr. Melnikov
    Signed-off-by: Al Viro

    Al Viro
     
  • Cc: stable@vger.kernel.org # all branches
    Signed-off-by: Al Viro

    Al Viro
     
  • Pull libnvdimm fixes from Dan Williams:
    "1) Fixes for a handful of smatch reports (Thanks Dan C.!) and minor
    bug fixes (patches 1-6)

    2) Correctness fixes to the BLK-mode nvdimm driver (patches 7-10).

    Granted these are slightly large for a -rc update. They have been
    out for review in one form or another since the end of May and were
    deferred from the merge window while we settled on the "PMEM API"
    for the PMEM-mode nvdimm driver (ie memremap_pmem, memcpy_to_pmem,
    and wmb_pmem).

    Now that those apis are merged we implement them in the BLK driver
    to guarantee that mmio aperture moves stay ordered with respect to
    incoming read/write requests, and that writes are flushed through
    those mmio-windows and platform-buffers to be persistent on media.

    These pass the sub-system unit tests with the updates to
    tools/testing/nvdimm, and have received a successful build-report from
    the kbuild robot (468 configs).

    With acks from Rafael for the touches to drivers/acpi/"

    * 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm:
    nfit: add support for NVDIMM "latch" flag
    nfit: update block I/O path to use PMEM API
    tools/testing/nvdimm: add mock acpi_nfit_flush_address entries to nfit_test
    tools/testing/nvdimm: fix return code for unimplemented commands
    tools/testing/nvdimm: mock ioremap_wt
    pmem: add maintainer for include/linux/pmem.h
    nfit: fix smatch "use after null check" report
    nvdimm: Fix return value of nvdimm_bus_init() if class_create() fails
    libnvdimm: smatch cleanups in __nd_ioctl
    sparse: fix misplaced __pmem definition

    Linus Torvalds
     
  • Pull i2c fixes from Wolfram Sang:
    "Mostly slight adjusments for new drivers, but also one core fix for
    which finally the dependencies are now available as well"

    * 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
    i2c: Mark instantiated device nodes with OF_POPULATE
    i2c: jz4780: Fix return value if probe fails
    i2c: xgene-slimpro: Fix missing mbox_free_channel call in probe error path
    i2c: I2C_MT65XX should depend on HAS_DMA

    Linus Torvalds
     
  • Pull input fixes from Dmitry Torokhov:
    "A fix (revert) for a recent regression in Synaptics driver and a fix
    for Elan i2c touchpad driver"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Revert "Input: synaptics - allocate 3 slots to keep stability in image sensors"
    Input: elan_i2c - change the hover event from MT to ST

    Linus Torvalds
     
  • Pull clk fixes from Stephen Boyd:
    "A small set of fixes for problems found by smatch in new drivers that
    we added this rc and a handful of driver fixes that came in during the
    merge window"

    * tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
    drivers: clk: st: Incorrect register offset used for lock_status
    clk: mediatek: mt8173: Fix enabling of critical clocks
    drivers: clk: st: Fix mux bit-setting for Cortex A9 clocks
    drivers: clk: st: Add CLK_GET_RATE_NOCACHE flag to clocks
    drivers: clk: st: Fix flexgen lock init
    drivers: clk: st: Fix FSYN channel values
    drivers: clk: st: Remove unused code
    clk: qcom: Use parent rate when set rate to pixel RCG clock
    clk: at91: do not leak resources
    clk: stm32: Fix out-by-one error path in the index lookup
    clk: iproc: fix bit manipulation arithmetic
    clk: iproc: fix memory leak from clock name

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "A bunch of fixes for radeon, intel, omap and one amdkfd fix.

    Radeon fixes are all over, but it does fix some cursor corruption
    across suspend/resume. i915 should fix the second warn you were
    seeing, so let us know if not. omap is a bunch of small fixes"

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (28 commits)
    drm/radeon: disable vce init on cayman (v2)
    drm/amdgpu: fix timeout calculation
    drm/radeon: check if BO_VA is set before adding it to the invalidation list
    drm/radeon: allways add the VM clear duplicate
    Revert "Revert "drm/radeon: dont switch vt on suspend""
    drm/radeon: Fold radeon_set_cursor() into radeon_show_cursor()
    drm/radeon: unpin cursor BOs on suspend and pin them again on resume (v2)
    drm/radeon: Clean up reference counting and pinning of the cursor BOs
    drm/amdkfd: validate pdd where it acquired first
    Revert "drm/i915: Allocate context objects from stolen"
    drm/i915: Declare the swizzling unknown for L-shaped configurations
    drm/radeon: fix underflow in r600_cp_dispatch_texture()
    drm/radeon: default to 2048 MB GART size on SI+
    drm/radeon: fix HDP flushing
    drm/radeon: use RCU query for GEM_BUSY syscall
    drm/amdgpu: Handle irqs only based on irq ring, not irq status regs.
    drm/radeon: Handle irqs only based on irq ring, not irq status regs.
    drm/i915: Use crtc_state->active in primary check_plane func
    drm/i915: Check crtc->active in intel_crtc_disable_planes
    drm/i915: Restore all GGTT VMAs on resume
    ...

    Linus Torvalds
     
  • Pull selinux fixes from James Morris.

    * 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
    selinux: fix mprotect PROT_EXEC regression caused by mm change
    selinux: don't waste ebitmap space when importing NetLabel categories

    Linus Torvalds
     
  • Pull btrfs fixes from Chris Mason:
    "This is an assortment of fixes. Most of the commits are from Filipe
    (fsync, the inode allocation cache and a few others). Mark kicked in
    a series fixing corners in the extent sharing ioctls, and everyone
    else fixed up on assorted other problems"

    * 'for-linus-4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
    Btrfs: fix wrong check for btrfs_force_chunk_alloc()
    Btrfs: fix warning of bytes_may_use
    Btrfs: fix hang when failing to submit bio of directIO
    Btrfs: fix a comment in inode.c:evict_inode_truncate_pages()
    Btrfs: fix memory corruption on failure to submit bio for direct IO
    btrfs: don't update mtime/ctime on deduped inodes
    btrfs: allow dedupe of same inode
    btrfs: fix deadlock with extent-same and readpage
    btrfs: pass unaligned length to btrfs_cmp_data()
    Btrfs: fix fsync after truncate when no_holes feature is enabled
    Btrfs: fix fsync xattr loss in the fast fsync path
    Btrfs: fix fsync data loss after append write
    Btrfs: fix crash on close_ctree() if cleaner starts new transaction
    Btrfs: fix race between caching kthread and returning inode to inode cache
    Btrfs: use kmem_cache_free when freeing entry in inode cache
    Btrfs: fix race between balance and unused block group deletion
    btrfs: add error handling for scrub_workers_get()
    btrfs: cleanup noused initialization of dev in btrfs_end_bio()
    btrfs: qgroup: allow user to clear the limitation on qgroup

    Linus Torvalds
     
  • Pull ARM SoC fixes from Kevin Hilman:
    "A fairly random colletion of fixes based on -rc1 for OMAP, sunxi and
    prima2 as well as a few arm64-specific DT fixes.

    This series also includes a late to support a new Allwinner (sunxi)
    SoC, but since it's rather simple and isolated to the
    platform-specific code, it's included it for this -rc"

    * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
    arm64: dts: add device tree for ARM SMM-A53x2 on LogicTile Express 20MG
    arm: dts: vexpress: add missing CCI PMU device node to TC2
    arm: dts: vexpress: describe all PMUs in TC2 dts
    GICv3: Add ITS entry to THUNDER dts
    arm64: dts: Add poweroff button device node for APM X-Gene platform
    ARM: dts: am4372.dtsi: disable rfbi
    ARM: dts: am57xx-beagle-x15: Provide supply for usb2_phy2
    ARM: dts: am4372: Add emif node
    Revert "ARM: dts: am335x-boneblack: disable RTC-only sleep"
    ARM: sunxi: Enable simplefb in the defconfig
    ARM: Remove deprecated symbol from defconfig files
    ARM: sunxi: Add Machine support for A33
    ARM: sunxi: Introduce Allwinner H3 support
    Documentation: sunxi: Update Allwinner SoC documentation
    ARM: prima2: move to use REGMAP APIs for rtciobrg
    ARM: dts: atlas7: add pinctrl and gpio descriptions
    ARM: OMAP2+: Remove unnessary return statement from the void function, omap2_show_dma_caps
    memory: omap-gpmc: Fix parsing of devices

    Linus Torvalds
     

11 Jul, 2015

15 commits

  • Dan reported that the recent changes to the broadcast code introduced
    a potential NULL dereference.

    Add the proper check.

    Fixes: e0454311903d "tick/broadcast: Sanity check the shutdown of the local clock_event"
    Reported-by: Dan Carpenter
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • Pull parisc fixes from Helge Deller:
    "We have one important patch from Dave Anglin and myself which fixes
    PTE/TLB race conditions which caused random segmentation faults on our
    debian buildd servers, and one patch from Alex Ivanov which speeds up
    the graphical text console on the STI framebuffer driver"

    * 'parisc-4.2-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
    parisc: Fix some PTE/TLB race conditions and optimize __flush_tlb_range based on timing results
    stifb: Implement hardware accelerated copyarea

    Linus Torvalds
     
  • James Morris
     
  • commit 66fc13039422ba7df2d01a8ee0873e4ef965b50b ("mm: shmem_zero_setup
    skip security check and lockdep conflict with XFS") caused a regression
    for SELinux by disabling any SELinux checking of mprotect PROT_EXEC on
    shared anonymous mappings. However, even before that regression, the
    checking on such mprotect PROT_EXEC calls was inconsistent with the
    checking on a mmap PROT_EXEC call for a shared anonymous mapping. On a
    mmap, the security hook is passed a NULL file and knows it is dealing
    with an anonymous mapping and therefore applies an execmem check and no
    file checks. On a mprotect, the security hook is passed a vma with a
    non-NULL vm_file (as this was set from the internally-created shmem
    file during mmap) and therefore applies the file-based execute check
    and no execmem check. Since the aforementioned commit now marks the
    shmem zero inode with the S_PRIVATE flag, the file checks are disabled
    and we have no checking at all on mprotect PROT_EXEC. Add a test to
    the mprotect hook logic for such private inodes, and apply an execmem
    check in that case. This makes the mmap and mprotect checking
    consistent for shared anonymous mappings, as well as for /dev/zero and
    ashmem.

    Cc: # 4.1.x
    Signed-off-by: Stephen Smalley
    Signed-off-by: Paul Moore

    Stephen Smalley
     
  • Pull arm64 fixes and clean-up from Catalin Marinas:
    - ACPI fix when checking the validity of the GICC MADT subtable
    - handle debug exceptions in the el*_inv exception entries
    - remove pointless register assignment in two compat syscall wrappers
    - unnecessary include path
    - defconfig update

    * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
    arm64: entry32: remove pointless register assignment
    arm64: entry: handle debug exceptions in el*_inv
    arm64: Keep the ARM64 Kconfig selects sorted
    ACPI / ARM64 : use the new BAD_MADT_GICC_ENTRY macro
    ACPI / ARM64: add BAD_MADT_GICC_ENTRY() macro
    arm64: defconfig: Add Ceva ahci to the defconfig
    arm64: remove another unnecessary libfdt include path

    Linus Torvalds
     
  • The increased use of pdtlb/pitlb instructions seemed to increase the
    frequency of random segmentation faults building packages. Further, we
    had a number of cases where TLB inserts would repeatedly fail and all
    forward progress would stop. The Haskell ghc package caused a lot of
    trouble in this area. The final indication of a race in pte handling was
    this syslog entry on sibaris (C8000):

    swap_free: Unused swap offset entry 00000004
    BUG: Bad page map in process mysqld pte:00000100 pmd:019bbec5
    addr:00000000ec464000 vm_flags:00100073 anon_vma:0000000221023828 mapping: (null) index:ec464
    CPU: 1 PID: 9176 Comm: mysqld Not tainted 4.0.0-2-parisc64-smp #1 Debian 4.0.5-1
    Backtrace:
    [] show_stack+0x20/0x38
    [] dump_stack+0x9c/0x110
    [] print_bad_pte+0x1a8/0x278
    [] unmap_single_vma+0x3d8/0x770
    [] zap_page_range+0xf0/0x198
    [] SyS_madvise+0x404/0x8c0

    Note that the pte value is 0 except for the accessed bit 0x100. This bit
    shouldn't be set without the present bit.

    It should be noted that the madvise system call is probably a trigger for many
    of the random segmentation faults.

    In looking at the kernel code, I found the following problems:

    1) The pte_clear define didn't take TLB lock when clearing a pte.
    2) We didn't test pte present bit inside lock in exception support.
    3) The pte and tlb locks needed to merged in order to ensure consistency
    between page table and TLB. This also has the effect of serializing TLB
    broadcasts on SMP systems.

    The attached change implements the above and a few other tweaks to try
    to improve performance. Based on the timing code, TLB purges are very
    slow (e.g., ~ 209 cycles per page on rp3440). Thus, I think it
    beneficial to test the split_tlb variable to avoid duplicate purges.
    Probably, all PA 2.0 machines have combined TLBs.

    I dropped using __flush_tlb_range in flush_tlb_mm as I realized all
    applications and most threads have a stack size that is too large to
    make this useful. I added some comments to this effect.

    Since implementing 1 through 3, I haven't had any random segmentation
    faults on mx3210 (rp3440) in about one week of building code and running
    as a Debian buildd.

    Signed-off-by: John David Anglin
    Cc: stable@vger.kernel.org # v3.18+
    Signed-off-by: Helge Deller

    John David Anglin
     
  • This patch adds hardware assisted scrolling. The code is based upon the
    following investigation: https://parisc.wiki.kernel.org/index.php/NGLE#Blitter

    A simple 'time ls -la /usr/bin' test shows 1.6x speed increase over soft
    copy and 2.3x increase over FBINFO_READS_FAST (prefer soft copy over
    screen redraw) on Artist framebuffer.

    Signed-off-by: Alex Ivanov
    Signed-off-by: Helge Deller

    Alex Ivanov
     
  • Pull powerpc fixes from Michael Ellerman:
    - opal-prd mmap fix from Vaidy
    - set kernel taint for MCEs from Daniel
    - alignment exception description from Anton
    - ppc4xx_hsta_msi build fix from Daniel
    - opal-elog interrupt fix from Alistair
    - core_idle_state race fix from Shreyas
    - hv-24x7 lockdep fix from Sukadev
    - multiple cxl fixes from Daniel, Ian, Mikey & Maninder
    - update MAINTAINERS to point at shared tree

    * tag 'powerpc-4.2-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
    cxl: Check if afu is not null in cxl_slbia
    powerpc: Update MAINTAINERS to point at shared tree
    powerpc/perf/24x7: Fix lockdep warning
    cxl: Fix off by one error allowing subsequent mmap page to be accessed
    cxl: Fail mmap if requested mapping is larger than assigned problem state area
    cxl: Fix refcounting in kernel API
    powerpc/powernv: Fix race in updating core_idle_state
    powerpc/powernv: Fix opal-elog interrupt handler
    powerpc/ppc4xx_hsta_msi: Include ppc-pci.h to fix reference to hose_list
    powerpc: Add plain English description for alignment exception oopses
    cxl: Test the correct mmio space before unmapping
    powerpc: Set the correct kernel taint on machine check errors
    cxl/vphb.c: Use phb pointer after NULL check
    powerpc/powernv: Fix vma page prot flags in opal-prd driver

    Linus Torvalds
     
  • Add support in the NFIT BLK I/O path for the "latch" flag
    defined in the "Get Block NVDIMM Flags" _DSM function:

    http://pmem.io/documents/NVDIMM_DSM_Interface_Example.pdf

    This flag requires the driver to read back the command register after it
    is written in the block I/O path. This ensures that the hardware has
    fully processed the new command and moved the aperture appropriately.

    Signed-off-by: Ross Zwisler
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Dan Williams

    Ross Zwisler
     
  • Update the nfit block I/O path to use the new PMEM API and to adhere to
    the read/write flows outlined in the "NVDIMM Block Window Driver
    Writer's Guide":

    http://pmem.io/documents/NVDIMM_Driver_Writers_Guide.pdf

    This includes adding support for targeted NVDIMM flushes called "flush
    hints" in the ACPI 6.0 specification:

    http://www.uefi.org/sites/default/files/resources/ACPI_6.0.pdf

    For performance and media durability the mapping for a BLK aperture is
    moved to a write-combining mapping which is consistent with
    memcpy_to_pmem() and wmb_blk().

    Signed-off-by: Ross Zwisler
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Dan Williams

    Ross Zwisler
     
  • In preparation for fixing the BLK path to properly use "directed
    pcommit" enable the unit test infrastructure to emit mock "flush"
    tables. Writes to these flush addresses trigger a memory controller to
    flush its internal buffers to persistent media, similar to the x86
    "pcommit" instruction.

    Signed-off-by: Dan Williams

    Dan Williams
     
  • The implementation for the new "DIMM Flags" DSM relies on the -ENOTTY
    return code to indicate that the flags are unimplimented and to fall
    back to a safe default. As is the -ENXIO error code erroneoously
    indicates to fail enabling a BLK region.

    Signed-off-by: Dan Williams

    Dan Williams
     
  • In the 4.2-rc1 merge the default_memremap_pmem() implementation switched
    from ioremap_nocache() to ioremap_wt(). Add it to the list of mocked
    routines to restore the ability to run the unit tests.

    Signed-off-by: Dan Williams

    Dan Williams
     
  • The file include/linux/pmem.h was recently created to hold the PMEM API,
    and is logically part of the PMEM driver. Add an entry for this file to
    MAINTAINERS.

    Signed-off-by: Ross Zwisler
    Signed-off-by: Dan Williams

    Ross Zwisler
     
  • This reverts commit 63c4fda3c0bb841b1aad1298fc7fe94058fc79f8 as it
    causes issues with detecting 3-finger taps.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=100481
    Cc: stable@vger.kernel.org
    Acked-by: Benjamin Tissoires

    Dmitry Torokhov
     

10 Jul, 2015

3 commits

  • We currently set x27 in compat_sys_sigreturn_wrapper and
    compat_sys_rt_sigreturn_wrapper, similarly to what we do with r8/why on
    32-bit ARM, in an attempt to prevent sigreturns from being restarted.

    However, on arm64 we have always used pt_regs::syscallno for syscall
    restarting (for both native and compat tasks), and x27 is never
    inspected again before being overwritten in kernel_exit.

    This patch removes the pointless register assignments.

    Signed-off-by: Mark Rutland
    Cc: Will Deacon
    Signed-off-by: Catalin Marinas

    Mark Rutland
     
  • We were using the native syscall and that results in subtle breakage.

    This is the same issue as fixed in 077d0e65618f27b2199d622e12ada6d8f3dbd862
    (MIPS: N32: Use compat getsockopt syscall) but that commit did fix it only
    for N32.

    Signed-off-by: Ralf Baechle
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=100291

    Ralf Baechle
     
  • The L2 cache in the I6400 core has 16 ways, so extend the way_string
    array to take such caches into account.

    [ralf@linux-mips.org: Other already supported CPUs are free to support
    more than 8 ways of cache as well.]

    Signed-off-by: Paul Burton
    Signed-off-by: Markos Chandras
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/10640/
    Signed-off-by: Ralf Baechle

    Paul Burton