lkml.org 
[lkml]   [2023]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 1/5] iommu/vt-d: Remove mm->pasid in intel_sva_bind_mm()
    Date
    The pasid is passed in as a parameter through .set_dev_pasid() callback.
    Thus, intel_sva_bind_mm() can directly use it instead of retrieving the
    pasid value from mm->pasid.

    Suggested-by: Lu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Tina Zhang <tina.zhang@intel.com>
    ---
    drivers/iommu/intel/svm.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c
    index 50a481c895b8..3c531af58658 100644
    --- a/drivers/iommu/intel/svm.c
    +++ b/drivers/iommu/intel/svm.c
    @@ -290,21 +290,22 @@ static int pasid_to_svm_sdev(struct device *dev, unsigned int pasid,
    }

    static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
    - struct mm_struct *mm)
    + struct iommu_domain *domain, ioasid_t pasid)
    {
    struct device_domain_info *info = dev_iommu_priv_get(dev);
    + struct mm_struct *mm = domain->mm;
    struct intel_svm_dev *sdev;
    struct intel_svm *svm;
    unsigned long sflags;
    int ret = 0;

    - svm = pasid_private_find(mm->pasid);
    + svm = pasid_private_find(pasid);
    if (!svm) {
    svm = kzalloc(sizeof(*svm), GFP_KERNEL);
    if (!svm)
    return -ENOMEM;

    - svm->pasid = mm->pasid;
    + svm->pasid = pasid;
    svm->mm = mm;
    INIT_LIST_HEAD_RCU(&svm->devs);

    @@ -342,7 +343,7 @@ static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,

    /* Setup the pasid table: */
    sflags = cpu_feature_enabled(X86_FEATURE_LA57) ? PASID_FLAG_FL5LP : 0;
    - ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid,
    + ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, pasid,
    FLPT_DEFAULT_DID, sflags);
    if (ret)
    goto free_sdev;
    @@ -356,7 +357,7 @@ static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
    free_svm:
    if (list_empty(&svm->devs)) {
    mmu_notifier_unregister(&svm->notifier, mm);
    - pasid_private_remove(mm->pasid);
    + pasid_private_remove(pasid);
    kfree(svm);
    }

    @@ -796,9 +797,8 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
    {
    struct device_domain_info *info = dev_iommu_priv_get(dev);
    struct intel_iommu *iommu = info->iommu;
    - struct mm_struct *mm = domain->mm;

    - return intel_svm_bind_mm(iommu, dev, mm);
    + return intel_svm_bind_mm(iommu, dev, domain, pasid);
    }

    static void intel_svm_domain_free(struct iommu_domain *domain)
    --
    2.39.3
    \
     
     \ /
      Last update: 2023-10-18 07:08    [W:7.345 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site