Lines Matching refs:pasid
31 static void intel_svm_drain_prq(struct device *dev, u32 pasid);
35 static int pasid_private_add(ioasid_t pasid, void *priv) in pasid_private_add() argument
37 return xa_alloc(&pasid_private_array, &pasid, priv, in pasid_private_add()
38 XA_LIMIT(pasid, pasid), GFP_ATOMIC); in pasid_private_add()
41 static void pasid_private_remove(ioasid_t pasid) in pasid_private_remove() argument
43 xa_erase(&pasid_private_array, pasid); in pasid_private_remove()
46 static void *pasid_private_find(ioasid_t pasid) in pasid_private_find() argument
48 return xa_load(&pasid_private_array, pasid); in pasid_private_find()
208 qi_flush_piotlb(sdev->iommu, sdev->did, svm->pasid, address, pages, ih); in __flush_svm_range_dev()
211 svm->pasid, sdev->qdep, address, in __flush_svm_range_dev()
273 svm->pasid, true); in intel_mm_release()
285 static int pasid_to_svm_sdev(struct device *dev, unsigned int pasid, in pasid_to_svm_sdev() argument
296 if (pasid == INVALID_IOASID || pasid >= PASID_MAX) in pasid_to_svm_sdev()
299 svm = pasid_private_find(pasid); in pasid_to_svm_sdev()
378 svm->pasid); in intel_svm_bind_gpasid()
396 svm->pasid = data->hpasid; in intel_svm_bind_gpasid()
463 int intel_svm_unbind_gpasid(struct device *dev, u32 pasid) in intel_svm_unbind_gpasid() argument
474 ret = pasid_to_svm_sdev(dev, pasid, &svm, &sdev); in intel_svm_unbind_gpasid()
484 svm->pasid, false); in intel_svm_unbind_gpasid()
485 intel_svm_drain_prq(dev, svm->pasid); in intel_svm_unbind_gpasid()
498 pasid_private_remove(pasid); in intel_svm_unbind_gpasid()
533 svm = pasid_private_find(mm->pasid); in intel_svm_bind_mm()
539 svm->pasid = mm->pasid; in intel_svm_bind_mm()
553 ret = pasid_private_add(svm->pasid, svm); in intel_svm_bind_mm()
580 sdev->pasid = svm->pasid; in intel_svm_bind_mm()
595 ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid, in intel_svm_bind_mm()
612 pasid_private_remove(mm->pasid); in intel_svm_bind_mm()
620 static int intel_svm_unbind_mm(struct device *dev, u32 pasid) in intel_svm_unbind_mm() argument
632 ret = pasid_to_svm_sdev(dev, pasid, &svm, &sdev); in intel_svm_unbind_mm()
649 svm->pasid, false); in intel_svm_unbind_mm()
650 intel_svm_drain_prq(dev, svm->pasid); in intel_svm_unbind_mm()
656 pasid_private_remove(svm->pasid); in intel_svm_unbind_mm()
681 u64 pasid:20; member
724 static void intel_svm_drain_prq(struct device *dev, u32 pasid) in intel_svm_drain_prq() argument
761 if (!req->pasid_present || req->pasid != pasid) { in intel_svm_drain_prq()
792 desc[1].qw0 = QI_EIOTLB_PASID(pasid) | in intel_svm_drain_prq()
796 desc[2].qw0 = QI_DEV_EIOTLB_PASID(pasid) | in intel_svm_drain_prq()
838 event.fault.prm.pasid = desc->pasid; in intel_svm_prq_report()
889 desc.qw0 = QI_PGRP_PASID(req->pasid) | in handle_bad_prq_event()
959 if (!svm || svm->pasid != req->pasid) { in prq_event_thread()
964 svm = pasid_private_find(req->pasid); in prq_event_thread()
1062 intel_svm_unbind_mm(sdev->dev, sdev->pasid); in intel_svm_unbind()
1069 u32 pasid; in intel_svm_get_pasid() local
1073 pasid = sdev->pasid; in intel_svm_get_pasid()
1076 return pasid; in intel_svm_get_pasid()
1117 if (prm->pasid == 0 || prm->pasid >= PASID_MAX) { in intel_svm_page_response()
1122 ret = pasid_to_svm_sdev(dev, prm->pasid, &svm, &sdev); in intel_svm_page_response()
1159 desc.qw0 = QI_PGRP_PASID(prm->pasid) | QI_PGRP_DID(sid) | in intel_svm_page_response()