Lines Matching refs:pasid
30 static void intel_svm_drain_prq(struct device *dev, u32 pasid);
34 static int pasid_private_add(ioasid_t pasid, void *priv) in pasid_private_add() argument
36 return xa_alloc(&pasid_private_array, &pasid, priv, in pasid_private_add()
37 XA_LIMIT(pasid, pasid), GFP_ATOMIC); in pasid_private_add()
40 static void pasid_private_remove(ioasid_t pasid) in pasid_private_remove() argument
42 xa_erase(&pasid_private_array, pasid); in pasid_private_remove()
45 static void *pasid_private_find(ioasid_t pasid) in pasid_private_find() argument
47 return xa_load(&pasid_private_array, pasid); in pasid_private_find()
185 qi_flush_piotlb(sdev->iommu, sdev->did, svm->pasid, address, pages, ih); in __flush_svm_range_dev()
188 svm->pasid, sdev->qdep, address, in __flush_svm_range_dev()
191 svm->pasid, sdev->qdep); in __flush_svm_range_dev()
253 svm->pasid, true); in intel_mm_release()
265 static int pasid_to_svm_sdev(struct device *dev, unsigned int pasid, in pasid_to_svm_sdev() argument
276 if (pasid == INVALID_IOASID || pasid >= PASID_MAX) in pasid_to_svm_sdev()
279 svm = pasid_private_find(pasid); in pasid_to_svm_sdev()
310 svm = pasid_private_find(mm->pasid); in intel_svm_bind_mm()
316 svm->pasid = mm->pasid; in intel_svm_bind_mm()
327 ret = pasid_private_add(svm->pasid, svm); in intel_svm_bind_mm()
354 ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid, in intel_svm_bind_mm()
368 pasid_private_remove(mm->pasid); in intel_svm_bind_mm()
376 static int intel_svm_unbind_mm(struct device *dev, u32 pasid) in intel_svm_unbind_mm() argument
388 ret = pasid_to_svm_sdev(dev, pasid, &svm, &sdev); in intel_svm_unbind_mm()
404 intel_pasid_tear_down_entry(iommu, dev, svm->pasid, false); in intel_svm_unbind_mm()
405 intel_svm_drain_prq(dev, svm->pasid); in intel_svm_unbind_mm()
411 pasid_private_remove(svm->pasid); in intel_svm_unbind_mm()
435 u64 pasid:20; member
478 static void intel_svm_drain_prq(struct device *dev, u32 pasid) in intel_svm_drain_prq() argument
515 if (!req->pasid_present || req->pasid != pasid) { in intel_svm_drain_prq()
546 desc[1].qw0 = QI_EIOTLB_PASID(pasid) | in intel_svm_drain_prq()
550 desc[2].qw0 = QI_DEV_EIOTLB_PASID(pasid) | in intel_svm_drain_prq()
592 event.fault.prm.pasid = desc->pasid; in intel_svm_prq_report()
643 desc.qw0 = QI_PGRP_PASID(req->pasid) | in handle_bad_prq_event()
794 if (prm->pasid == 0 || prm->pasid >= PASID_MAX) { in intel_svm_page_response()
808 desc.qw0 = QI_PGRP_PASID(prm->pasid) | QI_PGRP_DID(sid) | in intel_svm_page_response()
831 void intel_svm_remove_dev_pasid(struct device *dev, ioasid_t pasid) in intel_svm_remove_dev_pasid() argument
834 intel_svm_unbind_mm(dev, pasid); in intel_svm_remove_dev_pasid()
839 struct device *dev, ioasid_t pasid) in intel_svm_set_dev_pasid() argument