05 Aug, 2015

1 commit

  • Pull md fixes from Neil Brown:
    "Three more fixes for md in 4.2

    Mostly corner-case stuff.

    One of these patches is for a CVE: CVE-2015-5697

    I'm not convinced it is serious (data leak from CAP_SYS_ADMIN ioctl)
    but as people seem to want to back-port it, I've included a minimal
    version here. The remainder of that patch from Benjamin is
    code-cleanup and will arrive in the 4.3 merge window"

    * tag 'md/4.2-rc5-fixes' of git://neil.brown.name/md:
    md/raid5: don't let shrink_slab shrink too far.
    md: use kzalloc() when bitmap is disabled
    md/raid1: extend spinlock to protect raid1_end_read_request against inconsistencies

    Linus Torvalds
     

04 Aug, 2015

10 commits

  • Pull drm mst fixes from Daniel Vetter:
    "Special pull request for mst fixes since most of the patches touch
    code outside of i915 proper. DRM parts have also been reviewed by
    Thierry (nvidia) since Dave's enjoying vacations"

    * tag 'topic/mst-fixes-2015-08-04' of git://anongit.freedesktop.org/drm-intel:
    drm/atomic-helpers: Make encoder picking more robust
    drm/dp-mst: Remove debug WARN_ON
    drm/i915: Fixup dp mst encoder selection
    drm/atomic-helper: Add an atomice best_encoder callback

    Linus Torvalds
     
  • Pull xen bug fixes from David Vrabel:

    - don't lose interrupts when offlining CPUs

    - fix gntdev oops during unmap

    - drop the balloon lock occasionally to allow domain create/destroy

    * tag 'for-linus-4.2-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
    xen/events/fifo: Handle linked events when closing a port
    xen: release lock occasionally during ballooning
    xen/gntdevt: Fix race condition in gntdev_release()

    Linus Torvalds
     
  • An event channel bound to a CPU that was offlined may still be linked
    on that CPU's queue. If this event channel is closed and reused,
    subsequent events will be lost because the event channel is never
    unlinked and thus cannot be linked onto the correct queue.

    When a channel is closed and the event is still linked into a queue,
    ensure that it is unlinked before completing.

    If the CPU to which the event channel bound is online, spin until the
    event is handled by that CPU. If that CPU is offline, it can't handle
    the event, so clear the event queue during the close, dropping the
    events.

    This fixes the missing interrupts (and subsequent disk stalls etc.)
    when offlining a CPU.

    Signed-off-by: Ross Lagerwall
    Cc:
    Signed-off-by: David Vrabel

    Ross Lagerwall
     
  • We've had a few issues with atomic where subtle bugs in the encoder
    picking logic lead to accidental self-stealing of the encoder,
    resulting in a NULL connector_state->crtc in update_connector_routing
    and subsequent.

    Linus applied some duct-tape for an mst regression in

    commit 27667f4744fc5a0f3e50910e78740bac5670d18b
    Author: Linus Torvalds
    Date: Wed Jul 29 22:18:16 2015 -0700

    i915: temporary fix for DP MST docking station NULL pointer dereference

    But that was incomplete (the code will still oops when debuggin is
    enabled) and mangled the state even further. So instead WARN and bail
    out as the more future-proof option.

    Cc: Theodore Ts'o
    Cc: Linus Torvalds
    Reviewed-by: Thierry Reding
    Reviewed-by: Ander Conselvan de Oliveira
    Signed-off-by: Daniel Vetter

    Daniel Vetter
     
  • Apparently been in there since forever and fairly easy to hit when
    hotplugging really fast. I can do that since my mst hub has a manual
    button to flick the hpd line for reprobing. The resulting WARNING spam
    isn't pretty.

    Cc: Dave Airlie
    Cc: stable@vger.kernel.org
    Reviewed-by: Thierry Reding
    Reviewed-by: Ander Conselvan de Oliveira
    Signed-off-by: Daniel Vetter

    Daniel Vetter
     
  • In

    commit 8c7b5ccb729870e606321b3703e2c2e698c49a95
    Author: Ander Conselvan de Oliveira
    Date: Tue Apr 21 17:13:19 2015 +0300

    drm/i915: Use atomic helpers for computing changed flags

    we've switched over to the atomic version to compute the
    crtc->encoder->connector routing from the i915 variant. That one
    relies upon the ->best_encoder callback, but the i915-private version
    relied upon intel_find_encoder. Which didn't matter except for dp mst,
    where the encoder depends upon the selected crtc.

    Fix this functional bug by implemented a correct atomic-state based
    encoder selector for dp mst.

    Note that we can't get rid of the legacy best_encoder callback since
    the fbdev emulation uses that still. That means it's incorrect there
    still, but that's been the case ever since i915 dp mst support was
    merged so not a regression. Best to fix that by converting fbdev over
    to atomic too.

    Cc: Chris Wilson
    Cc: Linus Torvalds
    Cc: Theodore Ts'o
    Reviewed-by: Ander Conselvan de Oliveira
    Signed-off-by: Daniel Vetter

    Daniel Vetter
     
  • With legacy helpers all the routing was already set up when calling
    best_encoder and so could be inspected. But with atomic it's staged,
    hence we need a new atomic compliant callback for drivers which need
    to inspect the requested state and can't just decided the best encoder
    statically.

    This is needed to fix up i915 dp mst where we need to pick the right
    encoder depending upon the requested CRTC for the connector.

    v2: Don't forget to amend the kerneldoc

    Cc: Chris Wilson
    Cc: Linus Torvalds
    Cc: Theodore Ts'o
    Acked-by: Thierry Reding
    Reviewed-by: Ander Conselvan de Oliveira
    Signed-off-by: Daniel Vetter

    Daniel Vetter
     
  • Pull i2c fixes from Wolfram Sang:
    "A refcounting bugfix for the i2c-core, bugfixes for the generic bus
    recovery algorithm and for its omap-user, making binary file
    attributes for EEPROMs behave POSIX compliant, and a small typo fix
    while we are here"

    * 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
    i2c: fix leaked device refcount on of_find_i2c_* error path
    i2c: Fix typo in i2c-bfin-twi.c
    i2c: omap: fix bus recovery setup
    i2c: core: only use set_scl for bus recovery after calling prepare_recovery
    misc: eeprom: at24: clean up at24_bin_write()
    i2c: slave eeprom: clean up sysfs bin attribute read()/write()

    Linus Torvalds
     
  • Pull Ceph fixes from Sage Weil:
    "There are two critical regression fixes for CephFS from Zheng, and an
    RBD completion fix for layered images from Ilya"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
    rbd: fix copyup completion race
    ceph: always re-send cap flushes when MDS recovers
    ceph: fix ceph_encode_locks_to_buffer()

    Linus Torvalds
     
  • Pull crypto fixes from Herbert Xu:
    "This fixes the following issues:

    - a bogus BUG_ON in ixp4xx that can be triggered by a dst buffer that
    is an SG list.

    - the error handling in hwrngd may cause a crash in case of an error.

    - fix a race condition in qat registration when multiple devices are
    present"

    * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
    hwrng: core - correct error check of kthread_run call
    crypto: ixp4xx - Remove bogus BUG_ON on scattered dst buffer
    crypto: qat - Fix invalid synchronization between register/unregister sym algs

    Linus Torvalds
     

03 Aug, 2015

6 commits

  • I have a report of drop_one_stripe() called from
    raid5_cache_scan() apparently finding ->max_nr_stripes == 0.

    This should not be allowed.

    So add a test to keep max_nr_stripes above min_nr_stripes.

    Also use a 'mask' rather than a 'mod' in drop_one_stripe
    to ensure 'hash' is valid even if max_nr_stripes does reach zero.

    Fixes: edbe83ab4c27 ("md/raid5: allow the stripe_cache to grow and shrink.")
    Cc: stable@vger.kernel.org (4.1 - please release with 2d5b569b665)
    Reported-by: Tomas Papan
    Signed-off-by: NeilBrown

    NeilBrown
     
  • In drivers/md/md.c get_bitmap_file() uses kmalloc() for creating a
    mdu_bitmap_file_t called "file".

    5769 file = kmalloc(sizeof(*file), GFP_NOIO);
    5770 if (!file)
    5771 return -ENOMEM;

    This structure is copied to user space at the end of the function.

    5786 if (err == 0 &&
    5787 copy_to_user(arg, file, sizeof(*file)))
    5788 err = -EFAULT

    But if bitmap is disabled only the first byte of "file" is initialized
    with zero, so it's possible to read some bytes (up to 4095) of kernel
    space memory from user space. This is an information leak.

    5775 /* bitmap disabled, zero the first byte and copy out */
    5776 if (!mddev->bitmap_info.file)
    5777 file->pathname[0] = '\0';

    Signed-off-by: Benjamin Randazzo
    Signed-off-by: NeilBrown

    Benjamin Randazzo
     
  • raid1_end_read_request() assumes that the In_sync bits are consistent
    with the ->degaded count.
    raid1_spare_active updates the In_sync bit before the ->degraded count
    and so exposes an inconsistency, as does error()
    So extend the spinlock in raid1_spare_active() and error() to hide those
    inconsistencies.

    This should probably be part of
    Commit: 34cab6f42003 ("md/raid1: fix test for 'was read error from
    last working device'.")
    as it addresses the same issue. It fixes the same bug and should go
    to -stable for same reasons.

    Fixes: 76073054c95b ("md/raid1: clean up read_balance.")
    Cc: stable@vger.kernel.org (v3.0+)
    Signed-off-by: NeilBrown

    NeilBrown
     
  • Pull powerpc fixes from Michael Ellerman:
    - TCE table memory calculation fix from Alexey
    - Build fix for ans-lcd from Luis
    - Unbalanced IRQ warning fix from Alistair

    * tag 'powerpc-4.2-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
    powerpc/eeh-powernv: Fix unbalanced IRQ warning
    macintosh/ans-lcd: fix build failure after module_init/exit relocation
    powerpc/powernv/ioda2: Fix calculation for memory allocated for TCE table

    Linus Torvalds
     
  • Ted Ts'o reports that his Lenovo T540p ThinkPad crashes at boot if
    attached to the docking station. This is a regression that he was able
    to bisect to commit 8c7b5ccb7298: "drm/i915: Use atomic helpers for
    computing changed flags:"

    The reason seems to be the new call to drm_atomic_helper_check_modeset()
    added to intel_modeset_compute_config(), which in turn calls
    update_connector_routing(), and somehow ends up picking a NULL crtc for
    the connector state, causing the subsequent drm_crtc_index() to OOPS.

    Daniel Vetter says that the fundamental issue seems to be confusion in
    the encoder selection, and this isn't the right fix, but while he chases
    down the proper fix, this at least avoids the NULL pointer dereference
    and makes Ted's docking station work again.

    Reported-bisected-and-tested-by: Theodore Ts'o
    Cc: Daniel Vetter
    Cc: Mani Nikula
    Cc: Dave Airlie
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Pull SCSI fixes from James Bottomley:
    "A set of three fixes for the ipr driver and one fairly major one for
    memory leaks in the mq path of SCSI"

    * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    scsi: fix memory leak with scsi-mq
    ipr: Fix invalid array indexing for HRRQ
    ipr: Fix incorrect trace indexing
    ipr: Fix locking for unit attention handling

    Linus Torvalds
     

02 Aug, 2015

2 commits

  • Pull dmaengine fixes from Vinod Koul:
    "We had a regression due to reuse of descriptor so we have reverted
    that.

    The rest are driver fixes:

    - at_hdmac and at_xdmac for residue, trannfer width, and channel config
    - pl330 final fix for dma fails and overflow issue
    - xgene resouce map fix
    - mv_xor big endian op fix"

    * tag 'dmaengine-fix-4.2-rc5' of git://git.infradead.org/users/vkoul/slave-dma:
    Revert "dmaengine: virt-dma: don't always free descriptor upon completion"
    dmaengine: mv_xor: fix big endian operation in register mode
    dmaengine: xgene-dma: Fix the resource map to handle overlapping
    dmaengine: at_xdmac: fix transfer data width in at_xdmac_prep_slave_sg()
    dmaengine: at_hdmac: fix residue computation
    dmaengine: at_xdmac: fix bug about channel configuration
    dmaengine: pl330: Really fix choppy sound because of wrong residue calculation
    dmaengine: pl330: Fix overflow when reporting residue in memcpy

    Linus Torvalds
     
  • Pull x86 fixes from Ingo Molnar:
    "Fallout from the recent NMI fixes: make x86 LDT handling more robust.

    Also some EFI fixes"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/ldt: Make modify_ldt synchronous
    x86/xen: Probe target addresses in set_aliased_prot() before the hypercall
    x86/irq: Use the caller provided polarity setting in mp_check_pin_attr()
    efi: Check for NULL efi kernel parameters
    x86/efi: Use all 64 bit of efi_memmap in setup_e820()

    Linus Torvalds
     

01 Aug, 2015

9 commits

  • If of_find_i2c_device_by_node() or of_find_i2c_adapter_by_node() find
    a device by node, but its type does not match, a reference to that
    device is still held. This change fixes the problem.

    Signed-off-by: Vladimir Zapolskiy
    Signed-off-by: Wolfram Sang

    Vladimir Zapolskiy
     
  • Pull networking fixes from David Miller:

    1) Must teardown SR-IOV before unregistering netdev in igb driver, from
    Alex Williamson.

    2) Fix ipv6 route unreachable crash in IPVS, from Alex Gartrell.

    3) Default route selection in ipv4 should take the prefix length, table
    ID, and TOS into account, from Julian Anastasov.

    4) sch_plug must have a reset method in order to purge all buffered
    packets when the qdisc is reset, likewise for sch_choke, from WANG
    Cong.

    5) Fix deadlock and races in slave_changelink/br_setport in bridging.
    From Nikolay Aleksandrov.

    6) mlx4 bug fixes (wrong index in port even propagation to VFs,
    overzealous BUG_ON assertion, etc.) from Ido Shamay, Jack
    Morgenstein, and Or Gerlitz.

    7) Turn off klog message about SCTP userspace interface compat that
    makes no sense at all, from Daniel Borkmann.

    8) Fix unbounded restarts of inet frag eviction process, causing NMI
    watchdog soft lockup messages, from Florian Westphal.

    9) Suspend/resume fixes for r8152 from Hayes Wang.

    10) Fix busy loop when MSG_WAITALL|MSG_PEEK is used in TCP recv, from
    Sabrina Dubroca.

    11) Fix performance regression when removing a lot of routes from the
    ipv4 routing tables, from Alexander Duyck.

    12) Fix device leak in AF_PACKET, from Lars Westerhoff.

    13) AF_PACKET also has a header length comparison bug due to signedness,
    from Alexander Drozdov.

    14) Fix bug in EBPF tail call generation on x86, from Daniel Borkmann.

    15) Memory leaks, TSO stats, watchdog timeout and other fixes to
    thunderx driver from Sunil Goutham and Thanneeru Srinivasulu.

    16) act_bpf can leak memory when replacing programs, from Daniel
    Borkmann.

    17) WOL packet fixes in gianfar driver, from Claudiu Manoil.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (79 commits)
    stmmac: fix missing MODULE_LICENSE in stmmac_platform
    gianfar: Enable device wakeup when appropriate
    gianfar: Fix suspend/resume for wol magic packet
    gianfar: Fix warning when CONFIG_PM off
    act_pedit: check binding before calling tcf_hash_release()
    net: sk_clone_lock() should only do get_net() if the parent is not a kernel socket
    net: sched: fix refcount imbalance in actions
    r8152: reset device when tx timeout
    r8152: add pre_reset and post_reset
    qlcnic: Fix corruption while copying
    act_bpf: fix memory leaks when replacing bpf programs
    net: thunderx: Fix for crash while BGX teardown
    net: thunderx: Add PCI driver shutdown routine
    net: thunderx: Fix crash when changing rss with mutliple traffic flows
    net: thunderx: Set watchdog timeout value
    net: thunderx: Wakeup TXQ only if CQE_TX are processed
    net: thunderx: Suppress alloc_pages() failure warnings
    net: thunderx: Fix TSO packet statistic
    net: thunderx: Fix memory leak when changing queue count
    net: thunderx: Fix RQ_DROP miscalculation
    ...

    Linus Torvalds
     
  • Commit 50649ab14982 ("stmmac: drop driver from stmmac platform code")
    was a bit overzealous in removing code and dropped the MODULE_*
    macro's that are still needed since stmmac_platform can be a module.
    Fix this by putting the macro's remvoed in 50649ab14982 back.

    This fixes the following errors when used as a module:
    stmmac_platform: module license 'unspecified' taints kernel.
    Disabling lock debugging due to kernel taint
    stmmac_platform: Unknown symbol devm_kmalloc (err 0)
    stmmac_platform: Unknown symbol stmmac_suspend (err 0)
    stmmac_platform: Unknown symbol platform_get_irq_byname (err 0)
    stmmac_platform: Unknown symbol stmmac_dvr_remove (err 0)
    stmmac_platform: Unknown symbol platform_get_resource (err 0)
    stmmac_platform: Unknown symbol of_get_phy_mode (err 0)
    stmmac_platform: Unknown symbol of_property_read_u32_array (err 0)
    stmmac_platform: Unknown symbol of_alias_get_id (err 0)
    stmmac_platform: Unknown symbol stmmac_resume (err 0)
    stmmac_platform: Unknown symbol stmmac_dvr_probe (err 0)

    Fixes: 50649ab14982 ("stmmac: drop driver from stmmac platform code")
    Reported-by: Igor Gnatenko
    Signed-off-by: Joachim Eastwood
    Signed-off-by: David S. Miller

    Joachim Eastwood
     
  • The wol_en flag is 0 by default anyway, and we have the
    following inconsistency: a MAGIC packet wol capable eth
    interface is registered as a wake-up source but unable
    to wake-up the system as wol_en is 0 (wake-on flag set to 'd').
    Calling set_wakeup_enable() at netdev open is just redundant
    because wol_en is 0 by default.
    Let only ethtool call set_wakeup_enable() for now.

    The bflock is obviously obsoleted, its utility has been corroded
    over time. The bitfield flags used today in gianfar are accessed
    only on the init/ config path, with no real possibility of
    concurrency - nothing that would justify smth. like bflock.

    Signed-off-by: Claudiu Manoil
    Signed-off-by: David S. Miller

    Claudiu Manoil
     
  • If we disable NAPI in the first place we can mask the device's
    interrupts (and halt it) without fearing that imask may be
    concurrently accessed from interrupt context, so there's
    no need to do local_irq_save() around gfar_halt_nodisable().
    lock_rx_qs()/unlock_tx_qs() are just obsoleted and potentially
    buggy routines. The txlock is currently used in the driver only
    to manage TX congestion, it has nothing to do with halting the
    device. With these changes, the TX processing is stopped before
    gfar_halt().

    Compact gfar_halt() is used instead of gfar_halt_nodisable(),
    as it disables Rx/TX DMA h/w blocks and the Rx/TX h/w queues.
    gfar_start() re-enables all these blocks on resume. Enabling
    the magic-packet mode remains the same, note that the RX block
    is re-enabled just before entering sleep mode.

    Add IRQF_NO_SUSPEND flag for the error interrupt line, to signal
    that the interrupt line must remain active during sleep in order
    to wake the system by magic packet (MAG) reception interrupt.
    (On some systems the MAG interrupt did trigger w/o this flag
    as well, but on others it didn't.)

    Without these fixes, when suspended during fair Tx traffic the
    interface occasionally failed to be woken up by magic packet.

    Signed-off-by: Claudiu Manoil
    Signed-off-by: David S. Miller

    Claudiu Manoil
     
  • CC drivers/net/ethernet/freescale/gianfar.o
    drivers/net/ethernet/freescale/gianfar.c:568:13: warning: 'lock_tx_qs'
    defined but not used [-Wunused-function]
    static void lock_tx_qs(struct gfar_private *priv)
    ^
    drivers/net/ethernet/freescale/gianfar.c:576:13: warning: 'unlock_tx_qs'
    defined but not used [-Wunused-function]
    static void unlock_tx_qs(struct gfar_private *priv)
    ^

    Reported-by: Scott Wood
    Signed-off-by: Claudiu Manoil
    Signed-off-by: David S. Miller

    Claudiu Manoil
     
  • Pull IOMMU fixes from Joerg Roedel:
    "These fixes are all for the AMD IOMMU driver:

    - A regression with HSA caused by the conversion of the driver to
    default domains. The fixes make sure that an HSA device can still
    be attached to an IOMMUv2 domain and that these domains also allow
    non-IOMMUv2 capable devices.

    - Fix iommu=pt mode which did not work because the dma_ops where set
    to nommu_ops, which breaks devices that can only do 32bit DMA.

    - Fix an issue with non-PCI devices not working, because there are no
    dma_ops for them. This issue was discovered recently as new AMD
    x86 platforms have non-PCI devices too"

    * tag 'iommu-fixes-v4.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
    iommu/amd: Allow non-ATS devices in IOMMUv2 domains
    iommu/amd: Set global dma_ops if swiotlb is disabled
    iommu/amd: Use swiotlb in passthrough mode
    iommu/amd: Allow non-IOMMUv2 devices in IOMMUv2 domains
    iommu/amd: Use iommu core for passthrough mode
    iommu/amd: Use iommu_attach_group()

    Linus Torvalds
     
  • Pull drm intel fixes from Daniel Vetter:
    "I delayed my -fixes pull a bit hoping that I could include a fix for
    the dp mst stuff but looks a bit more nasty than that. So just 3
    other regression fixes, one 4.2 other two cc: stable"

    * tag 'drm-intel-fixes-2015-07-31' of git://anongit.freedesktop.org/drm-intel:
    drm/i915: Declare the swizzling unknown for L-shaped configurations
    drm/i915: Mark PIN_USER binding as GLOBAL_BIND without the aliasing ppgtt
    drm/i915: Replace WARN inside I915_READ64_2x32 with retry loop

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "This has a bunch of nouveau fixes, as Ben has been hibernating and has
    lots of small fixes for lots of bugs across nouveau.

    Radeon has one major fix for hdmi/dp audio regression that is larger
    than Alex would like, but seems to fix up a fair few bugs, along with
    some misc fixes.

    And a few msm fixes, one of which is also a bit large.

    But nothing in here seems insane or crazy for this stage, just more
    than I'd like"

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (33 commits)
    drm/msm/mdp5: release SMB (shared memory blocks) in various cases
    drm/msm: change to uninterruptible wait in atomic commit
    drm/msm: mdp4: Fix drm_framebuffer dereference crash
    drm/msm: fix msm_gem_prime_get_sg_table()
    drm/amdgpu: add new parameter to seperate map and unmap
    drm/amdgpu: hdp_flush is not needed for inside IB
    drm/amdgpu: different emit_ib for gfx and compute
    drm/amdgpu: information leak in amdgpu_info_ioctl()
    drm/amdgpu: clean up init sequence for failures
    drm/radeon/combios: add some validation of lvds values
    drm/radeon: rework audio modeset to handle non-audio hdmi features
    drm/radeon: rework audio detect (v4)
    drm/amdgpu: Drop drm/ prefix for including drm.h in amdgpu_drm.h
    drm/radeon: Drop drm/ prefix for including drm.h in radeon_drm.h
    drm/nouveau/nouveau/ttm: fix tiled system memory with Maxwell
    drm/nouveau/kms/nv50-: guard against enabling cursor on disabled heads
    drm/nouveau/fbcon/g80: reduce PUSH_SPACE alloc, fire ring on accel init
    drm/nouveau/fbcon/gf100-: reduce RING_SPACE allocation
    drm/nouveau/fbcon/nv11-: correctly account for ring space usage
    drm/nouveau/bios: add proper support for opcode 0x59
    ...

    Linus Torvalds
     

31 Jul, 2015

12 commits

  • This reverts commit b9855f03d560d351e95301b9de0bc3cad3b31fe9.
    The patch break existing DMA usage case. For example, audio SOC
    dmaengine never release channel and cause virt-dma to cache too
    much memory in descriptor to exhaust system memory.

    Signed-off-by: Vinod Koul

    Jun Nie
     
  • Commit 6f166312c6ea2 ("dmaengine: mv_xor: add support for a38x command
    in descriptor mode") introduced the support for a feature that
    appeared in Armada 38x: specifying the operation to be performed in a
    per-descriptor basis rather than globally per channel.

    However, when doing so, it changed the function mv_chan_set_mode() to
    use:

    if (IS_ENABLED(__BIG_ENDIAN))

    instead of:

    #if defined(__BIG_ENDIAN)

    While IS_ENABLED() is perfectly fine for CONFIG_* symbols, it is not
    for other symbols such as __BIG_ENDIAN that is provided directly by
    the compiler. Consequently, the commit broke support for big-endian,
    as the XOR_DESCRIPTOR_SWAP flag was not set in the XOR channel
    configuration register.

    The primarily visible effect was some nasty warnings and failures
    appearing during the self-test of the XOR unit:

    [ 1.197368] mv_xor d0060900.xor: error on chan 0. intr cause 0x00000082
    [ 1.197393] mv_xor d0060900.xor: config 0x00008440
    [ 1.197410] mv_xor d0060900.xor: activation 0x00000000
    [ 1.197427] mv_xor d0060900.xor: intr cause 0x00000082
    [ 1.197443] mv_xor d0060900.xor: intr mask 0x000003f7
    [ 1.197460] mv_xor d0060900.xor: error cause 0x00000000
    [ 1.197477] mv_xor d0060900.xor: error addr 0x00000000
    [ 1.197491] ------------[ cut here ]------------
    [ 1.197513] WARNING: CPU: 0 PID: 1 at ../drivers/dma/mv_xor.c:664 mv_xor_interrupt_handler+0x14c/0x170()

    See also:

    http://storage.kernelci.org/next/next-20150617/arm-mvebu_v7_defconfig+CONFIG_CPU_BIG_ENDIAN=y/lab-khilman/boot-armada-xp-openblocks-ax3-4.txt

    Signed-off-by: Thomas Petazzoni
    Fixes: 6f166312c6ea2 ("dmaengine: mv_xor: add support for a38x command in descriptor mode")
    Reviewed-by: Maxime Ripard
    Signed-off-by: Vinod Koul

    Thomas Petazzoni
     
  • There is an overlap in dma ring cmd csr region due to sharing of ethernet
    ring cmd csr region. This patch fix the resource overlapping by mapping
    the entire dma ring cmd csr region.

    Signed-off-by: Rameshwar Prasad Sahu
    Signed-off-by: Vinod Koul

    Rameshwar Prasad Sahu
     
  • This patch adds the missing update of the transfer data width in
    at_xdmac_prep_slave_sg().

    Indeed, for each item in the scatter-gather list, we check whether the
    transfer length is aligned with the data width provided by
    dmaengine_slave_config(). If so, we directly use this data width for the
    current part of the transfer we are preparing. Otherwise, the data width
    is reduced to 8 bits (1 byte). Of course, the actual number of register
    accesses must also be updated to match the new data width.

    So one chunk was missing in the original patch (see Fixes tag below): the
    number of register accesses was correctly set to (len >> fixed_dwidth) in
    mbr_ubc but the real data width was not updated in mbr_cfg. Since mbr_cfg
    may change for each part of the scatter-gather transfer this also explains
    why the original patch used the Descriptor View 2 instead of the
    Descriptor View 1.

    Let's take the example of a DMA transfer to write 8bit data into an Atmel
    USART with FIFOs. When FIFOs are enabled in the USART, its Transmit
    Holding Register (THR) works in multidata mode, that is to say that up to
    4 8bit data can be written into the THR in a single 32bit access and it is
    still possible to write only one data with a 8bit access. To take
    advantage of this new feature, the DMA driver was modified to allow
    multiple dwidths when doing slave transfers.
    For instance, when the total length is 22 bytes, the USART driver splits
    the transfer into 2 parts:

    First part: 20 bytes transferred through 5 32bit writes into THR
    Second part: 2 bytes transferred though 2 8bit writes into THR

    For the second part, the data width was first set to 4_BYTES by the USART
    driver thanks to dmaengine_slave_config() then at_xdmac_prep_slave_sg()
    reduces this data width to 1_BYTE because the 2 byte length is not aligned
    with the original 4_BYTES data width. Since the data width is modified,
    the actual number of writes into THR must be set accordingly.

    Signed-off-by: Cyrille Pitchen
    Fixes: 6d3a7d9e3ada ("dmaengine: at_xdmac: allow muliple dwidths when doing slave transfers")
    Cc: stable@vger.kernel.org #4.0 and later
    Acked-by: Nicolas Ferre
    Acked-by: Ludovic Desroches
    Signed-off-by: Vinod Koul

    Cyrille Pitchen
     
  • As claimed by the programmer datasheet and confirmed by the IP designer,
    the Block Transfer Size (BTSIZE) bitfield of the Channel x Control A
    Register (CTRLAx) always refers to a number of Source Width (SRC_WIDTH)
    transfers.

    Both the SRC_WIDTH and BTSIZE bitfields can be extacted from the CTRLAx
    register to compute the DMA residue. So the 'tx_width' field is useless
    and can be removed from the struct at_desc.

    Before this patch, atc_prep_slave_sg() was not consistent: BTSIZE was
    correctly initialized according to the SRC_WIDTH but 'tx_width' was always
    set to reg_width, which was incorrect for MEM_TO_DEV transfers. It led to
    bad DMA residue when 'tx_width' != SRC_WIDTH.

    Also the 'tx_width' field was mostly set only in the first and last
    descriptors. Depending on the kind of DMA transfer, this field remained
    uninitialized for intermediate descriptors. The accurate DMA residue was
    computed only when the currently processed descriptor was the first or the
    last of the chain. This algorithm was a little bit odd. An accurate DMA
    residue can always be computed using the SRC_WIDTH and BTSIZE bitfields
    in the CTRLAx register.

    Finally, the test to check whether the currently processed descriptor is
    the last of the chain was wrong: for cyclic transfer, last_desc->lli.dscr
    is NOT equal to zero, since set_desc_eol() is never called, but logically
    equal to first_desc->txd.phys. This bug has a side effect on the
    drivers/tty/serial/atmel_serial.c driver, which uses cyclic DMA transfer
    to receive data. Since the DMA residue was wrong each time the DMA
    transfer reaches the second (and last) period of the transfer, no more
    data were received by the USART driver till the cyclic DMA transfer loops
    back to the first period.

    Signed-off-by: Cyrille Pitchen
    Acked-by: Torsten Fleischer
    Tested-by: Jirí Prchal
    Acked-by: Nicolas Ferre
    Signed-off-by: Vinod Koul

    Cyrille Pitchen
     
  • When using descriptor view 2 or higher, we don't write the configuration
    into AT_XDMAC_CC register because this configuration will be fetch from
    the descriptor. Unfortunately, the PROT bit is not updated with this
    method, we have to do it manually before enabling the channel.

    Signed-off-by: Ludovic Desroches
    Signed-off-by: Vinod Koul

    Ludovic Desroches
     
  • With the grouping of multi-function devices a non-ATS
    capable device might also end up in the same domain as an
    IOMMUv2 capable device.
    So handle this situation gracefully and don't consider it a
    bug anymore.

    Tested-by: Oded Gabbay
    Signed-off-by: Joerg Roedel

    Joerg Roedel
     
  • This patch fix some typos found in a printk message and
    MODULE_DESCRIPTION.

    Signed-off-by: Masanari Iida
    Acked-by: Sonic Zhang
    Signed-off-by: Wolfram Sang

    Masanari Iida
     
  • At least on the AM335x, enabling OMAP_I2C_SYSTEST_ST_EN is not enough to
    allow direct access to the SCL and SDA pins. In addition to ST_EN, we
    need to set the TMODE to 0b11 (Loop back & SDA/SCL IO mode select).
    Also, as the reset values of SCL_O and SDA_O are 0 (which means "drive
    low level"), we need to set them to 1 (which means "high-impedance") to
    avoid unwanted changes on the pins.

    As a precaution, reset all these bits to their default values after
    recovery is complete.

    Signed-off-by: Jan Luebbe
    Tested-by: Alexander Sverdlin
    Reviewed-by: Grygorii Strashko
    Signed-off-by: Wolfram Sang

    Jan Luebbe
     
  • Using set_scl may be ineffective before calling the driver specific
    prepare_recovery callback, which might change into a test mode. So
    instead of setting SCL in i2c_generic_scl_recovery, move it to
    i2c_generic_recovery (after the optional prepare_recovery).

    Signed-off-by: Jan Luebbe
    Acked-by: Alexander Sverdlin
    Tested-by: Alexander Sverdlin
    Signed-off-by: Wolfram Sang

    Jan Luebbe
     
  • The change removes redundant sysfs binary file boundary check, since
    this task is already done on caller side in fs/sysfs/file.c

    Signed-off-by: Vladimir Zapolskiy
    Signed-off-by: Wolfram Sang

    Vladimir Zapolskiy
     
  • The change removes redundant sysfs binary file boundary checks,
    since this task is already done on caller side in fs/sysfs/file.c

    Note, on file size overflow read() now returns 0, and this is a
    correct and expected EOF notification according to POSIX.

    Signed-off-by: Vladimir Zapolskiy
    Signed-off-by: Wolfram Sang

    Vladimir Zapolskiy