lkml.org 
[lkml]   [2020]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/5] iommu: Add optional subdev in aux_at(de)tach ops
    Date
    In the vfio/mdev use case of aux-domain, the subdevices are created from
    the physical devices with IOMMU_DEV_FEAT_AUX enabled and the aux-domains
    are attached to the subdevices through the iommu_ops.aux_attach_dev()
    interface.

    Current iommu_ops.aux_at(de)tach_dev() design only takes the aux-domain
    and the physical device as the parameters, this is insufficient if we
    want the vendor iommu drivers to learn the knowledge about relationships
    between the aux-domains and the subdevices. Add a @subdev parameter to
    iommu_ops.aux_at(de)tach_dev() interfaces so that a subdevice could be
    opt-in.

    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    ---
    drivers/iommu/intel/iommu.c | 10 ++++++----
    drivers/iommu/iommu.c | 4 ++--
    include/linux/iommu.h | 6 ++++--
    3 files changed, 12 insertions(+), 8 deletions(-)

    diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
    index bce158468abf..3c12fd06856c 100644
    --- a/drivers/iommu/intel/iommu.c
    +++ b/drivers/iommu/intel/iommu.c
    @@ -5338,8 +5338,9 @@ static int intel_iommu_attach_device(struct iommu_domain *domain,
    return domain_add_dev_info(to_dmar_domain(domain), dev);
    }

    -static int intel_iommu_aux_attach_device(struct iommu_domain *domain,
    - struct device *dev)
    +static int
    +intel_iommu_aux_attach_device(struct iommu_domain *domain,
    + struct device *dev, struct device *subdev)
    {
    int ret;

    @@ -5359,8 +5360,9 @@ static void intel_iommu_detach_device(struct iommu_domain *domain,
    dmar_remove_one_dev_info(dev);
    }

    -static void intel_iommu_aux_detach_device(struct iommu_domain *domain,
    - struct device *dev)
    +static void
    +intel_iommu_aux_detach_device(struct iommu_domain *domain, struct device *dev,
    + struct device *subdev)
    {
    aux_domain_remove_dev(to_dmar_domain(domain), dev);
    }
    diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
    index 609bd25bf154..38cdfeb887e1 100644
    --- a/drivers/iommu/iommu.c
    +++ b/drivers/iommu/iommu.c
    @@ -2728,7 +2728,7 @@ int iommu_aux_attach_device(struct iommu_domain *domain, struct device *dev)
    int ret = -ENODEV;

    if (domain->ops->aux_attach_dev)
    - ret = domain->ops->aux_attach_dev(domain, dev);
    + ret = domain->ops->aux_attach_dev(domain, dev, NULL);

    if (!ret)
    trace_attach_device_to_domain(dev);
    @@ -2740,7 +2740,7 @@ EXPORT_SYMBOL_GPL(iommu_aux_attach_device);
    void iommu_aux_detach_device(struct iommu_domain *domain, struct device *dev)
    {
    if (domain->ops->aux_detach_dev) {
    - domain->ops->aux_detach_dev(domain, dev);
    + domain->ops->aux_detach_dev(domain, dev, NULL);
    trace_detach_device_from_domain(dev);
    }
    }
    diff --git a/include/linux/iommu.h b/include/linux/iommu.h
    index fee209efb756..871267104915 100644
    --- a/include/linux/iommu.h
    +++ b/include/linux/iommu.h
    @@ -279,8 +279,10 @@ struct iommu_ops {
    int (*dev_disable_feat)(struct device *dev, enum iommu_dev_features f);

    /* Aux-domain specific attach/detach entries */
    - int (*aux_attach_dev)(struct iommu_domain *domain, struct device *dev);
    - void (*aux_detach_dev)(struct iommu_domain *domain, struct device *dev);
    + int (*aux_attach_dev)(struct iommu_domain *domain, struct device *dev,
    + struct device *subdev);
    + void (*aux_detach_dev)(struct iommu_domain *domain, struct device *dev,
    + struct device *subdev);
    int (*aux_get_pasid)(struct iommu_domain *domain, struct device *dev);

    struct iommu_sva *(*sva_bind)(struct device *dev, struct mm_struct *mm,
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-09-01 05:40    [W:4.441 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site