Lines Matching refs:smmu_mn

30 	struct arm_smmu_mmu_notifier	*smmu_mn;  member
203 struct arm_smmu_mmu_notifier *smmu_mn = mn_to_smmu(mn); in arm_smmu_mm_arch_invalidate_secondary_tlbs() local
204 struct arm_smmu_domain *smmu_domain = smmu_mn->domain; in arm_smmu_mm_arch_invalidate_secondary_tlbs()
224 smmu_mn->cd->asid); in arm_smmu_mm_arch_invalidate_secondary_tlbs()
227 smmu_mn->cd->asid, in arm_smmu_mm_arch_invalidate_secondary_tlbs()
237 struct arm_smmu_mmu_notifier *smmu_mn = mn_to_smmu(mn); in arm_smmu_mm_release() local
238 struct arm_smmu_domain *smmu_domain = smmu_mn->domain; in arm_smmu_mm_release()
241 if (smmu_mn->cleared) { in arm_smmu_mm_release()
252 arm_smmu_tlb_inv_asid(smmu_domain->smmu, smmu_mn->cd->asid); in arm_smmu_mm_release()
255 smmu_mn->cleared = true; in arm_smmu_mm_release()
277 struct arm_smmu_mmu_notifier *smmu_mn; in arm_smmu_mmu_notifier_get() local
279 list_for_each_entry(smmu_mn, &smmu_domain->mmu_notifiers, list) { in arm_smmu_mmu_notifier_get()
280 if (smmu_mn->mn.mm == mm) { in arm_smmu_mmu_notifier_get()
281 refcount_inc(&smmu_mn->refs); in arm_smmu_mmu_notifier_get()
282 return smmu_mn; in arm_smmu_mmu_notifier_get()
290 smmu_mn = kzalloc(sizeof(*smmu_mn), GFP_KERNEL); in arm_smmu_mmu_notifier_get()
291 if (!smmu_mn) { in arm_smmu_mmu_notifier_get()
296 refcount_set(&smmu_mn->refs, 1); in arm_smmu_mmu_notifier_get()
297 smmu_mn->cd = cd; in arm_smmu_mmu_notifier_get()
298 smmu_mn->domain = smmu_domain; in arm_smmu_mmu_notifier_get()
299 smmu_mn->mn.ops = &arm_smmu_mmu_notifier_ops; in arm_smmu_mmu_notifier_get()
301 ret = mmu_notifier_register(&smmu_mn->mn, mm); in arm_smmu_mmu_notifier_get()
303 kfree(smmu_mn); in arm_smmu_mmu_notifier_get()
311 list_add(&smmu_mn->list, &smmu_domain->mmu_notifiers); in arm_smmu_mmu_notifier_get()
312 return smmu_mn; in arm_smmu_mmu_notifier_get()
316 mmu_notifier_put(&smmu_mn->mn); in arm_smmu_mmu_notifier_get()
322 static void arm_smmu_mmu_notifier_put(struct arm_smmu_mmu_notifier *smmu_mn) in arm_smmu_mmu_notifier_put() argument
324 struct mm_struct *mm = smmu_mn->mn.mm; in arm_smmu_mmu_notifier_put()
325 struct arm_smmu_ctx_desc *cd = smmu_mn->cd; in arm_smmu_mmu_notifier_put()
326 struct arm_smmu_domain *smmu_domain = smmu_mn->domain; in arm_smmu_mmu_notifier_put()
328 if (!refcount_dec_and_test(&smmu_mn->refs)) in arm_smmu_mmu_notifier_put()
331 list_del(&smmu_mn->list); in arm_smmu_mmu_notifier_put()
338 if (!smmu_mn->cleared) { in arm_smmu_mmu_notifier_put()
344 mmu_notifier_put(&smmu_mn->mn); in arm_smmu_mmu_notifier_put()
376 bond->smmu_mn = arm_smmu_mmu_notifier_get(smmu_domain, mm); in __arm_smmu_sva_bind()
377 if (IS_ERR(bond->smmu_mn)) { in __arm_smmu_sva_bind()
378 ret = PTR_ERR(bond->smmu_mn); in __arm_smmu_sva_bind()
555 arm_smmu_mmu_notifier_put(bond->smmu_mn); in arm_smmu_sva_remove_dev_pasid()