lkml.org 
[lkml]   [2021]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC 17/20] iommu/iommufd: Report iova range to userspace
    On Sun, Sep 19, 2021 at 02:38:45PM +0800, Liu Yi L wrote:
    > [HACK. will fix in v2]
    >
    > IOVA range is critical info for userspace to manage DMA for an I/O address
    > space. This patch reports the valid iova range info of a given device.
    >
    > Due to aforementioned hack, this info comes from the hacked vfio type1
    > driver. To follow the same format in vfio, we also introduce a cap chain
    > format in IOMMU_DEVICE_GET_INFO to carry the iova range info.
    [...]
    > diff --git a/include/uapi/linux/iommu.h b/include/uapi/linux/iommu.h
    > index 49731be71213..f408ad3c8ade 100644
    > --- a/include/uapi/linux/iommu.h
    > +++ b/include/uapi/linux/iommu.h
    > @@ -68,6 +68,7 @@
    > * +---------------+------------+
    > * ...
    > * @addr_width: the address width of supported I/O address spaces.
    > + * @cap_offset: Offset within info struct of first cap
    > *
    > * Availability: after device is bound to iommufd
    > */
    > @@ -77,9 +78,11 @@ struct iommu_device_info {
    > #define IOMMU_DEVICE_INFO_ENFORCE_SNOOP (1 << 0) /* IOMMU enforced snoop */
    > #define IOMMU_DEVICE_INFO_PGSIZES (1 << 1) /* supported page sizes */
    > #define IOMMU_DEVICE_INFO_ADDR_WIDTH (1 << 2) /* addr_wdith field valid */
    > +#define IOMMU_DEVICE_INFO_CAPS (1 << 3) /* info supports cap chain */
    > __u64 dev_cookie;
    > __u64 pgsize_bitmap;
    > __u32 addr_width;
    > + __u32 cap_offset;

    We can also add vendor-specific page table and PASID table properties as
    capabilities, otherwise we'll need giant unions in the iommu_device_info
    struct. That made me wonder whether pgsize and addr_width should also be
    separate capabilities for consistency, but this way might be good enough.
    There won't be many more generic capabilities. I have "output address
    width" and "PASID width", the rest is specific to Arm and SMMU table
    formats.

    Thanks,
    Jean

    > };
    >
    > #define IOMMU_DEVICE_GET_INFO _IO(IOMMU_TYPE, IOMMU_BASE + 1)
    > --
    > 2.25.1
    >

    \
     
     \ /
      Last update: 2021-09-22 16:51    [W:4.037 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site