Lines Matching refs:pasid

27 static void intel_svm_drain_prq(struct device *dev, u32 pasid);
131 qi_flush_piotlb(sdev->iommu, sdev->did, svm->pasid, address, pages, ih); in __flush_svm_range_dev()
134 svm->pasid, sdev->qdep, address, in __flush_svm_range_dev()
196 svm->pasid, true); in intel_mm_release()
213 static int pasid_to_svm_sdev(struct device *dev, unsigned int pasid, in pasid_to_svm_sdev() argument
224 if (pasid == INVALID_IOASID || pasid >= PASID_MAX) in pasid_to_svm_sdev()
227 svm = ioasid_find(NULL, pasid, NULL); in pasid_to_svm_sdev()
314 svm->pasid); in intel_svm_bind_gpasid()
332 svm->pasid = data->hpasid; in intel_svm_bind_gpasid()
399 int intel_svm_unbind_gpasid(struct device *dev, u32 pasid) in intel_svm_unbind_gpasid() argument
410 ret = pasid_to_svm_sdev(dev, pasid, &svm, &sdev); in intel_svm_unbind_gpasid()
420 svm->pasid, false); in intel_svm_unbind_gpasid()
421 intel_svm_drain_prq(dev, svm->pasid); in intel_svm_unbind_gpasid()
434 ioasid_set_data(pasid, NULL); in intel_svm_unbind_gpasid()
449 static void load_pasid(struct mm_struct *mm, u32 pasid) in load_pasid() argument
454 smp_store_release(&mm->pasid, pasid); in load_pasid()
505 if (svm->pasid >= pasid_max) { in intel_svm_bind_mm()
508 svm->pasid); in intel_svm_bind_mm()
568 svm->pasid = ioasid_alloc(NULL, PASID_MIN, in intel_svm_bind_mm()
570 if (svm->pasid == INVALID_IOASID) { in intel_svm_bind_mm()
585 ioasid_free(svm->pasid); in intel_svm_bind_mm()
595 svm->pasid, FLPT_DEFAULT_DID, in intel_svm_bind_mm()
603 ioasid_free(svm->pasid); in intel_svm_bind_mm()
612 load_pasid(mm, svm->pasid); in intel_svm_bind_mm()
622 svm->pasid, FLPT_DEFAULT_DID, in intel_svm_bind_mm()
634 sdev->pasid = svm->pasid; in intel_svm_bind_mm()
644 static int intel_svm_unbind_mm(struct device *dev, u32 pasid) in intel_svm_unbind_mm() argument
655 ret = pasid_to_svm_sdev(dev, pasid, &svm, &sdev); in intel_svm_unbind_mm()
671 svm->pasid, false); in intel_svm_unbind_mm()
672 intel_svm_drain_prq(dev, svm->pasid); in intel_svm_unbind_mm()
676 ioasid_free(svm->pasid); in intel_svm_unbind_mm()
705 u64 pasid:20; member
766 static void intel_svm_drain_prq(struct device *dev, u32 pasid) in intel_svm_drain_prq() argument
803 if (!req->pasid_present || req->pasid != pasid) { in intel_svm_drain_prq()
820 desc[1].qw0 = QI_EIOTLB_PASID(pasid) | in intel_svm_drain_prq()
824 desc[2].qw0 = QI_DEV_EIOTLB_PASID(pasid) | in intel_svm_drain_prq()
866 event.fault.prm.pasid = desc->pasid; in intel_svm_prq_report()
936 if (!svm || svm->pasid != req->pasid) { in prq_event_thread()
938 svm = ioasid_find(NULL, req->pasid, NULL); in prq_event_thread()
945 iommu->name, req->pasid, ((unsigned long long *)req)[0], in prq_event_thread()
1013 sdev->ops->fault_cb(sdev->dev, req->pasid, req->addr, in prq_event_thread()
1029 resp.qw0 = QI_PGRP_PASID(req->pasid) | in prq_event_thread()
1109 intel_svm_unbind_mm(sdev->dev, sdev->pasid); in intel_svm_unbind()
1116 u32 pasid; in intel_svm_get_pasid() local
1120 pasid = sdev->pasid; in intel_svm_get_pasid()
1123 return pasid; in intel_svm_get_pasid()
1164 if (prm->pasid == 0 || prm->pasid >= PASID_MAX) { in intel_svm_page_response()
1169 ret = pasid_to_svm_sdev(dev, prm->pasid, &svm, &sdev); in intel_svm_page_response()
1206 desc.qw0 = QI_PGRP_PASID(prm->pasid) | QI_PGRP_DID(sid) | in intel_svm_page_response()