04 Jan, 2021

1 commit

  • This is the 5.10.4 stable release

    * tag 'v5.10.4': (717 commits)
    Linux 5.10.4
    x86/CPU/AMD: Save AMD NodeId as cpu_die_id
    drm/edid: fix objtool warning in drm_cvt_modes()
    ...

    Signed-off-by: Jason Liu

    Conflicts:
    drivers/gpu/drm/imx/dcss/dcss-plane.c
    drivers/media/i2c/ov5640.c

    Jason Liu
     

30 Dec, 2020

3 commits

  • commit d22f9a6c92de96304c81792942ae7c306f08ac77 upstream.

    We execute certain NPU2 setup code (such as mapping an LPID to a device
    in NPU2) unconditionally if an Nvlink bridge is detected. However this
    cannot succeed on POWER8NVL machines as the init helpers return an error
    other than ENODEV which means the device is there is and setup failed so
    vfio_pci_enable() fails and pass through is not possible.

    This changes the two NPU2 related init helpers to return -ENODEV if
    there is no "memory-region" device tree property as this is
    the distinction between NPU and NPU2.

    Tested on
    - POWER9 pvr=004e1201, Ubuntu 19.04 host, Ubuntu 18.04 vm,
    NVIDIA GV100 10de:1db1 driver 418.39
    - POWER8 pvr=004c0100, RHEL 7.6 host, Ubuntu 16.10 vm,
    NVIDIA P100 10de:15f9 driver 396.47

    Fixes: 7f92891778df ("vfio_pci: Add NVIDIA GV100GL [Tesla V100 SXM2] subdriver")
    Cc: stable@vger.kernel.org # 5.0
    Signed-off-by: Alexey Kardashevskiy
    Signed-off-by: Alex Williamson
    Signed-off-by: Greg Kroah-Hartman

    Alexey Kardashevskiy
     
  • commit 16b8fe4caf499ae8e12d2ab1b1324497e36a7b83 upstream.

    In case an error occurs in vfio_pci_enable() before the call to
    vfio_pci_probe_mmaps(), vfio_pci_disable() will try to iterate
    on an uninitialized list and cause a kernel panic.

    Lets move to the initialization to vfio_pci_probe() to fix the
    issue.

    Signed-off-by: Eric Auger
    Fixes: 05f0c03fbac1 ("vfio-pci: Allow to mmap sub-page MMIO BARs if the mmio page is exclusive")
    CC: Stable # v4.7+
    Signed-off-by: Alex Williamson
    Signed-off-by: Greg Kroah-Hartman

    Eric Auger
     
  • [ Upstream commit 7b06a56d468b756ad6bb43ac21b11e474ebc54a0 ]

    commit f8f6ae5d077a ("mm: always have io_remap_pfn_range() set
    pgprot_decrypted()") allows drivers using mmap to put PCI memory mapped
    BAR space into userspace to work correctly on AMD SME systems that default
    to all memory encrypted.

    Since vfio_pci_mmap_fault() is working with PCI memory mapped BAR space it
    should be calling io_remap_pfn_range() otherwise it will not work on SME
    systems.

    Fixes: 11c4cd07ba11 ("vfio-pci: Fault mmaps to enable vma tracking")
    Signed-off-by: Jason Gunthorpe
    Acked-by: Peter Xu
    Tested-by: Tom Lendacky
    Signed-off-by: Alex Williamson
    Signed-off-by: Sasha Levin

    Jason Gunthorpe
     

14 Dec, 2020

1 commit


04 Nov, 2020

5 commits

  • Bypass the IGD initialization when -ENODEV returns,
    that should be the case if opregion is not available for IGD
    or within discrete graphics device's option ROM,
    or host/lpc bridge is not found.

    Then use of -ENODEV here means no special device resources found
    which needs special care for VFIO, but we still allow other normal
    device resource access.

    Cc: Zhenyu Wang
    Cc: Xiong Zhang
    Cc: Hang Yuan
    Cc: Stuart Summers
    Signed-off-by: Fred Gao
    Signed-off-by: Alex Williamson

    Fred Gao
     
  • pm_runtime_get_sync() will increment pm usage counter even it
    failed. Forgetting to call pm_runtime_put will result in
    reference leak in vfio_platform_open, so we should fix it.

    Signed-off-by: Zhang Qilong
    Acked-by: Eric Auger
    Signed-off-by: Alex Williamson

    Zhang Qilong
     
  • The ioeventfd is called under spinlock with interrupts disabled,
    therefore if the memory lock is contended defer code that might
    sleep to a thread context.

    Fixes: bc93b9ae0151 ("vfio-pci: Avoid recursive read-lock usage")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=209253#c1
    Reported-by: Ian Pilcher
    Tested-by: Ian Pilcher
    Tested-by: Justin Gatzen
    Signed-off-by: Alex Williamson

    Alex Williamson
     
  • Fixed compiler warning:
    drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c:16:5: warning: no previous
    prototype for function 'vfio_fsl_mc_irqs_allocate' [-Wmissing-prototypes]
    ^
    drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c:16:1: note: declare 'static'
    if the function is not intended to be used outside of this translation unit
    int vfio_fsl_mc_irqs_allocate(struct vfio_fsl_mc_device *vdev)

    Reported-by: kernel test robot
    Signed-off-by: Diana Craciun
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • My static analsysis tool complains that the "index" can be negative.
    There are some checks in do_mmap() which try to prevent underflows but
    I don't know if they are sufficient for this situation. Either way,
    making "index" unsigned is harmless so let's do it just to be safe.

    Fixes: 67247289688d ("vfio/fsl-mc: Allow userspace to MMAP fsl-mc device MMIO regions")
    Signed-off-by: Dan Carpenter
    Acked-by: Diana Craciun
    Signed-off-by: Alex Williamson

    Dan Carpenter
     

03 Nov, 2020

2 commits


23 Oct, 2020

1 commit

  • Pull VFIO updates from Alex Williamson:

    - New fsl-mc vfio bus driver supporting userspace drivers of objects
    within NXP's DPAA2 architecture (Diana Craciun)

    - Support for exposing zPCI information on s390 (Matthew Rosato)

    - Fixes for "detached" VFs on s390 (Matthew Rosato)

    - Fixes for pin-pages and dma-rw accesses (Yan Zhao)

    - Cleanups and optimize vconfig regen (Zenghui Yu)

    - Fix duplicate irq-bypass token registration (Alex Williamson)

    * tag 'vfio-v5.10-rc1' of git://github.com/awilliam/linux-vfio: (30 commits)
    vfio iommu type1: Fix memory leak in vfio_iommu_type1_pin_pages
    vfio/pci: Clear token on bypass registration failure
    vfio/fsl-mc: fix the return of the uninitialized variable ret
    vfio/fsl-mc: Fix the dead code in vfio_fsl_mc_set_irq_trigger
    vfio/fsl-mc: Fixed vfio-fsl-mc driver compilation on 32 bit
    MAINTAINERS: Add entry for s390 vfio-pci
    vfio-pci/zdev: Add zPCI capabilities to VFIO_DEVICE_GET_INFO
    vfio/fsl-mc: Add support for device reset
    vfio/fsl-mc: Add read/write support for fsl-mc devices
    vfio/fsl-mc: trigger an interrupt via eventfd
    vfio/fsl-mc: Add irq infrastructure for fsl-mc devices
    vfio/fsl-mc: Added lock support in preparation for interrupt handling
    vfio/fsl-mc: Allow userspace to MMAP fsl-mc device MMIO regions
    vfio/fsl-mc: Implement VFIO_DEVICE_GET_REGION_INFO ioctl call
    vfio/fsl-mc: Implement VFIO_DEVICE_GET_INFO ioctl
    vfio/fsl-mc: Scan DPRC objects on vfio-fsl-mc driver bind
    vfio: Introduce capability definitions for VFIO_DEVICE_GET_INFO
    s390/pci: track whether util_str is valid in the zpci_dev
    s390/pci: stash version in the zpci_dev
    vfio/fsl-mc: Add VFIO framework skeleton for fsl-mc devices
    ...

    Linus Torvalds
     

21 Oct, 2020

1 commit

  • pfn is not added to pfn_list when vfio_add_to_pfn_list fails.
    vfio_unpin_page_external will exit directly without calling
    vfio_iova_put_vfio_pfn. This will lead to a memory leak.

    Fixes: a54eb55045ae ("vfio iommu type1: Add support for mediated devices")
    Signed-off-by: Xiaoyang Xu
    [aw: simplified logic, add Fixes]
    Signed-off-by: Alex Williamson

    Xiaoyang Xu
     

19 Oct, 2020

2 commits

  • The eventfd context is used as our irqbypass token, therefore if an
    eventfd is re-used, our token is the same. The irqbypass code will
    return an -EBUSY in this case, but we'll still attempt to unregister
    the producer, where if that duplicate token still exists, results in
    removing the wrong object. Clear the token of failed producers so
    that they harmlessly fall out when unregistered.

    Fixes: 6d7425f109d2 ("vfio: Register/unregister irq_bypass_producer")
    Reported-by: guomin chen
    Tested-by: guomin chen
    Signed-off-by: Alex Williamson

    Alex Williamson
     
  • The vfio_fsl_mc_reflck_attach function may return, on success path,
    an uninitialized variable. Fix the problem by initializing the return
    variable to 0.

    Addresses-Coverity: ("Uninitialized scalar variable")
    Fixes: f2ba7e8c947b ("vfio/fsl-mc: Added lock support in preparation for interrupt handling")
    Reported-by: Colin Ian King
    Signed-off-by: Diana Craciun
    Signed-off-by: Alex Williamson

    Diana Craciun
     

17 Oct, 2020

1 commit

  • The preceding patches have ensured that core dumping properly takes the
    mmap_lock. Thanks to that, we can now remove mmget_still_valid() and all
    its users.

    Signed-off-by: Jann Horn
    Signed-off-by: Andrew Morton
    Acked-by: Linus Torvalds
    Cc: Christoph Hellwig
    Cc: Alexander Viro
    Cc: "Eric W . Biederman"
    Cc: Oleg Nesterov
    Cc: Hugh Dickins
    Link: http://lkml.kernel.org/r/20200827114932.3572699-8-jannh@google.com
    Signed-off-by: Linus Torvalds

    Jann Horn
     

16 Oct, 2020

1 commit


14 Oct, 2020

1 commit

  • The FSL_MC_BUS on which the VFIO-FSL-MC driver is dependent on
    can be compiled on other architectures as well (not only ARM64)
    including 32 bit architectures.
    Include linux/io-64-nonatomic-hi-lo.h to make writeq/readq used
    in the driver available on 32bit platforms.

    Signed-off-by: Diana Craciun
    Signed-off-by: Alex Williamson

    Diana Craciun
     

13 Oct, 2020

11 commits

  • Alex Williamson
     
  • Define a new configuration entry VFIO_PCI_ZDEV for VFIO/PCI.

    When this s390-only feature is configured we add capabilities to the
    VFIO_DEVICE_GET_INFO ioctl that describe features of the associated
    zPCI device and its underlying hardware.

    This patch is based on work previously done by Pierre Morel.

    Signed-off-by: Matthew Rosato
    Reviewed-by: Cornelia Huck
    Signed-off-by: Alex Williamson

    Matthew Rosato
     
  • Currently only resetting the DPRC container is supported which
    will reset all the objects inside it. Resetting individual
    objects is possible from the userspace by issueing commands
    towards MC firmware.

    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • The software uses a memory-mapped I/O command interface (MC portals) to
    communicate with the MC hardware. This command interface is used to
    discover, enumerate, configure and remove DPAA2 objects. The DPAA2
    objects use MSIs, so the command interface needs to be emulated
    such that the correct MSI is configured in the hardware (the guest
    has the virtual MSIs).

    This patch is adding read/write support for fsl-mc devices. The mc
    commands are emulated by the userspace. The host is just passing
    the correct command to the hardware.

    Also the current patch limits userspace to write complete
    64byte command once and read 64byte response by one ioctl.

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • This patch allows to set an eventfd for fsl-mc device interrupts
    and also to trigger the interrupt eventfd from userspace for testing.

    All fsl-mc device interrupts are MSIs. The MSIs are allocated from
    the MSI domain only once per DPRC and used by all the DPAA2 objects.
    The interrupts are managed by the DPRC in a pool of interrupts. Each
    device requests interrupts from this pool. The pool is allocated
    when the first virtual device is setting the interrupts.
    The pool of interrupts is protected by a lock.

    The DPRC has an interrupt of its own which indicates if the DPRC
    contents have changed. However, currently, the contents of a DPRC
    assigned to the guest cannot be changed at runtime, so this interrupt
    is not configured.

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • This patch adds the skeleton for interrupt support
    for fsl-mc devices. The interrupts are not yet functional,
    the functionality will be added by subsequent patches.

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • Only the DPRC object allocates interrupts from the MSI
    interrupt domain. The interrupts are managed by the DPRC in
    a pool of interrupts. The access to this pool of interrupts
    has to be protected with a lock.
    This patch extends the current lock implementation to have a
    lock per DPRC.

    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • Allow userspace to mmap device regions for direct access of
    fsl-mc devices.

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • Expose to userspace information about the memory regions.

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • Allow userspace to get fsl-mc device info (number of regions
    and irqs).

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     
  • The DPRC (Data Path Resource Container) device is a bus device and has
    child devices attached to it. When the vfio-fsl-mc driver is probed
    the DPRC is scanned and the child devices discovered and initialized.

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Diana Craciun
     

08 Oct, 2020

1 commit

  • DPAA2 (Data Path Acceleration Architecture) consists in
    mechanisms for processing Ethernet packets, queue management,
    accelerators, etc.

    The Management Complex (mc) is a hardware entity that manages the DPAA2
    hardware resources. It provides an object-based abstraction for software
    drivers to use the DPAA2 hardware. The MC mediates operations such as
    create, discover, destroy of DPAA2 objects.
    The MC provides memory-mapped I/O command interfaces (MC portals) which
    DPAA2 software drivers use to operate on DPAA2 objects.

    A DPRC is a container object that holds other types of DPAA2 objects.
    Each object in the DPRC is a Linux device and bound to a driver.
    The MC-bus driver is a platform driver (different from PCI or platform
    bus). The DPRC driver does runtime management of a bus instance. It
    performs the initial scan of the DPRC and handles changes in the DPRC
    configuration (adding/removing objects).

    All objects inside a container share the same hardware isolation
    context, meaning that only an entire DPRC can be assigned to
    a virtual machine.
    When a container is assigned to a virtual machine, all the objects
    within that container are assigned to that virtual machine.
    The DPRC container assigned to the virtual machine is not allowed
    to change contents (add/remove objects) by the guest. The restriction
    is set by the host and enforced by the mc hardware.

    The DPAA2 objects can be directly assigned to the guest. However
    the MC portals (the memory mapped command interface to the MC) need
    to be emulated because there are commands that configure the
    interrupts and the isolation IDs which are virtual in the guest.

    Example:
    echo vfio-fsl-mc > /sys/bus/fsl-mc/devices/dprc.2/driver_override
    echo dprc.2 > /sys/bus/fsl-mc/drivers/vfio-fsl-mc/bind

    The dprc.2 is bound to the VFIO driver and all the objects within
    dprc.2 are going to be bound to the VFIO driver.

    This patch adds the infrastructure for VFIO support for fsl-mc
    devices. Subsequent patches will add support for binding and secure
    assigning these devices using VFIO.

    More details about the DPAA2 objects can be found here:
    Documentation/networking/device_drivers/freescale/dpaa2/overview.rst

    Signed-off-by: Bharat Bhushan
    Signed-off-by: Diana Craciun
    Reviewed-by: Eric Auger
    Signed-off-by: Alex Williamson

    Bharat Bhushan
     

23 Sep, 2020

4 commits


22 Sep, 2020

4 commits

  • Commit 492855939bdb ("vfio/type1: Limit DMA mappings per container")
    added the ability to limit the number of memory backed DMA mappings.
    However on s390x, when lazy mapping is in use, we use a very large
    number of concurrent mappings. Let's provide the current allowable
    number of DMA mappings to userspace via the IOMMU info chain so that
    userspace can take appropriate mitigation.

    Signed-off-by: Matthew Rosato
    Reviewed-by: Cornelia Huck
    Signed-off-by: Alex Williamson

    Matthew Rosato
     
  • Page pinning is used both to translate and pin device mappings for DMA
    purpose, as well as to indicate to the IOMMU backend to limit the dirty
    page scope to those pages that have been pinned, in the case of an IOMMU
    backed device.
    To support this, the vfio_pin_pages() interface limits itself to only
    singleton groups such that the IOMMU backend can consider dirty page
    scope only at the group level. Implement the same requirement for the
    vfio_group_pin_pages() interface.

    Fixes: 95fc87b44104 ("vfio: Selective dirty page tracking if IOMMU backed device pins pages")
    Signed-off-by: Yan Zhao
    Signed-off-by: Alex Williamson

    Yan Zhao
     
  • Now we regenerate vconfig for all the BARs via vfio_bar_fixup(), every
    time any offset of any of them are read. Though BARs aren't re-read
    regularly, the regeneration can be avoided if no BARs had been written
    since they were last read, in which case vdev->bardirty is false.

    Let's return immediately in vfio_bar_fixup() if bardirty is false.

    Suggested-by: Alex Williamson
    Signed-off-by: Zenghui Yu
    Reviewed-by: Cornelia Huck
    Signed-off-by: Alex Williamson

    Zenghui Yu
     
  • It was added by commit 137e5531351d ("vfio/pci: Add sriov_configure
    support") but duplicates a forward declaration earlier in the file.

    Remove it.

    Signed-off-by: Zenghui Yu
    Reviewed-by: Cornelia Huck
    Signed-off-by: Alex Williamson

    Zenghui Yu
     

04 Sep, 2020

1 commit