09 Feb, 2019

1 commit


31 Jan, 2019

2 commits

  • Pull IOMMU fixes from Joerg Roedel:
    "A few more fixes this time:

    - Two patches to fix the error path of the map_sg implementation of
    the AMD IOMMU driver.

    - Also a missing IOTLB flush is fixed in the AMD IOMMU driver.

    - Memory leak fix for the Intel IOMMU driver.

    - Fix a regression in the Mediatek IOMMU driver which caused device
    initialization to fail (seen as broken HDMI output)"

    * tag 'iommu-fixes-v5.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
    iommu/amd: Fix IOMMU page flush when detach device from a domain
    iommu/mediatek: Use correct fwspec in mtk_iommu_add_device()
    iommu/vt-d: Fix memory leak in intel_iommu_put_resv_regions()
    iommu/amd: Unmap all mapped pages in error path of map_sg
    iommu/amd: Call free_iova_fast with pfn in map_sg

    Linus Torvalds
     
  • Commit 765b6a98c1de3 ("iommu/vt-d: Enumerate the scalable
    mode capability") enables VT-d scalable mode if hardware
    advertises the capability. As we will bring up different
    features and use cases to upstream in different patch
    series, it will leave some intermediate kernel versions
    which support partial features. Hence, end user might run
    into problems when they use such kernels on bare metals
    or virtualization environments.

    This leaves scalable mode default off and end users could
    turn it on with "intel-iommu=sm_on" only when they have
    clear ideas about which scalable features are supported
    in the kernel.

    Cc: Liu Yi L
    Cc: Jacob Pan
    Suggested-by: Ashok Raj
    Suggested-by: Kevin Tian
    Signed-off-by: Lu Baolu
    Signed-off-by: Joerg Roedel

    Lu Baolu
     

24 Jan, 2019

1 commit

  • When a VM is terminated, the VFIO driver detaches all pass-through
    devices from VFIO domain by clearing domain id and page table root
    pointer from each device table entry (DTE), and then invalidates
    the DTE. Then, the VFIO driver unmap pages and invalidate IOMMU pages.

    Currently, the IOMMU driver keeps track of which IOMMU and how many
    devices are attached to the domain. When invalidate IOMMU pages,
    the driver checks if the IOMMU is still attached to the domain before
    issuing the invalidate page command.

    However, since VFIO has already detached all devices from the domain,
    the subsequent INVALIDATE_IOMMU_PAGES commands are being skipped as
    there is no IOMMU attached to the domain. This results in data
    corruption and could cause the PCI device to end up in indeterministic
    state.

    Fix this by invalidate IOMMU pages when detach a device, and
    before decrementing the per-domain device reference counts.

    Cc: Boris Ostrovsky
    Suggested-by: Joerg Roedel
    Co-developed-by: Brijesh Singh
    Signed-off-by: Brijesh Singh
    Signed-off-by: Suravee Suthikulpanit
    Fixes: 6de8ad9b9ee0 ('x86/amd-iommu: Make iommu_flush_pages aware of multiple IOMMUs')
    Signed-off-by: Joerg Roedel

    Suravee Suthikulpanit
     

23 Jan, 2019

1 commit

  • The mtk_iommu_add_device() function keeps the fwspec in an
    on-stack pointer and calls mtk_iommu_create_mapping(), which
    might change its source, dev->iommu_fwspec. This causes the
    on-stack pointer to be obsoleted and the device
    initialization to fail. Update the on-stack fwspec pointer
    after mtk_iommu_create_mapping() has been called.

    Reported-by: Frank Wunderlich
    Fixes: a9bf2eec5a6f ('iommu/mediatek: Use helper functions to access dev->iommu_fwspec')
    Tested-by: Frank Wunderlich
    Signed-off-by: Joerg Roedel

    Joerg Roedel
     

22 Jan, 2019

4 commits

  • Commit 9d3a4de4cb8d ("iommu: Disambiguate MSI region types") changed
    the reserved region type in intel_iommu_get_resv_regions() from
    IOMMU_RESV_RESERVED to IOMMU_RESV_MSI, but it forgot to also change
    the type in intel_iommu_put_resv_regions().

    This leads to a memory leak, because now the check in
    intel_iommu_put_resv_regions() for IOMMU_RESV_RESERVED will never
    be true, and no allocated regions will be freed.

    Fix this by changing the region type in intel_iommu_put_resv_regions()
    to IOMMU_RESV_MSI, matching the type of the allocated regions.

    Fixes: 9d3a4de4cb8d ("iommu: Disambiguate MSI region types")
    Cc: # v4.11+
    Signed-off-by: Gerald Schaefer
    Reviewed-by: Eric Auger
    Signed-off-by: Joerg Roedel

    Gerald Schaefer
     
  • In the error path of map_sg there is an incorrect if condition
    for breaking out of the loop that searches the scatterlist
    for mapped pages to unmap. Instead of breaking out of the
    loop once all the pages that were mapped have been unmapped,
    it will break out of the loop after it has unmapped 1 page.
    Fix the condition, so it breaks out of the loop only after
    all the mapped pages have been unmapped.

    Fixes: 80187fd39dcb ("iommu/amd: Optimize map_sg and unmap_sg")
    Cc: Joerg Roedel
    Signed-off-by: Jerry Snitselaar
    Signed-off-by: Joerg Roedel

    Jerry Snitselaar
     
  • In the error path of map_sg, free_iova_fast is being called with
    address instead of the pfn. This results in a bad value getting into
    the rcache, and can result in hitting a BUG_ON when
    iova_magazine_free_pfns is called.

    Cc: Joerg Roedel
    Cc: Suravee Suthikulpanit
    Signed-off-by: Jerry Snitselaar
    Fixes: 80187fd39dcb ("iommu/amd: Optimize map_sg and unmap_sg")
    Signed-off-by: Joerg Roedel

    Jerry Snitselaar
     
  • Pull IOMMU fix from Joerg Roedel:
    "One fix only for now: Fix probe deferral in iommu/of code (broke with
    recent changes to iommu_ops->add_device invocation)"

    * tag 'iommu-fixes-v5.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
    iommu/of: Fix probe-deferral

    Linus Torvalds
     

11 Jan, 2019

1 commit

  • Whilst iommu_probe_device() does check for non-NULL ops as the previous
    code did, it does not do so in the same order relative to the other
    checks, and as a result means that -EPROBE_DEFER returned by of_xlate()
    (plus any real error condition too) gets overwritten with -EINVAL and
    leads to various misbehaviour.

    Reinstate the original logic, but without implicitly relying on ops
    being set to infer !err as the initial condition (now that the validity
    of ops for its own sake is checked elsewhere).

    Fixes: 641fb0efbff0 ("iommu/of: Don't call iommu_ops->add_device directly")
    Signed-off-by: Robin Murphy
    Signed-off-by: Joerg Roedel

    Robin Murphy
     

08 Jan, 2019

1 commit

  • We already need to zero out memory for dma_alloc_coherent(), as such
    using dma_zalloc_coherent() is superflous. Phase it out.

    This change was generated with the following Coccinelle SmPL patch:

    @ replace_dma_zalloc_coherent @
    expression dev, size, data, handle, flags;
    @@

    -dma_zalloc_coherent(dev, size, handle, flags)
    +dma_alloc_coherent(dev, size, handle, flags)

    Suggested-by: Christoph Hellwig
    Signed-off-by: Luis Chamberlain
    [hch: re-ran the script on the latest tree]
    Signed-off-by: Christoph Hellwig

    Luis Chamberlain
     

02 Jan, 2019

1 commit

  • Pull IOMMU updates from Joerg Roedel:

    - Page table code for AMD IOMMU now supports large pages where smaller
    page-sizes were mapped before. VFIO had to work around that in the
    past and I included a patch to remove it (acked by Alex Williamson)

    - Patches to unmodularize a couple of IOMMU drivers that would never
    work as modules anyway.

    - Work to unify the the iommu-related pointers in 'struct device' into
    one pointer. This work is not finished yet, but will probably be in
    the next cycle.

    - NUMA aware allocation in iommu-dma code

    - Support for r8a774a1 and r8a774c0 in the Renesas IOMMU driver

    - Scalable mode support for the Intel VT-d driver

    - PM runtime improvements for the ARM-SMMU driver

    - Support for the QCOM-SMMUv2 IOMMU hardware from Qualcom

    - Various smaller fixes and improvements

    * tag 'iommu-updates-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (78 commits)
    iommu: Check for iommu_ops == NULL in iommu_probe_device()
    ACPI/IORT: Don't call iommu_ops->add_device directly
    iommu/of: Don't call iommu_ops->add_device directly
    iommu: Consolitate ->add/remove_device() calls
    iommu/sysfs: Rename iommu_release_device()
    dmaengine: sh: rcar-dmac: Use device_iommu_mapped()
    xhci: Use device_iommu_mapped()
    powerpc/iommu: Use device_iommu_mapped()
    ACPI/IORT: Use device_iommu_mapped()
    iommu/of: Use device_iommu_mapped()
    driver core: Introduce device_iommu_mapped() function
    iommu/tegra: Use helper functions to access dev->iommu_fwspec
    iommu/qcom: Use helper functions to access dev->iommu_fwspec
    iommu/of: Use helper functions to access dev->iommu_fwspec
    iommu/mediatek: Use helper functions to access dev->iommu_fwspec
    iommu/ipmmu-vmsa: Use helper functions to access dev->iommu_fwspec
    iommu/dma: Use helper functions to access dev->iommu_fwspec
    iommu/arm-smmu: Use helper functions to access dev->iommu_fwspec
    ACPI/IORT: Use helper functions to access dev->iommu_fwspec
    iommu: Introduce wrappers around dev->iommu_fwspec
    ...

    Linus Torvalds
     

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
     

20 Dec, 2018

2 commits


17 Dec, 2018

14 commits


14 Dec, 2018

1 commit


11 Dec, 2018

10 commits

  • Deferred invalidation is an ECS specific feature. It will not be
    supported when IOMMU works in scalable mode. As we deprecated the
    ECS support, remove deferred invalidation and cleanup the code.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Cc: Liu Yi L
    Cc: Sanjay Kumar
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • This patch enables the current SVA (Shared Virtual Address)
    implementation to work in the scalable mode.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Signed-off-by: Sanjay Kumar
    Signed-off-by: Liu Yi L
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • This adds an interface to setup the PASID entries for first
    level page table translation.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Signed-off-by: Sanjay Kumar
    Signed-off-by: Liu Yi L
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • This patch enables the translation for requests without PASID in
    the scalable mode by setting up the root and context entries.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Signed-off-by: Sanjay Kumar
    Signed-off-by: Liu Yi L
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • So that the pasid related info, such as the pasid table and the
    maximum of pasid could be used during setting up scalable mode
    context.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Cc: Liu Yi L
    Cc: Sanjay Kumar
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Reviewed-by: Kevin Tian
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • when the scalable mode is enabled, there is no second level
    page translation pointer in the context entry any more (for
    DMA request without PASID). Instead, a new RID2PASID field
    is introduced in the context entry. Software can choose any
    PASID value to set RID2PASID and then setup the translation
    in the corresponding PASID entry. Upon receiving a DMA request
    without PASID, hardware will firstly look at this RID2PASID
    field and then treat this request as a request with a pasid
    value specified in RID2PASID field.

    Though software is allowed to use any PASID for the RID2PASID,
    we will always use the PASID 0 as a sort of design decision.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Signed-off-by: Sanjay Kumar
    Signed-off-by: Liu Yi L
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • This adds the interfaces to setup or tear down the structures
    for second level page table translations. This includes types
    of second level only translation and pass through.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Signed-off-by: Sanjay Kumar
    Signed-off-by: Liu Yi L
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • Vt-d spec rev3.0 (section 6.2.3.1) requires that each pasid
    entry for first-level or pass-through translation should be
    programmed with a domain id different from those used for
    second-level or nested translation. It is recommended that
    software could use a same domain id for all first-only and
    pass-through translations.

    This reserves a domain id for first-level and pass-through
    translations.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Cc: Liu Yi L
    Cc: Sanjay Kumar
    Signed-off-by: Lu Baolu
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • Intel vt-d spec rev3.0 requires software to use 256-bit
    descriptors in invalidation queue. As the spec reads in
    section 6.5.2:

    Remapping hardware supporting Scalable Mode Translations
    (ECAP_REG.SMTS=1) allow software to additionally program
    the width of the descriptors (128-bits or 256-bits) that
    will be written into the Queue. Software should setup the
    Invalidation Queue for 256-bit descriptors before progra-
    mming remapping hardware for scalable-mode translation as
    128-bit descriptors are treated as invalid descriptors
    (see Table 21 in Section 6.5.2.10) in scalable-mode.

    This patch adds 256-bit invalidation descriptor support
    if the hardware presents scalable mode capability.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Signed-off-by: Sanjay Kumar
    Signed-off-by: Liu Yi L
    Signed-off-by: Lu Baolu
    Signed-off-by: Joerg Roedel

    Lu Baolu
     
  • So that they could also be used in other source files.

    Cc: Ashok Raj
    Cc: Jacob Pan
    Cc: Kevin Tian
    Cc: Liu Yi L
    Cc: Sanjay Kumar
    Signed-off-by: Lu Baolu
    Reviewed-by: Ashok Raj
    Reviewed-by: Kevin Tian
    Signed-off-by: Joerg Roedel

    Lu Baolu