17 Nov, 2016

1 commit

  • This option was added in 6a89a314ab107a12af08c71420c19a37a30fc2d3 to
    allow use of the devm_gpio_* functions without CONFIG_GPIOLIB.

    However, only a few months later in
    b69ac52449c658b7ac40034dc3c5f5f4a71a723d, CONFIG_GPIOLIB was added
    as a dependency, defeating the original purpose of this option.
    Instead of that patch, the original commit could have just been
    reverted (and in fact was partially so in
    403c1d0be5ccbd750d25c59d8358843a81e52e3b). Further, since this
    option has a dependency on HAS_IOMEM, even though it does not
    require it, it causes build failures when !HAS_IOMEM (e.g. in a
    uml build).

    Fix that by completely removing the option, in essence completing
    the reversion of the original commit.

    Signed-off-by: Keno Fischer
    Signed-off-by: Linus Walleij

    Keno Fischer
     

15 Nov, 2016

2 commits

  • The bit in the TC3589x direction register is 0 for input
    and 1 for output, but the gpiolib expects the reverse.
    Fix up the logic.

    Cc: stable@vger.kernel.org
    Fixes: 14063d71e5e6 ("gpio: tc3589x: add .get_direction() and small cleanup")
    Signed-off-by: Linus Walleij

    Linus Walleij
     
  • When locking a GPIO line as IRQ, we go to lengths to
    double-check that the line is really set as input before
    marking it as used for IRQ. This is not good on GPIO chips
    that can sleep, because this function is called in IRQ-safe
    context. Just skip this if it can't be checked quickly.

    Currently this happens on sleeping expanders such as STMPE
    or TC3589x:

    BUG: scheduling while atomic: swapper/1/0x00000002
    Modules linked in:
    CPU: 0 PID: 1 Comm: swapper Not tainted 4.9.0-rc1+ #38
    Hardware name: Nomadik STn8815
    [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
    [] (show_stack) from [] (__schedule_bug+0x54/0x80)
    [] (__schedule_bug) from [] (__schedule+0x3a0/0x460)
    [] (__schedule) from [] (schedule+0x54/0xb8)
    (...)

    This patch fixes that problem and relies on the direction
    read from the chip when it was added.

    Cc: stable@vger.kernel.org
    Fixes: 9c10280d85c1 ("gpio: flush direction status in gpiochip_lock_as_irq()")
    Cc: Patrice Chotard
    Signed-off-by: Linus Walleij

    Linus Walleij
     

08 Nov, 2016

2 commits

  • Need to ensure that reg_output is not updated while setting multiple
    bits. This makes the mutex locking behaviour for the set_multiple call
    consistent with that of the set_value call.

    Cc: stable@vger.kernel.org
    Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
    Signed-off-by: Phil Reid
    Signed-off-by: Linus Walleij

    Phil Reid
     
  • gpiod_set_array_value_complex does not clear the bits field.
    Therefore when the drivers set_multiple funciton is called bits outside
    the mask are undefined and can be either set or not. So bank_val needs
    to be masked with bank_mask before or with the reg_val cache.

    Cc: stable@vger.kernel.org
    Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
    Signed-off-by: Phil Reid
    Signed-off-by: Linus Walleij

    Phil Reid
     

06 Nov, 2016

12 commits

  • Linus Torvalds
     
  • Pull i2c fix from Wolfram Sang:
    "A bugfix for the I2C core fixing a (rare) race condition"

    * 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
    i2c: core: fix NULL pointer dereference under race condition

    Linus Torvalds
     
  • ….kernel.org/pub/scm/linux/kernel/git/tip/tip

    Pull stack vmap fixups from Thomas Gleixner:
    "Two small patches related to sched_show_task():

    - make sure to hold a reference on the task stack while accessing it

    - remove the thread_saved_pc printout

    .. and add a sanity check into release_task_stack() to catch problems
    with task stack references"

    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    sched/core: Remove pointless printout in sched_show_task()
    sched/core: Fix oops in sched_show_task()

    * 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    fork: Add task stack refcounting sanity check and prevent premature task stack freeing

    Linus Torvalds
     
  • Pull MD fixes from Shaohua Li:
    "There are several bug fixes queued:

    - fix raid5-cache recovery bugs

    - fix discard IO error handling for raid1/10

    - fix array sync writes bogus position to superblock

    - fix IO error handling for raid array with external metadata"

    * tag 'md/4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md:
    md: be careful not lot leak internal curr_resync value into metadata. -- (all)
    raid1: handle read error also in readonly mode
    raid5-cache: correct condition for empty metadata write
    md: report 'write_pending' state when array in sync
    md/raid5: write an empty meta-block when creating log super-block
    md/raid5: initialize next_checkpoint field before use
    RAID10: ignore discard error
    RAID1: ignore discard error

    Linus Torvalds
     
  • Pull SCSI fixes from James Bottomley:
    "Two more important data integrity fixes related to RAID device drivers
    which wrongly throw away the SYNCHRONIZE CACHE command in the non-RAID
    path and a memory leak in the scsi_debug driver"

    * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware
    scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded
    scsi: megaraid_sas: Fix data integrity failure for JBOD (passthrough) devices

    Linus Torvalds
     
  • Pull input subsystem updates from Dmitry Torokhov.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: psmouse - cleanup Focaltech code
    Input: i8042 - add XMG C504 to keyboard reset table

    Linus Torvalds
     
  • Pull FireWire (IEEE 1394) fixes from Stefan Richter:

    - add missing input validation to the firewire-net driver. Invalid
    IP-over-1394 encapsulation headers could trigger buffer overflows
    (CVE 2016-8633).

    - IP-over-1394 link fragmentation headers were read and written
    incorrectly, breaking fragmented RX/TX with other OS's stacks.

    * tag 'firewire-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394:
    firewire: net: fix fragmented datagram_size off-by-one
    firewire: net: guard against rx buffer overflows

    Linus Torvalds
     
  • Pull media fixes from Mauro Carvalho Chehab:
    "A series of fixup patches meant to fix the usage of DMA on stack, plus
    one warning fixup"

    * tag 'media/v4.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (32 commits)
    [media] radio-bcm2048: don't ignore errors
    [media] pctv452e: fix semicolon.cocci warnings
    [media] flexcop-usb: don't use stack for DMA
    [media] stk-webcam: don't use stack for DMA
    [media] s2255drv: don't use stack for DMA
    [media] cpia2_usb: don't use stack for DMA
    [media] digitv: handle error code on RC query
    [media] dw2102: return error if su3000_power_ctrl() fails
    [media] nova-t-usb2: handle error code on RC query
    [media] technisat-usb2: use DMA buffers for I2C transfers
    [media] pctv452e: don't call BUG_ON() on non-fatal error
    [media] pctv452e: don't do DMA on stack
    [media] nova-t-usb2: don't do DMA on stack
    [media] gp8psk: don't go past the buffer size
    [media] gp8psk: don't do DMA on stack
    [media] dtv5100: don't do DMA on stack
    [media] dtt200u: handle USB control message errors
    [media] dtt200u: don't do DMA on stack
    [media] dtt200u-fe: handle errors on USB control messages
    [media] dtt200u-fe: don't do DMA on stack
    ...

    Linus Torvalds
     
  • Pull PCI fixes from Bjorn Helgaas:

    - fix for a Qualcomm driver issue that causes a use-before-set crash

    - fix for DesignWare iATU unroll support that causes external aborts
    when enabling the host bridge

    * tag 'pci-v4.9-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
    PCI: designware: Check for iATU unroll support after initializing host
    PCI: qcom: Fix pp->dev usage before assignment

    Linus Torvalds
     
  • Pull MTD fixes from Brian Norris:

    - MAINTAINERS updates to reflect some new maintainers/submaintainers.

    We have some great volunteers who've been developing and reviewing
    already. We're going to try a group maintainership model, so
    eventually you'll probably see pull requests from people besides me.

    - NAND fixes from Boris:
    "Three simple fixes:

    - fix a non-critical bug in the gpmi driver
    - fix a bug in the 'automatic NAND timings selection' feature
    introduced in 4.9-rc1
    - fix a false positive uninitialized-var warning"

    * tag 'for-linus-20161104' of git://git.infradead.org/linux-mtd:
    mtd: mtk: avoid warning in mtk_ecc_encode
    mtd: nand: Fix data interface configuration logic
    mtd: nand: gpmi: disable the clocks on errors
    MAINTAINERS: add more people to the MTD maintainer team
    MAINTAINERS: add a maintainer for the SPI NOR subsystem

    Linus Torvalds
     
  • Pull MMC fixes from Ulf Hansson:
    "MMC host:

    - sdhci-msm: Fix error path in probe
    - dw_mmc-pltfm: Avoid NULL pointer dereference"

    * tag 'mmc-v4.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
    mmc: sdhci-msm: Fix error return code in sdhci_msm_probe()
    mmc: dw_mmc-pltfm: fix the potential NULL pointer dereference

    Linus Torvalds
     
  • Pull GPIO fixes from Linus Walleij:
    "Some GPIO fixes for the v4.9 series:

    - Fix a nasty file descriptor leak when getting line handles.

    - A fix for a cleanup that seemed innocent but created a problem for
    drivers instantiating several gpiochips for one single OF node.

    - Fix a unpredictable problem using irq_domain_simple() in the mvebu
    driver by converting it to a lineas irqdomain"

    * tag 'gpio-v4.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
    gpio/mvebu: Use irq_domain_add_linear
    gpio: of: fix GPIO drivers with multiple gpio_chip for a single node
    gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak

    Linus Torvalds
     

05 Nov, 2016

9 commits

  • Pull nfsd bugfixes from Bruce Fields:
    "Fixes for some recent regressions including fallout from the vmalloc'd
    stack change (after which we can no longer encrypt stuff on the
    stack)"

    * tag 'nfsd-4.9-1' of git://linux-nfs.org/~bfields/linux:
    nfsd: Fix general protection fault in release_lock_stateid()
    svcrdma: backchannel cannot share a page for send and rcv buffers
    sunrpc: fix some missing rq_rbuffer assignments
    sunrpc: don't pass on-stack memory to sg_set_buf
    nfsd: move blocked lock handling under a dedicated spinlock

    Linus Torvalds
     
  • Pull btrfs fixes from Chris Mason:
    "Some fixes that Dave Sterba collected. We held off on these last week
    because I was focused on the memory corruption testing"

    * 'for-4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
    btrfs: fix WARNING in btrfs_select_ref_head()
    Btrfs: remove some no-op casts
    btrfs: pass correct args to btrfs_async_run_delayed_refs()
    btrfs: make file clone aware of fatal signals
    btrfs: qgroup: Prevent qgroup->reserved from going subzero
    Btrfs: kill BUG_ON in do_relocation

    Linus Torvalds
     
  • Pull overlayfs fixes from Miklos Szeredi:
    "Fix two more POSIX ACL bugs introduced in 4.8 and add a missing fsync
    during copy up to prevent possible data loss"

    * 'overlayfs-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs:
    ovl: fsync after copy-up
    ovl: fix get_acl() on tmpfs
    ovl: update S_ISGID when setting posix ACLs

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "Fixes for amdgpu, radeon, intel, imx and virtio-gpu.

    This is a bit larger than I'd like, but I had some stuff I meant to
    send for -rc3 but was waiting for the PAT regression fix to land. So
    this is really fixes for rc3 and rc4 in one go.

    There are a set of fixes for an oops we've been seeing around MST
    display unplug, along with more suspend/resume and shutdown fixes for
    amdgpu, one power management follow on fix for nouveau, and set of imx
    fixes, and a single virtio-gpu regression fix"

    * tag 'drm-fixes-for-v4.9-rc4' of git://people.freedesktop.org/~airlied/linux: (54 commits)
    virtio-gpu: fix vblank events
    drm/nouveau/acpi: fix check for power resources support
    drm/i915: Fix SKL+ 90/270 degree rotated plane coordinate computation
    drm/i915: Remove two invalid warns
    drm/i915: Rotated view does not need a fence
    drm/i915/fbc: fix CFB size calculation for gen8+
    drm: i915: Wait for fences on new fb, not old
    drm/i915: Clean up DDI DDC/AUX CH sanitation
    drm/i915: Respect alternate_aux_channel for all DDI ports
    drm/i915/gen9: fix watermarks when using the pipe scaler
    drm/i915: Fix mismatched INIT power domain disabling during suspend
    drm/i915: fix a read size argument
    drm/i915: Use fence_write() from rpm resume
    drm/i915/gen9: fix DDB partitioning for multi-screen cases
    drm/i915: workaround sparse warning on variable length arrays
    drm/i915: keep declarations in i915_drv.h
    drm/amd/powerplay: fix bug get wrong evv voltage of Polaris.
    drm/amdgpu/si_dpm: workaround for SI kickers
    drm/radeon/si_dpm: workaround for SI kickers
    drm/amdgpu: fix s3 resume back, uvd dpm randomly can't disable.
    ...

    Linus Torvalds
     
  • dw_pcie_iatu_unroll_enabled() reads a dbi_base register. Reading any
    dbi_base register before pp->ops->host_init has been called causes
    "imprecise external abort" on platforms like ARTPEC-6, where the PCIe
    module is disabled at boot and first enabled in pp->ops->host_init. Move
    dw_pcie_iatu_unroll_enabled() to dw_pcie_setup_rc(), since it is after
    pp->ops->host_init, but before pp->iatu_unroll_enabled is actually used.

    Fixes: a0601a470537 ("PCI: designware: Add iATU Unroll feature")
    Tested-by: James Le Cuirot
    Signed-off-by: Niklas Cassel
    Signed-off-by: Bjorn Helgaas
    Acked-by: Joao Pinto
    Acked-by: Olof Johansson

    Niklas Cassel
     
  • Pull KVM updates from Paolo Bonzini:
    "One NULL pointer dereference, and two fixes for regressions introduced
    during the merge window.

    The rest are fixes for MIPS, s390 and nested VMX"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    kvm: x86: Check memopp before dereference (CVE-2016-8630)
    kvm: nVMX: VMCLEAR an active shadow VMCS after last use
    KVM: x86: drop TSC offsetting kvm_x86_ops to fix KVM_GET/SET_CLOCK
    KVM: x86: fix wbinvd_dirty_mask use-after-free
    kvm/x86: Show WRMSR data is in hex
    kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types
    KVM: document lock orders
    KVM: fix OOPS on flush_work
    KVM: s390: Fix STHYI buffer alignment for diag224
    KVM: MIPS: Precalculate MMIO load resume PC
    KVM: MIPS: Make ERET handle ERL before EXL
    KVM: MIPS: Fix lazy user ASID regenerate for SMP

    Linus Torvalds
     
  • Pull MIPS fixes from Ralf Baechle:
    "A set of MIPS fixes for 4.9:

    - lots of fixes for printk continuations
    - six fixes for FP related code.
    - fix max_low_pfn with disabled highmem
    - fix KASLR handling of NULL FDT and KASLR for generic kernels
    - fix build of compressed image
    - provide default mips_cpc_default_phys_base to ignore CPC
    - fix reboot on Malta"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
    MIPS: Fix max_low_pfn with disabled highmem
    MIPS: Correct MIPS I FP sigcontext layout
    MIPS: Fix ISA I/II FP signal context offsets
    MIPS: Remove FIR from ISA I FP signal context
    MIPS: Fix ISA I FP sigcontext access violation handling
    MIPS: Fix FCSR Cause bit handling for correct SIGFPE issue
    MIPS: ptrace: Also initialize the FP context on individual FCSR writes
    MIPS: dump_tlb: Fix printk continuations
    MIPS: Fix __show_regs() output
    MIPS: traps: Fix output of show_code
    MIPS: traps: Fix output of show_stacktrace
    MIPS: traps: Fix output of show_backtrace
    MIPS: Fix build of compressed image
    MIPS: generic: Fix KASLR for generic kernel.
    MIPS: KASLR: Fix handling of NULL FDT
    MIPS: Malta: Fixup reboot
    MIPS: CPC: Provide default mips_cpc_default_phys_base to ignore CPC

    Linus Torvalds
     
  • Pull parisc updates from Helge Deller:
    "The first three patches are trivial and add some required KERN_CONT,
    ignore the new pkey syscalls on parisc and use the LINUX_GATEWAY_ADDR
    define instead of hardcoded values.

    The two patches from Dave Anglin are important.

    The first one avoids trashing the sr2 and sr3 space registers in the
    Light-weight syscall path. Especially the usage of sr3 is critical
    since it may get trashed by the interrupt handler.

    The second patch is even more important and tagged for stable series.
    It protects one critical section in the syscall entry path by
    disabling local interrupts. Without disabling interrupts, the sr7
    space register may not be in sync with the current stack setup and
    thus an incoming hardware interrupt may destroy memory in random
    userspace areas"

    * 'parisc-4.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
    parisc: Ignore the pkey system calls for now
    parisc: Use LINUX_GATEWAY_ADDR define instead of hardcoded value
    parisc: Ensure consistent state when switching to kernel stack at syscall entry
    parisc: Avoid trashing sr2 and sr3 in LWS code
    parisc: use KERN_CONT when printing device inventory

    Linus Torvalds
     
  • Race condition between registering an I2C device driver and
    deregistering an I2C adapter device which is assumed to manage that
    I2C device may lead to a NULL pointer dereference due to the
    uninitialized list head of driver clients.

    The root cause of the issue is that the I2C bus may know about the
    registered device driver and thus it is matched by bus_for_each_drv(),
    but the list of clients is not initialized and commonly it is NULL,
    because I2C device drivers define struct i2c_driver as static and
    clients field is expected to be initialized by I2C core:

    i2c_register_driver() i2c_del_adapter()
    driver_register() ...
    bus_add_driver() ...
    ... bus_for_each_drv(..., __process_removed_adapter)
    ... i2c_do_del_adapter()
    ... list_for_each_entry_safe(..., &driver->clients, ...)
    INIT_LIST_HEAD(&driver->clients);

    To solve the problem it is sufficient to do clients list head
    initialization before calling driver_register().

    The problem was found while using an I2C device driver with a sluggish
    registration routine on a bus provided by a physically detachable I2C
    master controller, but practically the oops may be reproduced under
    the race between arbitraty I2C device driver registration and managing
    I2C bus device removal e.g. by unbinding the latter over sysfs:

    % echo 21a4000.i2c > /sys/bus/platform/drivers/imx-i2c/unbind
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    Internal error: Oops: 17 [#1] SMP ARM
    CPU: 2 PID: 533 Comm: sh Not tainted 4.9.0-rc3+ #61
    Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
    task: e5ada400 task.stack: e4936000
    PC is at i2c_do_del_adapter+0x20/0xcc
    LR is at __process_removed_adapter+0x14/0x1c
    Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
    Control: 10c5387d Table: 35bd004a DAC: 00000051
    Process sh (pid: 533, stack limit = 0xe4936210)
    Stack: (0xe4937d28 to 0xe4938000)
    Backtrace:
    [] (i2c_do_del_adapter) from [] (__process_removed_adapter+0x14/0x1c)
    [] (__process_removed_adapter) from [] (bus_for_each_drv+0x6c/0xa0)
    [] (bus_for_each_drv) from [] (i2c_del_adapter+0xbc/0x284)
    [] (i2c_del_adapter) from [] (i2c_imx_remove+0x44/0x164 [i2c_imx])
    [] (i2c_imx_remove [i2c_imx]) from [] (platform_drv_remove+0x2c/0x44)
    [] (platform_drv_remove) from [] (__device_release_driver+0x90/0x12c)
    [] (__device_release_driver) from [] (device_release_driver+0x28/0x34)
    [] (device_release_driver) from [] (unbind_store+0x80/0x104)
    [] (unbind_store) from [] (drv_attr_store+0x28/0x34)
    [] (drv_attr_store) from [] (sysfs_kf_write+0x50/0x54)
    [] (sysfs_kf_write) from [] (kernfs_fop_write+0x100/0x214)
    [] (kernfs_fop_write) from [] (__vfs_write+0x34/0x120)
    [] (__vfs_write) from [] (vfs_write+0xa8/0x170)
    [] (vfs_write) from [] (SyS_write+0x4c/0xa8)
    [] (SyS_write) from [] (ret_fast_syscall+0x0/0x1c)

    Signed-off-by: Vladimir Zapolskiy
    Signed-off-by: Wolfram Sang
    Cc: stable@kernel.org

    Vladimir Zapolskiy
     

04 Nov, 2016

14 commits

  • When low memory doesn't reach HIGHMEM_START (e.g. up to 256MB at PA=0 is
    common) and highmem is present above HIGHMEM_START (e.g. on Malta the
    RAM overlayed by the IO region is aliased at PA=0x90000000), max_low_pfn
    will be initially calculated very large and then clipped down to
    HIGHMEM_START.

    This causes crashes when reading /sys/kernel/mm/page_idle/bitmap
    (i.e. CONFIG_IDLE_PAGE_TRACKING=y) when highmem is disabled. pfn_valid()
    will compare against max_mapnr which is derived from max_low_pfn when
    there is no highend_pfn set up, and will return true for PFNs right up
    to HIGHMEM_START, even though they are beyond the end of low memory and
    no page structs will actually exist for these PFNs.

    This is fixed by skipping high memory regions when initially calculating
    max_low_pfn if highmem is disabled, so it doesn't get clipped too high.
    We also clip regions which overlap the highmem boundary when highmem is
    disabled, so that max_pfn doesn't extend into highmem either.

    Signed-off-by: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14490/
    Signed-off-by: Ralf Baechle

    James Hogan
     
  • Complement commit 80cbfad79096 ("MIPS: Correct MIPS I FP context
    layout") and correct the way Floating Point General registers are stored
    in a signal context with MIPS I hardware.

    Use the S.D and L.D assembly macros to have pairs of SWC1 instructions
    and pairs of LWC1 instructions produced, respectively, in an arrangement
    which makes the memory representation of floating-point data passed
    compatible with that used by hardware SDC1 and LDC1 instructions, where
    available, regardless of the hardware endianness used. This matches the
    layout used by r4k_fpu.S, ensuring run-time compatibility for MIPS I
    software across all o32 hardware platforms.

    Define an EX2 macro to handle exceptions from both hardware instructions
    implicitly produced from S.D and L.D assembly macros.

    Signed-off-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14477/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Fix a regression introduced with commit 2db9ca0a3551 ("MIPS: Use struct
    mips_abi offsets to save FP context") for MIPS I/I FP signal contexts,
    by converting save/restore code to the updated internal API. Start FGR
    offsets from 0 rather than SC_FPREGS from $a0 and use $a1 rather than
    the offset of SC_FPC_CSR from $a0 for the Floating Point Control/Status
    Register (FCSR).

    Document the new internal API and adjust assembly code formatting for
    consistency.

    Signed-off-by: Maciej W. Rozycki
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14476/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Complement commit e50c0a8fa60d ("Support the MIPS32 / MIPS64 DSP ASE.")
    and remove the Floating Point Implementation Register (FIR) from the FP
    register set recorded in a signal context with MIPS I processors too, in
    line with the change applied to r4k_fpu.S.

    The `sc_fpc_eir' slot is unused according to our current ABI and the FIR
    register is read-only and always directly accessible from user software.

    [ralf@linux-mips.org: This is also required because the next commit depends
    on it.]

    Signed-off-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14475/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Complement commit 0ae8dceaebe3 ("Merge with 2.3.10.") and use the local
    `fault' handler to recover from FP sigcontext access violation faults,
    like corresponding code does in r4k_fpu.S. The `bad_stack' handler is
    in syscall.c and is not suitable here as we want to propagate the error
    condition up through the caller rather than killing the thread outright.

    Signed-off-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14474/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Sanitize FCSR Cause bit handling, following a trail of past attempts:

    * commit 4249548454f7 ("MIPS: ptrace: Fix FP context restoration FCSR
    regression"),

    * commit 443c44032a54 ("MIPS: Always clear FCSR cause bits after
    emulation"),

    * commit 64bedffe4968 ("MIPS: Clear [MSA]FPE CSR.Cause after
    notify_die()"),

    * commit b1442d39fac2 ("MIPS: Prevent user from setting FCSR cause
    bits"),

    * commit b54d2901517d ("Properly handle branch delay slots in connection
    with signals.").

    Specifically do not mask these bits out in ptrace(2) processing and send
    a SIGFPE signal instead whenever a matching pair of an FCSR Cause and
    Enable bit is seen as execution of an affected context is about to
    resume. Only then clear Cause bits, and even then do not clear any bits
    that are set but masked with the respective Enable bits. Adjust Cause
    bit clearing throughout code likewise, except within the FPU emulator
    proper where they are set according to IEEE 754 exceptions raised as the
    operation emulated executed. Do so so that any IEEE 754 exceptions
    subject to their default handling are recorded like with operations
    executed by FPU hardware.

    Signed-off-by: Maciej W. Rozycki
    Cc: Paul Burton
    Cc: James Hogan
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14460/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Complement commit ac9ad83bc318 ("MIPS: prevent FP context set via ptrace
    being discarded") and also initialize the FP context whenever FCSR alone
    is written with a PTRACE_POKEUSR request addressing FPC_CSR, rather than
    along with the full FPU register set in the case of the PTRACE_SETFPREGS
    request.

    Signed-off-by: Maciej W. Rozycki
    Cc: Paul Burton
    Cc: James Hogan
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14459/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from TLB dumps on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output.

    Continuation is also used for the second line of each TLB entry printed
    in dump_tlb.c even though it has a newline, since it is a continuation
    of the interpretation of the same TLB entry. For example:

    [ 46.371884] Index: 0 pgmask=16kb va=77654000 asid=73 gid=00
    [ri=0 xi=0 pa=ffc18000 c=5 d=0 v=1 g=0] [ri=0 xi=0 pa=ffc1c000 c=5 d=0 v=1 g=0]
    [ 46.385380] Index: 12 pgmask=16kb va=004b4000 asid=73 gid=00
    [ri=0 xi=0 pa=00000000 c=0 d=0 v=0 g=0] [ri=0 xi=0 pa=ffb00000 c=5 d=1 v=1 g=0]

    Signed-off-by: James Hogan
    Cc: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14444/
    Signed-off-by: Ralf Baechle

    James Hogan
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from __show_regs() on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected register output.

    Signed-off-by: Paul Burton
    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14432/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from show_code on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output.

    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14431/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from show_stacktrace on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output. Also
    start a new line with printk such that the presence of timing
    information does not interfere with output.

    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14430/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from show_backtrace on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output.

    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14429/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Changes introduced to arch/mips/Makefile for the generic kernel resulted
    in build errors when making a compressed image if platform-y has multiple
    values, like this:

    make[2]: *** No rule to make target `alchemy/'.
    make[1]: *** [vmlinuz] Error 2
    make[1]: Target `_all' not remade because of errors.
    make: *** [sub-make] Error 2
    make: Target `_all' not remade because of errors.

    Fix this by quoting $(platform-y) as it is passed to the Makefile in
    arch/mips/boot/compressed/Makefile

    Reported-by: kernelci.org bot
    Link: https://storage.kernelci.org/next/next-20161017/mips-gpr_defconfig/build.log
    Signed-off-by: Matt Redfearn
    Reviewed-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14405/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • The KASLR code requires that the plat_get_fdt() function return the
    address of the device tree, and it must be available early in the boot,
    before prom_init() is called. Move the code determining the address of
    the device tree into plat_get_fdt, and call that from prom_init().

    The fdt pointer will be set up by plat_get_fdt() called from
    relocate_kernel initially and once the relocated kernel has started,
    prom_init() will use it again to determine the address in the relocated
    image.

    Fixes: eed0eabd12ef ("MIPS: generic: Introduce generic DT-based board support")
    Signed-off-by: Matt Redfearn
    Reviewed-by: James Hogan
    Reviewed-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14415/
    Signed-off-by: Ralf Baechle

    Matt Redfearn