20 Feb, 2018

2 commits

  • i6300esb uses fuctions defined in watchdog_core.c, and when
    CONFIG_WATCHDOG_CORE is not set we have this build error:

    drivers/watchdog/i6300esb.o: In function `esb_remove':
    i6300esb.c:(.text+0xcc): undefined reference to `watchdog_unregister_device'
    drivers/watchdog/i6300esb.o: In function `esb_probe':
    i6300esb.c:(.text+0x2a1): undefined reference to `watchdog_init_timeout'
    i6300esb.c:(.text+0x388): undefined reference to `watchdog_register_device'
    make: *** [Makefile:1029: vmlinux] Error 1

    Fix this by selecting CONFIG_WATCHDOG_CORE when I6300ESB_WDT is set.

    Fixes: 7af4ac8772a8f ("watchdog: i6300esb: use the watchdog subsystem")
    Signed-off-by: Matteo Croce
    Reviewed-by: Guenter Roeck
    Signed-off-by: Guenter Roeck
    Signed-off-by: Wim Van Sebroeck

    Matteo Croce
     
  • We can build this driver with or without NVMEM, but not built-in
    when NVMEM is a loadable module:

    drivers/watchdog/rave-sp-wdt.o: In function `rave_sp_wdt_probe':
    rave-sp-wdt.c:(.text+0x27c): undefined reference to `nvmem_cell_get'
    rave-sp-wdt.c:(.text+0x290): undefined reference to `nvmem_cell_read'
    rave-sp-wdt.c:(.text+0x2c4): undefined reference to `nvmem_cell_put'

    This adds a Kconfig dependency to enforce that.

    Fixes: c3bb33345721 ("watchdog: Add RAVE SP watchdog driver")
    Signed-off-by: Arnd Bergmann
    Reviewed-by: Guenter Roeck
    Signed-off-by: Guenter Roeck
    Signed-off-by: Wim Van Sebroeck

    Arnd Bergmann
     

19 Feb, 2018

5 commits

  • Linus Torvalds
     
  • Pull x86 Kconfig fixes from Thomas Gleixner:
    "Three patchlets to correct HIGHMEM64G and CMPXCHG64 dependencies in
    Kconfig when CPU selections are explicitely set to M586 or M686"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/Kconfig: Explicitly enumerate i686-class CPUs in Kconfig
    x86/Kconfig: Exclude i586-class CPUs lacking PAE support from the HIGHMEM64G Kconfig group
    x86/Kconfig: Add missing i586-class CPUs to the X86_CMPXCHG64 Kconfig group

    Linus Torvalds
     
  • Pull perf updates from Thomas Gleixner:
    "Perf tool updates and kprobe fixes:

    - perf_mmap overwrite mode fixes/overhaul, prep work to get 'perf
    top' using it, making it bearable to use it in large core count
    systems such as Knights Landing/Mill Intel systems (Kan Liang)

    - s/390 now uses syscall.tbl, just like x86-64 to generate the
    syscall table id -> string tables used by 'perf trace' (Hendrik
    Brueckner)

    - Use strtoull() instead of home grown function (Andy Shevchenko)

    - Synchronize kernel ABI headers, v4.16-rc1 (Ingo Molnar)

    - Document missing 'perf data --force' option (Sangwon Hong)

    - Add perf vendor JSON metrics for ARM Cortex-A53 Processor (William
    Cohen)

    - Improve error handling and error propagation of ftrace based
    kprobes so failures when installing kprobes are not silently
    ignored and create disfunctional tracepoints"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits)
    kprobes: Propagate error from disarm_kprobe_ftrace()
    kprobes: Propagate error from arm_kprobe_ftrace()
    Revert "tools include s390: Grab a copy of arch/s390/include/uapi/asm/unistd.h"
    perf s390: Rework system call table creation by using syscall.tbl
    perf s390: Grab a copy of arch/s390/kernel/syscall/syscall.tbl
    tools/headers: Synchronize kernel ABI headers, v4.16-rc1
    perf test: Fix test trace+probe_libc_inet_pton.sh for s390x
    perf data: Document missing --force option
    perf tools: Substitute yet another strtoull()
    perf top: Check the latency of perf_top__mmap_read()
    perf top: Switch default mode to overwrite mode
    perf top: Remove lost events checking
    perf hists browser: Add parameter to disable lost event warning
    perf top: Add overwrite fall back
    perf evsel: Expose the perf_missing_features struct
    perf top: Check per-event overwrite term
    perf mmap: Discard legacy interface for mmap read
    perf test: Update mmap read functions for backward-ring-buffer test
    perf mmap: Introduce perf_mmap__read_event()
    perf mmap: Introduce perf_mmap__read_done()
    ...

    Linus Torvalds
     
  • Pull irq updates from Thomas Gleixner:
    "A small set of updates mostly for irq chip drivers:

    - MIPS GIC fix for spurious, masked interrupts

    - fix for a subtle IPI bug in GICv3

    - do not probe GICv3 ITSs that are marked as disabled

    - multi-MSI support for GICv2m

    - various small cleanups"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    irqdomain: Re-use DEFINE_SHOW_ATTRIBUTE() macro
    irqchip/bcm: Remove hashed address printing
    irqchip/gic-v2m: Add PCI Multi-MSI support
    irqchip/gic-v3: Ignore disabled ITS nodes
    irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq()
    irqchip/gic-v3: Change pr_debug message to pr_devel
    irqchip/mips-gic: Avoid spuriously handling masked interrupts

    Linus Torvalds
     
  • Pull core fix from Thomas Gleixner:
    "A small fix which adds the missing for_each_cpu_wrap() stub for the UP
    case to avoid build failures"

    * 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    cpumask: Make for_each_cpu_wrap() available on UP as well

    Linus Torvalds
     

18 Feb, 2018

6 commits

  • Pull block fixes from Jens Axboe:

    - NVMe pull request from Keith, with fixes all over the map for nvme.
    From various folks.

    - Classic polling fix, that avoids a latency issue where we still end
    up waiting for an interrupt in some cases. From Nitesh Shetty.

    - Comment typo fix from Minwoo Im.

    * tag 'for-linus-20180217' of git://git.kernel.dk/linux-block:
    block: fix a typo in comment of BLK_MQ_POLL_STATS_BKTS
    nvme-rdma: fix sysfs invoked reset_ctrl error flow
    nvmet: Change return code of discard command if not supported
    nvme-pci: Fix timeouts in connecting state
    nvme-pci: Remap CMB SQ entries on every controller reset
    nvme: fix the deadlock in nvme_update_formats
    blk: optimization for classic polling
    nvme: Don't use a stack buffer for keep-alive command
    nvme_fc: cleanup io completion
    nvme_fc: correct abort race condition on resets
    nvme: Fix discard buffer overrun
    nvme: delete NVME_CTRL_LIVE --> NVME_CTRL_CONNECTING transition
    nvme-rdma: use NVME_CTRL_CONNECTING state to mark init process
    nvme: rename NVME_CTRL_RECONNECTING state to NVME_CTRL_CONNECTING

    Linus Torvalds
     
  • Pull MMC fixes from Ulf Hansson:

    - meson-gx: Revert to earlier tuning process

    - bcm2835: Don't overwrite max frequency unconditionally

    * tag 'mmc-v4.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
    mmc: bcm2835: Don't overwrite max frequency unconditionally
    Revert "mmc: meson-gx: include tx phase in the tuning process"

    Linus Torvalds
     
  • Pull mtd fixes from Boris Brezillon:

    - add missing dependency to NAND_MARVELL Kconfig entry

    - use the appropriate OOB layout in the VF610 driver

    * tag 'mtd/fixes-for-4.16-rc2' of git://git.infradead.org/linux-mtd:
    mtd: nand: MTD_NAND_MARVELL should depend on HAS_DMA
    mtd: nand: vf610: set correct ooblayout

    Linus Torvalds
     
  • Pull powerpc fixes from Michael Ellerman:
    "The main attraction is a fix for a bug in the new drmem code, which
    was causing an oops on boot on some versions of Qemu.

    There's also a fix for XIVE (Power9 interrupt controller) on KVM, as
    well as a few other minor fixes.

    Thanks to: Corentin Labbe, Cyril Bur, Cédric Le Goater, Daniel Black,
    Nathan Fontenot, Nicholas Piggin"

    * tag 'powerpc-4.16-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
    powerpc/pseries: Check for zero filled ibm,dynamic-memory property
    powerpc/pseries: Add empty update_numa_cpu_lookup_table() for NUMA=n
    powerpc/powernv: IMC fix out of bounds memory access at shutdown
    powerpc/xive: Use hw CPU ids when configuring the CPU queues
    powerpc: Expose TSCR via sysfs only on powernv

    Linus Torvalds
     
  • Pull arm64 fixes from Catalin Marinas:
    "The bulk of this is the pte accessors annotation to READ/WRITE_ONCE
    (we tried to avoid pushing this during the merge window to avoid
    conflicts)

    - Updated the page table accessors to use READ/WRITE_ONCE and prevent
    compiler transformation that could lead to an apparent loss of
    coherency

    - Enabled branch predictor hardening for the Falkor CPU

    - Fix interaction between kpti enabling and KASan causing the
    recursive page table walking to take a significant time

    - Fix some sparse warnings"

    * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
    arm64: cputype: Silence Sparse warnings
    arm64: mm: Use READ_ONCE/WRITE_ONCE when accessing page tables
    arm64: proc: Set PTE_NG for table entries to avoid traversing them twice
    arm64: Add missing Falkor part number for branch predictor hardening

    Linus Torvalds
     
  • Pull xen fixes from Juergen Gross:

    - fixes for the Xen pvcalls frontend driver

    - fix for booting Xen pv domains

    - fix for the xenbus driver user interface

    * tag 'for-linus-4.16a-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
    pvcalls-front: wait for other operations to return when release passive sockets
    pvcalls-front: introduce a per sock_mapping refcount
    x86/xen: Calculate __max_logical_packages on PV domains
    xenbus: track caller request id

    Linus Torvalds
     

17 Feb, 2018

14 commits

  • Passive sockets can have ongoing operations on them, specifically, we
    have two wait_event_interruptable calls in pvcalls_front_accept.

    Add two wake_up calls in pvcalls_front_release, then wait for the
    potential waiters to return and release the sock_mapping refcount.

    Signed-off-by: Stefano Stabellini
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Stefano Stabellini
     
  • Introduce a per sock_mapping refcount, in addition to the existing
    global refcount. Thanks to the sock_mapping refcount, we can safely wait
    for it to be 1 in pvcalls_front_release before freeing an active socket,
    instead of waiting for the global refcount to be 1.

    Signed-off-by: Stefano Stabellini
    Acked-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Stefano Stabellini
     
  • The kernel panics on PV domains because native_smp_cpus_done() is
    only called for HVM domains.

    Calculate __max_logical_packages for PV domains.

    Fixes: b4c0a7326f5d ("x86/smpboot: Fix __max_logical_packages estimate")
    Signed-off-by: Prarit Bhargava
    Tested-and-reported-by: Simon Gaiser
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: x86@kernel.org
    Cc: Boris Ostrovsky
    Cc: Juergen Gross
    Cc: Dou Liyang
    Cc: Prarit Bhargava
    Cc: Kate Stewart
    Cc: Greg Kroah-Hartman
    Cc: Andy Lutomirski
    Cc: Andi Kleen
    Cc: Vitaly Kuznetsov
    Cc: xen-devel@lists.xenproject.org
    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross

    Prarit Bhargava
     
  • Commit fd8aa9095a95 ("xen: optimize xenbus driver for multiple concurrent
    xenstore accesses") optimized xenbus concurrent accesses but in doing so
    broke UABI of /dev/xen/xenbus. Through /dev/xen/xenbus applications are in
    charge of xenbus message exchange with the correct header and body. Now,
    after the mentioned commit the replies received by application will no
    longer have the header req_id echoed back as it was on request (see
    specification below for reference), because that particular field is being
    overwritten by kernel.

    struct xsd_sockmsg
    {
    uint32_t type; /* XS_??? */
    uint32_t req_id;/* Request identifier, echoed in daemon's response. */
    uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */
    uint32_t len; /* Length of data following this. */

    /* Generally followed by nul-terminated string(s). */
    };

    Before there was only one request at a time so req_id could simply be
    forwarded back and forth. To allow simultaneous requests we need a
    different req_id for each message thus kernel keeps a monotonic increasing
    counter for this field and is written on every request irrespective of
    userspace value.

    Forwarding again the req_id on userspace requests is not a solution because
    we would open the possibility of userspace-generated req_id colliding with
    kernel ones. So this patch instead takes another route which is to
    artificially keep user req_id while keeping the xenbus logic as is. We do
    that by saving the original req_id before xs_send(), use the private kernel
    counter as req_id and then once reply comes and was validated, we restore
    back the original req_id.

    Cc: # 4.11
    Fixes: fd8aa9095a ("xen: optimize xenbus driver for multiple concurrent xenstore accesses")
    Reported-by: Bhavesh Davda
    Signed-off-by: Joao Martins
    Reviewed-by: Juergen Gross
    Signed-off-by: Juergen Gross

    Joao Martins
     
  • Sparse makes a fair bit of noise about our MPIDR mask being implicitly
    long - let's explicitly describe it as such rather than just relying on
    the value forcing automatic promotion.

    Signed-off-by: Robin Murphy
    Signed-off-by: Catalin Marinas

    Robin Murphy
     
  • Pull dma-mapping fixes from Christoph Hellwig:
    "A few dma-mapping fixes for the fallout from the changes in rc1"

    * tag 'dma-mapping-4.16-2' of git://git.infradead.org/users/hch/dma-mapping:
    powerpc/macio: set a proper dma_coherent_mask
    dma-mapping: fix a comment typo
    dma-direct: comment the dma_direct_free calling convention
    dma-direct: mark as is_phys
    ia64: fix build failure with CONFIG_SWIOTLB

    Linus Torvalds
     
  • In many cases, page tables can be accessed concurrently by either another
    CPU (due to things like fast gup) or by the hardware page table walker
    itself, which may set access/dirty bits. In such cases, it is important
    to use READ_ONCE/WRITE_ONCE when accessing page table entries so that
    entries cannot be torn, merged or subject to apparent loss of coherence
    due to compiler transformations.

    Whilst there are some scenarios where this cannot happen (e.g. pinned
    kernel mappings for the linear region), the overhead of using READ_ONCE
    /WRITE_ONCE everywhere is minimal and makes the code an awful lot easier
    to reason about. This patch consistently uses these macros in the arch
    code, as well as explicitly namespacing pointers to page table entries
    from the entries themselves by using adopting a 'p' suffix for the former
    (as is sometimes used elsewhere in the kernel source).

    Tested-by: Yury Norov
    Tested-by: Richard Ruigrok
    Reviewed-by: Marc Zyngier
    Signed-off-by: Will Deacon
    Signed-off-by: Catalin Marinas

    Will Deacon
     
  • We get a warning about some slow configurations in randconfig kernels:

    mm/memory.c:83:2: error: #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid. [-Werror=cpp]

    The warning is reasonable by itself, but gets in the way of randconfig
    build testing, so I'm hiding it whenever CONFIG_COMPILE_TEST is set.

    The warning was added in 2013 in commit 75980e97dacc ("mm: fold
    page->_last_nid into page->flags where possible").

    Cc: stable@vger.kernel.org
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Torvalds

    Arnd Bergmann
     
  • Pull MIPS fixes from James Hogan:
    "A few fixes for outstanding MIPS issues:

    - an __init section mismatch warning when brcmstb_pm is enabled

    - a regression handling multiple mem=X@Y arguments (4.11)

    - a USB Kconfig select warning, and related sparc cleanup (4.16)"

    * tag 'mips_fixes_4.16_2' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/mips:
    sparc,leon: Select USB_UHCI_BIG_ENDIAN_{MMIO,DESC}
    usb: Move USB_UHCI_BIG_ENDIAN_* out of USB_SUPPORT
    MIPS: Fix incorrect mem=X@Y handling
    MIPS: BMIPS: Fix section mismatch warning

    Linus Torvalds
     
  • Pull btrfs fixes from David Sterba:
    "We have a few assorted fixes, some of them show up during fstests so I
    gave them more testing"

    * tag 'for-4.16-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
    btrfs: Fix use-after-free when cleaning up fs_devs with a single stale device
    Btrfs: fix null pointer dereference when replacing missing device
    btrfs: remove spurious WARN_ON(ref->count < 0) in find_parent_nodes
    btrfs: Ignore errors from btrfs_qgroup_trace_extent_post
    Btrfs: fix unexpected -EEXIST when creating new inode
    Btrfs: fix use-after-free on root->orphan_block_rsv
    Btrfs: fix btrfs_evict_inode to handle abnormal inodes correctly
    Btrfs: fix extent state leak from tree log
    Btrfs: fix crash due to not cleaning up tree log block's dirty bits
    Btrfs: fix deadlock in run_delalloc_nocow

    Linus Torvalds
     
  • …ernel/git/device-mapper/linux-dm

    Pull device mapper fix from Mike Snitzer:
    "Fix for DM core to properly propagate errors (avoids overriding
    non-zero error with 0). This is particularly important given DM core's
    increased use of chained bios"

    * tag 'for-4.16/dm-chained-bios-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
    dm: correctly handle chained bios in dec_pending()

    Linus Torvalds
     
  • Pull x86 platform driver fixes from Andy Shevchenko:

    - regression fix in keyboard support for Dell laptops

    - prevent out-of-boundary write in WMI bus driver

    - increase timeout to read functional key status on Lenovo laptops

    * tag 'platform-drivers-x86-v4.16-4' of git://git.infradead.org/linux-platform-drivers-x86:
    platform/x86: dell-laptop: Removed duplicates in DMI whitelist
    platform/x86: dell-laptop: fix kbd_get_state's request value
    platform/x86: ideapad-laptop: Increase timeout to wait for EC answer
    platform/x86: wmi: fix off-by-one write in wmi_dev_probe()

    Linus Torvalds
     
  • Pull sound fixes from Takashi Iwai:
    "A collection of usual suspects:

    - a handful USB-audio and HD-audio device-specific quirks

    - some trivial fixes for the new AC97 bus stuff

    - another race fix in ALSA sequencer core"

    * tag 'sound-4.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
    ALSA: hda/realtek: PCI quirk for Fujitsu U7x7
    ALSA: seq: Fix racy pool initializations
    ALSA: usb: add more device quirks for USB DSD devices
    ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute
    ALSA: ac97: Fix copy and paste typo in documentation
    ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204
    ALSA: ac97: kconfig: Remove select of undefined symbol AC97
    ALSA: hda/realtek - Enable Thinkpad Dock device for ALC298 platform
    ALSA: hda/realtek - Add headset mode support for Dell laptop
    ALSA: hda - Fix headset mic detection problem for two Dell machines

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "One nouveau regression fix, one AMD quirk and a full set of i915
    fixes.

    The i915 fixes are mostly for things caught by their CI system, main
    ones being DSI panel fixes and GEM fixes"

    * tag 'drm-fixes-for-v4.16-rc2' of git://people.freedesktop.org/~airlied/linux:
    drm/nouveau: Make clock gate support conditional
    drm/i915: Fix DSI panels with v1 MIPI sequences without a DEASSERT sequence v3
    drm/i915: Free memdup-ed DSI VBT data structures on driver_unload
    drm/i915: Add intel_bios_cleanup() function
    drm/i915/vlv: Add cdclk workaround for DSI
    drm/i915/gvt: fix one typo of render_mmio trace
    drm/i915/gvt: Support BAR0 8-byte reads/writes
    drm/i915/gvt: add 0xe4f0 into gen9 render list
    drm/i915/pmu: Fix building without CONFIG_PM
    drm/i915/pmu: Fix sleep under atomic in RC6 readout
    drm/i915/pmu: Fix PMU enable vs execlists tasklet race
    drm/i915: Lock out execlist tasklet while peeking inside for busy-stats
    drm/i915/breadcrumbs: Ignore unsubmitted signalers
    drm/i915: Don't wake the device up to check if the engine is asleep
    drm/i915: Avoid truncation before clamping userspace's priority value
    drm/i915/perf: Fix compiler warning for string truncation
    drm/i915/perf: Fix compiler warning for string truncation
    drm/amdgpu: add new device to use atpx quirk

    Linus Torvalds
     

16 Feb, 2018

13 commits

  • dec_pending() is given an error status (possibly 0) to be recorded
    against a bio. It can be called several times on the one 'struct
    dm_io', and it is careful to only assign a non-zero error to
    io->status. However when it then assigned io->status to bio->bi_status,
    it is not careful and could overwrite a genuine error status with 0.

    This can happen when chained bios are in use. If a bio is chained
    beneath the bio that this dm_io is handling, the child bio might
    complete and set bio->bi_status before the dm_io completes.

    This has been possible since chained bios were introduced in 3.14, and
    has become a lot easier to trigger with commit 18a25da84354 ("dm: ensure
    bio submission follows a depth-first tree walk") as that commit caused
    dm to start using chained bios itself.

    A particular failure mode is that if a bio spans an 'error' target and a
    working target, the 'error' fragment will complete instantly and set the
    ->bi_status, and the other fragment will normally complete a little
    later, and will clear ->bi_status.

    The fix is simply to only assign io_error to bio->bi_status when
    io_error is not zero.

    Reported-and-tested-by: Milan Broz
    Cc: stable@vger.kernel.org (v3.14+)
    Signed-off-by: NeilBrown
    Signed-off-by: Mike Snitzer

    NeilBrown
     
  • …arm-platforms into irq/urgent

    Pull irqchip updates for 4.16-rc2 from Marc Zyngier

    - A MIPS GIC fix for spurious, masked interrupts
    - A fix for a subtle IPI bug in GICv3
    - Do not probe GICv3 ITSs that are marked as disabled
    - Multi-MSI support for GICv2m
    - Various cleanups

    Thomas Gleixner
     
  • ...instead of open coding file operations followed by custom ->open()
    callbacks per each attribute.

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Marc Zyngier

    Andy Shevchenko
     
  • Since commit ad67b74d2469 ("printk: hash addresses printed with %p")
    pointers are being hashed when printed. Displaying the virtual memory at
    bootup time is not helpful. so delete the prints.

    Acked-by: Florian Fainelli
    Signed-off-by: Jaedon Shin
    Signed-off-by: Marc Zyngier

    Jaedon Shin
     
  • We'd never implemented Multi-MSI support with GICv2m, because
    it is weird and clunky, and you'd think people would rather use
    MSI-X.

    Turns out there is still plenty of devices out there that rely
    on Multi-MSI. Oh well, let's teach that trick to the v2m widget,
    it is not a big deal anyway.

    Signed-off-by: Marc Zyngier

    Marc Zyngier
     
  • On some platforms there's an ITS available but it's not enabled
    because reading or writing the registers is denied by the
    firmware. In fact, reading or writing them will cause the system
    to reset. We could remove the node from DT in such a case, but
    it's better to skip nodes that are marked as "disabled" in DT so
    that we can describe the hardware that exists and use the status
    property to indicate how the firmware has configured things.

    Cc: Stuart Yoder
    Cc: Laurentiu Tudor
    Cc: Greg Kroah-Hartman
    Cc: Marc Zyngier
    Cc: Rajendra Nayak
    Signed-off-by: Stephen Boyd
    Signed-off-by: Marc Zyngier

    Stephen Boyd
     
  • A DMB instruction can be used to ensure the relative order of only
    memory accesses before and after the barrier. Since writes to system
    registers are not memory operations, barrier DMB is not sufficient
    for observability of memory accesses that occur before ICC_SGI1R_EL1
    writes.

    A DSB instruction ensures that no instructions that appear in program
    order after the DSB instruction, can execute until the DSB instruction
    has completed.

    Cc: stable@vger.kernel.org
    Acked-by: Will Deacon ,
    Signed-off-by: Shanker Donthineni
    Signed-off-by: Marc Zyngier

    Shanker Donthineni
     
  • The pr_debug() in gic-v3 gic_send_sgi() can trigger a circular locking
    warning:

    GICv3: CPU10: ICC_SGI1R_EL1 5000400
    ======================================================
    WARNING: possible circular locking dependency detected
    4.15.0+ #1 Tainted: G W
    ------------------------------------------------------
    dynamic_debug01/1873 is trying to acquire lock:
    ((console_sem).lock){-...}, at: [] down_trylock+0x20/0x4c

    but task is already holding lock:
    (&rq->lock){-.-.}, at: [] __task_rq_lock+0x54/0xdc

    which lock already depends on the new lock.

    the existing dependency chain (in reverse order) is:

    -> #2 (&rq->lock){-.-.}:
    __lock_acquire+0x3b4/0x6e0
    lock_acquire+0xf4/0x2a8
    _raw_spin_lock+0x4c/0x60
    task_fork_fair+0x3c/0x148
    sched_fork+0x10c/0x214
    copy_process.isra.32.part.33+0x4e8/0x14f0
    _do_fork+0xe8/0x78c
    kernel_thread+0x48/0x54
    rest_init+0x34/0x2a4
    start_kernel+0x45c/0x488

    -> #1 (&p->pi_lock){-.-.}:
    __lock_acquire+0x3b4/0x6e0
    lock_acquire+0xf4/0x2a8
    _raw_spin_lock_irqsave+0x58/0x70
    try_to_wake_up+0x48/0x600
    wake_up_process+0x28/0x34
    __up.isra.0+0x60/0x6c
    up+0x60/0x68
    __up_console_sem+0x4c/0x7c
    console_unlock+0x328/0x634
    vprintk_emit+0x25c/0x390
    dev_vprintk_emit+0xc4/0x1fc
    dev_printk_emit+0x88/0xa8
    __dev_printk+0x58/0x9c
    _dev_info+0x84/0xa8
    usb_new_device+0x100/0x474
    hub_port_connect+0x280/0x92c
    hub_event+0x740/0xa84
    process_one_work+0x240/0x70c
    worker_thread+0x60/0x400
    kthread+0x110/0x13c
    ret_from_fork+0x10/0x18

    -> #0 ((console_sem).lock){-...}:
    validate_chain.isra.34+0x6e4/0xa20
    __lock_acquire+0x3b4/0x6e0
    lock_acquire+0xf4/0x2a8
    _raw_spin_lock_irqsave+0x58/0x70
    down_trylock+0x20/0x4c
    __down_trylock_console_sem+0x3c/0x9c
    console_trylock+0x20/0xb0
    vprintk_emit+0x254/0x390
    vprintk_default+0x58/0x90
    vprintk_func+0xbc/0x164
    printk+0x80/0xa0
    __dynamic_pr_debug+0x84/0xac
    gic_raise_softirq+0x184/0x18c
    smp_cross_call+0xac/0x218
    smp_send_reschedule+0x3c/0x48
    resched_curr+0x60/0x9c
    check_preempt_curr+0x70/0xdc
    wake_up_new_task+0x310/0x470
    _do_fork+0x188/0x78c
    SyS_clone+0x44/0x50
    __sys_trace_return+0x0/0x4

    other info that might help us debug this:

    Chain exists of:
    (console_sem).lock --> &p->pi_lock --> &rq->lock

    Possible unsafe locking scenario:

    CPU0 CPU1
    ---- ----
    lock(&rq->lock);
    lock(&p->pi_lock);
    lock(&rq->lock);
    lock((console_sem).lock);

    *** DEADLOCK ***

    2 locks held by dynamic_debug01/1873:
    #0: (&p->pi_lock){-.-.}, at: [] wake_up_new_task+0x40/0x470
    #1: (&rq->lock){-.-.}, at: [] __task_rq_lock+0x54/0xdc

    stack backtrace:
    CPU: 10 PID: 1873 Comm: dynamic_debug01 Tainted: G W 4.15.0+ #1
    Hardware name: GIGABYTE R120-T34-00/MT30-GS2-00, BIOS T48 10/02/2017
    Call trace:
    dump_backtrace+0x0/0x188
    show_stack+0x24/0x2c
    dump_stack+0xa4/0xe0
    print_circular_bug.isra.31+0x29c/0x2b8
    check_prev_add.constprop.39+0x6c8/0x6dc
    validate_chain.isra.34+0x6e4/0xa20
    __lock_acquire+0x3b4/0x6e0
    lock_acquire+0xf4/0x2a8
    _raw_spin_lock_irqsave+0x58/0x70
    down_trylock+0x20/0x4c
    __down_trylock_console_sem+0x3c/0x9c
    console_trylock+0x20/0xb0
    vprintk_emit+0x254/0x390
    vprintk_default+0x58/0x90
    vprintk_func+0xbc/0x164
    printk+0x80/0xa0
    __dynamic_pr_debug+0x84/0xac
    gic_raise_softirq+0x184/0x18c
    smp_cross_call+0xac/0x218
    smp_send_reschedule+0x3c/0x48
    resched_curr+0x60/0x9c
    check_preempt_curr+0x70/0xdc
    wake_up_new_task+0x310/0x470
    _do_fork+0x188/0x78c
    SyS_clone+0x44/0x50
    __sys_trace_return+0x0/0x4
    GICv3: CPU0: ICC_SGI1R_EL1 12000

    This could be fixed with printk_deferred() but that might lessen its
    usefulness for debugging. So change it to pr_devel to keep it out of
    production kernels. Developers working on gic-v3 can enable it as
    needed in their kernels.

    Signed-off-by: Mark Salter
    Signed-off-by: Marc Zyngier

    Mark Salter
     
  • Commit 7778c4b27cbe ("irqchip: mips-gic: Use pcpu_masks to avoid reading
    GIC_SH_MASK*") removed the read of the hardware mask register when
    handling shared interrupts, instead using the driver's shadow pcpu_masks
    entry as the effective mask. Unfortunately this did not take account of
    the write to pcpu_masks during gic_shared_irq_domain_map, which
    effectively unmasks the interrupt early. If an interrupt is asserted,
    gic_handle_shared_int decodes and processes the interrupt even though it
    has not yet been unmasked via gic_unmask_irq, which also sets the
    appropriate bit in pcpu_masks.

    On the MIPS Boston board, when a console command line of
    "console=ttyS0,115200n8r" is passed, the modem status IRQ is enabled in
    the UART, which is immediately raised to the GIC. The interrupt has been
    mapped, but no handler has yet been registered, nor is it expected to be
    unmasked. However, the write to pcpu_masks in gic_shared_irq_domain_map
    has effectively unmasked it, resulting in endless reports of:

    [ 5.058454] irq 13, desc: ffffffff80a7ad80, depth: 1, count: 0, unhandled: 0
    [ 5.062057] ->handle_irq(): ffffffff801b1838,
    [ 5.062175] handle_bad_irq+0x0/0x2c0

    Where IRQ 13 is the UART interrupt.

    To fix this, just remove the write to pcpu_masks in
    gic_shared_irq_domain_map. The existing write in gic_unmask_irq is the
    correct place for what is now the effective unmasking.

    Cc: stable@vger.kernel.org
    Fixes: 7778c4b27cbe ("irqchip: mips-gic: Use pcpu_masks to avoid reading GIC_SH_MASK*")
    Signed-off-by: Matt Redfearn
    Reviewed-by: Paul Burton
    Signed-off-by: Marc Zyngier

    Matt Redfearn
     
  • Some versions of QEMU will produce an ibm,dynamic-reconfiguration-memory
    node with a ibm,dynamic-memory property that is zero-filled. This
    causes the drmem code to oops trying to parse this property.

    The fix for this is to validate that the property does contain LMB
    entries before trying to parse it and bail if the count is zero.

    Oops: Kernel access of bad area, sig: 11 [#1]
    DAR: 0000000000000010
    NIP read_drconf_v1_cell+0x54/0x9c
    LR read_drconf_v1_cell+0x48/0x9c
    Call Trace:
    __param_initcall_debug+0x0/0x28 (unreliable)
    drmem_init+0x144/0x2f8
    do_one_initcall+0x64/0x1d0
    kernel_init_freeable+0x298/0x38c
    kernel_init+0x24/0x160
    ret_from_kernel_thread+0x5c/0xb4

    The ibm,dynamic-reconfiguration-memory device tree property generated
    that causes this:

    ibm,dynamic-reconfiguration-memory {
    ibm,lmb-size = ;
    ibm,memory-flags-mask = ;
    ibm,dynamic-memory = ;
    linux,phandle = ;
    ibm,associativity-lookup-arrays = ;
    ibm,memory-preservation-time = ;
    };

    Signed-off-by: Nathan Fontenot
    Reviewed-by: Cyril Bur
    Tested-by: Daniel Black
    [mpe: Trim oops report]
    Signed-off-by: Michael Ellerman

    Nathan Fontenot
     
  • for_each_cpu_wrap() was originally added in the #else half of a
    large "#if NR_CPUS == 1" statement, but was omitted in the #if
    half. This patch adds the missing #if half to prevent compile
    errors when NR_CPUS is 1.

    Reported-by: kbuild test robot
    Signed-off-by: Michael Kelley
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: kys@microsoft.com
    Cc: martin.petersen@oracle.com
    Cc: mikelley@microsoft.com
    Fixes: c743f0a5c50f ("sched/fair, cpumask: Export for_each_cpu_wrap()")
    Link: http://lkml.kernel.org/r/SN6PR1901MB2045F087F59450507D4FCC17CBF50@SN6PR1901MB2045.namprd19.prod.outlook.com
    Signed-off-by: Ingo Molnar

    Michael Kelley
     
  • The X86_P6_NOP config class leaves out many i686-class CPUs. Instead,
    explicitly enumerate all these CPUs.

    Using a configuration with M686 currently sets X86_MINIMUM_CPU_FAMILY=5
    instead of the correct value of 6.

    Booting on an i586 it will fail to generate the "This kernel
    requires an i686 CPU, but only detected an i586 CPU" message and
    intentional halt as expected. It will instead just silently hang
    when it hits i686-specific instructions.

    Signed-off-by: Matthew Whitehead
    Cc: Andy Lutomirski
    Cc: Arjan van de Ven
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1518713696-11360-3-git-send-email-tedheadster@gmail.com
    Signed-off-by: Ingo Molnar

    Matthew Whitehead
     
  • i586-class machines also lack support for Physical Address Extension (PAE),
    so add them to the exclusion list.

    Signed-off-by: Matthew Whitehead
    Cc: Andy Lutomirski
    Cc: Arjan van de Ven
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Josh Poimboeuf
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1518713696-11360-2-git-send-email-tedheadster@gmail.com
    Signed-off-by: Ingo Molnar

    Matthew Whitehead