Lines Matching refs:mm
244 struct mm_struct *mm, in intel_invalidate_range() argument
253 static void intel_mm_release(struct mmu_notifier *mn, struct mm_struct *mm) in intel_mm_release() argument
395 svm->mm = get_task_mm(current); in intel_svm_bind_gpasid()
403 mmput(svm->mm); in intel_svm_bind_gpasid()
513 static void load_pasid(struct mm_struct *mm, u32 pasid) in load_pasid() argument
515 mutex_lock(&mm->context.lock); in load_pasid()
518 on_each_cpu_mask(mm_cpumask(mm), _load_pasid, NULL, true); in load_pasid()
520 mutex_unlock(&mm->context.lock); in load_pasid()
523 static int intel_svm_alloc_pasid(struct device *dev, struct mm_struct *mm, in intel_svm_alloc_pasid() argument
529 return iommu_sva_alloc_pasid(mm, PASID_MIN, max_pasid - 1); in intel_svm_alloc_pasid()
532 static void intel_svm_free_pasid(struct mm_struct *mm) in intel_svm_free_pasid() argument
534 iommu_sva_free_pasid(mm); in intel_svm_free_pasid()
539 struct mm_struct *mm, in intel_svm_bind_mm() argument
548 svm = pasid_private_find(mm->pasid); in intel_svm_bind_mm()
554 svm->pasid = mm->pasid; in intel_svm_bind_mm()
555 svm->mm = mm; in intel_svm_bind_mm()
561 ret = mmu_notifier_register(&svm->notifier, mm); in intel_svm_bind_mm()
571 mmu_notifier_unregister(&svm->notifier, mm); in intel_svm_bind_mm()
610 ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid, in intel_svm_bind_mm()
619 load_pasid(mm, svm->pasid); in intel_svm_bind_mm()
630 mmu_notifier_unregister(&svm->notifier, mm); in intel_svm_bind_mm()
631 pasid_private_remove(mm->pasid); in intel_svm_bind_mm()
644 struct mm_struct *mm; in intel_svm_unbind_mm() local
654 mm = svm->mm; in intel_svm_unbind_mm()
674 mmu_notifier_unregister(&svm->notifier, mm); in intel_svm_unbind_mm()
676 load_pasid(mm, PASID_DISABLED); in intel_svm_unbind_mm()
688 intel_svm_free_pasid(mm); in intel_svm_unbind_mm()
1042 struct iommu_sva *intel_svm_bind(struct device *dev, struct mm_struct *mm, void *drvdata) in intel_svm_bind() argument
1059 if (mm) { in intel_svm_bind()
1065 mm = &init_mm; in intel_svm_bind()
1069 ret = intel_svm_alloc_pasid(dev, mm, flags); in intel_svm_bind()
1075 sva = intel_svm_bind_mm(iommu, dev, mm, flags); in intel_svm_bind()
1077 intel_svm_free_pasid(mm); in intel_svm_bind()
1159 struct mm_struct *mm; in intel_svm_page_response() local
1161 mm = get_task_mm(current); in intel_svm_page_response()
1162 if (!mm) { in intel_svm_page_response()
1167 if (mm != svm->mm) { in intel_svm_page_response()
1169 mmput(mm); in intel_svm_page_response()
1173 mmput(mm); in intel_svm_page_response()