Lines Matching refs:bond
311 struct arm_smmu_bond *bond; in __arm_smmu_sva_bind() local
320 list_for_each_entry(bond, &master->bonds, list) { in __arm_smmu_sva_bind()
321 if (bond->mm == mm) { in __arm_smmu_sva_bind()
322 refcount_inc(&bond->refs); in __arm_smmu_sva_bind()
323 return &bond->sva; in __arm_smmu_sva_bind()
327 bond = kzalloc(sizeof(*bond), GFP_KERNEL); in __arm_smmu_sva_bind()
328 if (!bond) in __arm_smmu_sva_bind()
336 bond->mm = mm; in __arm_smmu_sva_bind()
337 bond->sva.dev = dev; in __arm_smmu_sva_bind()
338 refcount_set(&bond->refs, 1); in __arm_smmu_sva_bind()
340 bond->smmu_mn = arm_smmu_mmu_notifier_get(smmu_domain, mm); in __arm_smmu_sva_bind()
341 if (IS_ERR(bond->smmu_mn)) { in __arm_smmu_sva_bind()
342 ret = PTR_ERR(bond->smmu_mn); in __arm_smmu_sva_bind()
346 list_add(&bond->list, &master->bonds); in __arm_smmu_sva_bind()
347 return &bond->sva; in __arm_smmu_sva_bind()
352 kfree(bond); in __arm_smmu_sva_bind()
374 struct arm_smmu_bond *bond = sva_to_bond(handle); in arm_smmu_sva_unbind() local
377 if (refcount_dec_and_test(&bond->refs)) { in arm_smmu_sva_unbind()
378 list_del(&bond->list); in arm_smmu_sva_unbind()
379 arm_smmu_mmu_notifier_put(bond->smmu_mn); in arm_smmu_sva_unbind()
380 iommu_sva_free_pasid(bond->mm); in arm_smmu_sva_unbind()
381 kfree(bond); in arm_smmu_sva_unbind()
388 struct arm_smmu_bond *bond = sva_to_bond(handle); in arm_smmu_sva_get_pasid() local
390 return bond->mm->pasid; in arm_smmu_sva_get_pasid()