10 Jul, 2020

1 commit


03 Jul, 2020

4 commits

  • uio_pdrv_genirq and uio_dmem_genirq interrupts are handled in
    userspace. So the condition for the interrupt hasn't normally not been
    cleared when top half returns. disable_irq_nosync is called in top half,
    but since that normally is lazy the irq isn't actually disabled.

    For level triggered interrupts this will always result in a spurious
    additional fire since the level in to the interrupt controller still is
    active. The actual interrupt handler isn't run though since this
    spurious irq is just recorded, and later on discared (for level).

    This commit disables lazy masking for level triggered interrupts. It
    leaves edge triggered interrupts as before, because they work with the
    lazy scheme.

    All other UIO drivers already seem to clear the interrupt cause at
    driver levels.

    Example of double fire. First goes all the way up to
    uio_pdrv_genirq_handler, second is terminated in handle_fasteoi_irq and
    marked as pending.

    -0 [000] d... 8.245870: gic_handle_irq: irq 29
    -0 [000] d.h. 8.245873: uio_pdrv_genirq_handler: disable irq 29
    -0 [000] d... 8.245878: gic_handle_irq: irq 29
    -0 [000] d.h. 8.245880: handle_fasteoi_irq: irq 29 PENDING
    HInt-34 [001] d... 8.245897: uio_pdrv_genirq_irqcontrol: enable irq 29

    Tested on 5.7rc2 using uio_pdrv_genirq and a custom Xilinx MPSoC board.

    Signed-off-by: Thommy Jakobsson
    Link: https://lore.kernel.org/r/20200628141229.16121-1-thommyj@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Thommy Jakobsson
     
  • Similar to the changes made in 270579d95f82 ("uio_mf624: Align memory
    regions to page size and set correct offsets"), this will allow
    uio_pdrv_genirq devices to expose memory regions that is not page-aligned,
    requiring the users to respect the offset sysfs attribute (as implemented
    in libuio).

    Signed-off-by: Esben Haabendal
    Link: https://lore.kernel.org/r/20200701145659.3978-4-esben@geanix.com
    Signed-off-by: Greg Kroah-Hartman

    Esben Haabendal
     
  • While e3a3c3a20555 ("UIO: fix uio_pdrv_genirq with device tree but no
    interrupt") added support for using uio_pdrv_genirq for devices without
    interrupt for device tree platforms, the removal of uio_pdrv in
    26dac3c49d56 ("uio: Remove uio_pdrv and use uio_pdrv_genirq instead")
    broke the support for non device tree platforms.

    This change fixes this, so that uio_pdrv_genirq can be used without
    interrupt on all platforms.

    This still leaves the support that uio_pdrv had for custom interrupt
    handler lacking, as uio_pdrv_genirq does not handle it (yet).

    Fixes: 26dac3c49d56 ("uio: Remove uio_pdrv and use uio_pdrv_genirq instead")
    Signed-off-by: Esben Haabendal
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20200701145659.3978-3-esben@geanix.com
    Signed-off-by: Greg Kroah-Hartman

    Esben Haabendal
     
  • Since e3a3c3a20555 ("UIO: fix uio_pdrv_genirq with device tree but no
    interrupt"), the uio_pdrv_genirq has supported use without interrupt,
    so the change in 7723f4c5ecdb ("driver core: platform: Add an error
    message to") added false warnings for those cases.

    Fixes: 7723f4c5ecdb ("driver core: platform: Add an error message to platform_get_irq*()")
    Signed-off-by: Esben Haabendal
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20200701145659.3978-2-esben@geanix.com
    Signed-off-by: Greg Kroah-Hartman

    Esben Haabendal
     

15 May, 2020

1 commit

  • This driver calls sysfs_create_bin_file() in probe, but forgets to
    call sysfs_remove_bin_file() in remove.
    Add the missed call to fix it.

    Signed-off-by: Chuhong Yuan
    Link: https://lore.kernel.org/r/20200507151343.792816-1-hslester96@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Chuhong Yuan
     

28 Apr, 2020

2 commits


18 Mar, 2020

2 commits

  • This change makes use of the new devm_uio_register_device() initializer.
    This cleans up the exit path quite nicely, and removes the remove function
    of the driver.

    Signed-off-by: Alexandru Ardelean
    Link: https://lore.kernel.org/r/20200306161853.25368-2-alexandru.ardelean@analog.com
    Signed-off-by: Greg Kroah-Hartman

    Alexandru Ardelean
     
  • This change adds a resource managed equivalent of uio_register_device().
    Not adding devm_uio_unregister_device(), since the intent is to discourage
    it's usage. Having such a function may allow some bad driver designs. Most
    users of devm_*register*() functions rarely use the unregister equivalents.

    Signed-off-by: Alexandru Ardelean
    Link: https://lore.kernel.org/r/20200306161853.25368-1-alexandru.ardelean@analog.com
    Signed-off-by: Greg Kroah-Hartman

    Alexandru Ardelean
     

14 Jan, 2020

2 commits

  • When deferring the probe routine just return without displaying an
    error.

    Signed-off-by: Oscar Ravadilla
    Link: https://lore.kernel.org/r/20200108001648.2949-1-oscar.ravadilla@alliedtelesis.co.nz
    Signed-off-by: Greg Kroah-Hartman

    Oscar Ravadilla
     
  • The driver may sleep while holding a spinlock.
    The function call path (from bottom to top) in Linux 4.19 is:

    kernel/irq/manage.c, 523:
    synchronize_irq in disable_irq
    drivers/uio/uio_dmem_genirq.c, 140:
    disable_irq in uio_dmem_genirq_irqcontrol
    drivers/uio/uio_dmem_genirq.c, 134:
    _raw_spin_lock_irqsave in uio_dmem_genirq_irqcontrol

    synchronize_irq() can sleep at runtime.

    To fix this bug, disable_irq() is called without holding the spinlock.

    This bug is found by a static analysis tool STCheck written by myself.

    Signed-off-by: Jia-Ju Bai
    Link: https://lore.kernel.org/r/20191218094405.6009-1-baijiaju1990@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Jia-Ju Bai
     

14 Nov, 2019

1 commit

  • This change also does a bit of a unification for the IRQ init code.

    But the actual problem is that UIO_IRQ_NONE == 0, so for the DT case where
    UIO_IRQ_NONE gets assigned to `uioinfo->irq`, a 2nd initialization will get
    triggered (for the IRQ) and this one will exit via `goto bad1`.

    As far as things seem to go, the only case where UIO_IRQ_NONE seems valid,
    is when using a device-tree. The driver has some legacy support for old
    platform_data structures. It looks like, for platform_data a non-existent
    IRQ is an invalid case (or was considered an invalid case).
    Which is why -ENXIO is treated only when a DT is used.

    Signed-off-by: Dragos Bogdan
    Signed-off-by: Alexandru Ardelean
    Acked-by: Damian Hobson-Garcia
    Link: https://lore.kernel.org/r/20191105073212.16719-1-alexandru.ardelean@analog.com
    Signed-off-by: Greg Kroah-Hartman

    Alexandru Ardelean
     

19 Sep, 2019

1 commit

  • Pull char/misc driver updates from Greg KH:
    "Here is the big char/misc driver pull request for 5.4-rc1.

    As has been happening in previous releases, more and more individual
    driver subsystem trees are ending up in here. Now if that is good or
    bad I can't tell, but hopefully it makes your life easier as it's more
    of an aggregation of trees together to one merge point for you.

    Anyway, lots of stuff in here:
    - habanalabs driver updates
    - thunderbolt driver updates
    - misc driver updates
    - coresight and intel_th hwtracing driver updates
    - fpga driver updates
    - extcon driver updates
    - some dma driver updates
    - char driver updates
    - android binder driver updates
    - nvmem driver updates
    - phy driver updates
    - parport driver fixes
    - pcmcia driver fix
    - uio driver updates
    - w1 driver updates
    - configfs fixes
    - other assorted driver updates

    All of these have been in linux-next for a long time with no reported
    issues"

    * tag 'char-misc-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (200 commits)
    misc: mic: Use PTR_ERR_OR_ZERO rather than its implementation
    habanalabs: correctly cast variable to __le32
    habanalabs: show correct id in error print
    habanalabs: stop using the acronym KMD
    habanalabs: display card name as sensors header
    habanalabs: add uapi to retrieve aggregate H/W events
    habanalabs: add uapi to retrieve device utilization
    habanalabs: Make the Coresight timestamp perpetual
    habanalabs: explicitly set the queue-id enumerated numbers
    habanalabs: print to kernel log when reset is finished
    habanalabs: replace __le32_to_cpu with le32_to_cpu
    habanalabs: replace __cpu_to_le32/64 with cpu_to_le32/64
    habanalabs: Handle HW_IP_INFO if device disabled or in reset
    habanalabs: Expose devices after initialization is done
    habanalabs: improve security in Debug IOCTL
    habanalabs: use default structure for user input in Debug IOCTL
    habanalabs: Add descriptive name to PSOC app status register
    habanalabs: Add descriptive names to PSOC scratch-pad registers
    habanalabs: create two char devices per ASIC
    habanalabs: change device_setup_cdev() to be more generic
    ...

    Linus Torvalds
     

04 Sep, 2019

1 commit

  • When probed via DT, the uio_pdrv_genirq driver currently uses the name
    of the node and exposes that as name of the UIO device to userspace.

    This doesn't work for systems where multiple nodes with the same name
    (but different unit addresses) are present, or for systems where the
    node names are auto-generated by a third-party tool.

    This patch adds the possibility to read the UIO name from the optional
    "linux,uio-name" property.

    Signed-off-by: Daniel Mack
    Link: https://lore.kernel.org/r/20190815212807.25058-1-daniel@zonque.org
    Signed-off-by: Greg Kroah-Hartman

    Daniel Mack
     

02 Aug, 2019

1 commit


31 Jul, 2019

1 commit

  • We don't need dev_err() messages when platform_get_irq() fails now that
    platform_get_irq() prints an error message itself when something goes
    wrong. Let's remove these prints with a simple semantic patch.

    //
    @@
    expression ret;
    struct platform_device *E;
    @@

    ret =
    (
    platform_get_irq(E, ...)
    |
    platform_get_irq_byname(E, ...)
    );

    if ( \( ret < 0 \| ret

    While we're here, remove braces on if statements that only have one
    statement (manually).

    Cc: Greg Kroah-Hartman
    Cc: Greg Kroah-Hartman
    Signed-off-by: Stephen Boyd
    Link: https://lore.kernel.org/r/20190730181557.90391-46-swboyd@chromium.org
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     

19 Jun, 2019

1 commit

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

05 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation this program is
    distributed in the hope that it will be useful but without any
    warranty without even the implied warranty of merchantability or
    fitness for a particular purpose see the gnu general public license
    for more details you should have received a copy of the gnu general
    public license along with this program if not write to the free
    software foundation inc 59 temple place suite 330 boston ma 02111
    1307 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 136 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Alexios Zavras
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190530000436.384967451@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

24 May, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license or at
    your option any later version this program is distributed in the
    hope that it will be useful but without any warranty without even
    the implied warranty of merchantability or fitness for a particular
    purpose see the gnu general public license for more details you
    should have received a copy of the gnu general public license along
    with this program if not write to the free software foundation inc
    675 mass ave cambridge ma 02139 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 441 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Michael Ellerman (powerpc)
    Reviewed-by: Richard Fontana
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190520071858.739733335@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

21 May, 2019

1 commit


28 Mar, 2019

1 commit


31 Jan, 2019

3 commits

  • In uio_dev_add_attributes() error handing case, idev is used after
    device_unregister(), in which 'idev' has been released, touch idev cause
    use-after-free.

    Fixes: a93e7b331568 ("uio: Prevent device destruction while fds are open")
    Signed-off-by: Liu Jian
    Reviewed-by: Hamish Martin
    Signed-off-by: Greg Kroah-Hartman

    Liu Jian
     
  • 'idev' is malloced in __uio_register_device() and leak free it before
    leaving from the uio_get_minor() error handing case, it will cause
    memory leak.

    Fixes: a93e7b331568 ("uio: Prevent device destruction while fds are open")
    Signed-off-by: Liu Jian
    Reviewed-by: Hamish Martin
    Signed-off-by: Greg Kroah-Hartman

    Liu Jian
     
  • Userspace code using uio_pci_generic may enable bus-mastering by
    directly manipulating a PCI device's command register. If a userspace
    program enables bus-mastering but exits/crashes uncleanly, bus-
    mastering will still be enabled and stale DMA addresses may be
    programmed and live in the device.

    Disable bus-mastering unconditionally on last close of a UIO PCI fd
    to avoid this. If the device did not have bus-mastering enabled,
    pci_clear_master() is a no-op.

    Signed-off-by: Venkatesh Srinivas
    Reviewed-by: Bjorn Helgaas
    Reviewed-by: Catherine Sullivan
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Greg Kroah-Hartman

    Venkatesh Srinivas
     

22 Jan, 2019

2 commits


29 Dec, 2018

1 commit

  • Pull char/misc driver updates from Greg KH:
    "Here is the big set of char and misc driver patches for 4.21-rc1.

    Lots of different types of driver things in here, as this tree seems
    to be the "collection of various driver subsystems not big enough to
    have their own git tree" lately.

    Anyway, some highlights of the changes in here:

    - binderfs: is it a rule that all driver subsystems will eventually
    grow to have their own filesystem? Binder now has one to handle the
    use of it in containerized systems.

    This was discussed at the Plumbers conference a few months ago and
    knocked into mergable shape very fast by Christian Brauner. Who
    also has signed up to be another binder maintainer, showing a
    distinct lack of good judgement :)

    - binder updates and fixes

    - mei driver updates

    - fpga driver updates and additions

    - thunderbolt driver updates

    - soundwire driver updates

    - extcon driver updates

    - nvmem driver updates

    - hyper-v driver updates

    - coresight driver updates

    - pvpanic driver additions and reworking for more device support

    - lp driver updates. Yes really, it's _finally_ moved to the proper
    parallal port driver model, something I never thought I would see
    happen. Good stuff.

    - other tiny driver updates and fixes.

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

    * tag 'char-misc-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (116 commits)
    MAINTAINERS: add another Android binder maintainer
    intel_th: msu: Fix an off-by-one in attribute store
    stm class: Add a reference to the SyS-T document
    stm class: Fix a module refcount leak in policy creation error path
    char: lp: use new parport device model
    char: lp: properly count the lp devices
    char: lp: use first unused lp number while registering
    char: lp: detach the device when parallel port is removed
    char: lp: introduce list to save port number
    bus: qcom: remove duplicated include from qcom-ebi2.c
    VMCI: Use memdup_user() rather than duplicating its implementation
    char/rtc: Use of_node_name_eq for node name comparisons
    misc: mic: fix a DMA pool free failure
    ptp: fix an IS_ERR() vs NULL check
    genwqe: Fix size check
    binder: implement binderfs
    binder: fix use-after-free due to ksys_close() during fdget()
    bus: fsl-mc: remove duplicated include files
    bus: fsl-mc: explicitly define the fsl_mc_command endianness
    misc: ti-st: make array read_ver_cmd static, shrinks object size
    ...

    Linus Torvalds
     

11 Dec, 2018

1 commit

  • This fixes the problem where uio application was unable to
    use multple queues on restart. The root cause is that the callbacks
    are cleared on disconnect. Change to setting up callbacks
    everytime in open.

    Fixes: cdfa835c6e5e ("uio_hv_generic: defer opening vmbus until first use")
    Reported-by: Mohammed Gamal
    Signed-off-by: Stephen Hemminger
    Signed-off-by: Greg Kroah-Hartman

    Stephen Hemminger
     

27 Nov, 2018

1 commit


26 Nov, 2018

1 commit


12 Nov, 2018

2 commits

  • We should get 'driver_data' from 'struct device' directly. Going via
    platform_device is an unneeded step back and forth.

    Signed-off-by: Wolfram Sang
    Signed-off-by: Greg Kroah-Hartman

    Wolfram Sang
     
  • I was trying to solve a double free but I introduced a more serious
    NULL dereference bug. The problem is that if there is an IRQ which
    triggers immediately, then we need "info->uio_dev" but it's not set yet.

    This patch puts the original initialization back to how it was and just
    sets info->uio_dev to NULL on the error path so it should solve both
    the Oops and the double free.

    Fixes: f019f07ecf6a ("uio: potential double frees if __uio_register_device() fails")
    Reported-by: Mathias Thore
    Signed-off-by: Dan Carpenter
    Cc: stable
    Tested-by: Mathias Thore
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     

03 Oct, 2018

2 commits


26 Sep, 2018

4 commits

  • This fixes two design flaws in hv_uio_generic.

    Since hv_uio_probe is called from vmbus_probe with lock held
    it potentially can cause sleep in an atomic section because
    vmbus_open will wait for response from host.

    The hv_uio_generic driver could not handle applications
    exiting and restarting because the vmbus channel was
    persistent. Change the semantics so that the buffers are
    allocated on probe, but not attached to host until
    device is opened.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: Greg Kroah-Hartman

    Stephen Hemminger
     
  • The ring buffer is contiguous IOVA and is mapped via phys addr
    for sysfs file. Use same method for the UIO mapping.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: Greg Kroah-Hartman

    Stephen Hemminger
     
  • Introduce the concept of mapping physical memory locations that
    are normal memory. The new type UIO_MEM_IOVA are similar to
    existing UIO_MEM_PHYS but the backing memory is not marked as uncached.

    Also, indent related switch to the currently used style.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: Greg Kroah-Hartman

    Stephen Hemminger
     
  • Avoid going from struct page to virt address (and back) by just
    keeping pointer to the allocated pages instead of virt address.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: Greg Kroah-Hartman

    Stephen Hemminger
     

12 Sep, 2018

1 commit

  • As part of commit 9b85e95a3080 ("uio: Change return
    type to vm_fault_t") in 4.19-rc1, this conversion
    was missed. Now converted 'ret' to vm_fault_t type.

    Signed-off-by: Souptick Joarder
    Signed-off-by: Greg Kroah-Hartman

    Souptick Joarder