Lines Matching defs:smmu_mn

29 	struct arm_smmu_mmu_notifier	*smmu_mn;
267 struct arm_smmu_mmu_notifier *smmu_mn = mn_to_smmu(mn);
268 struct arm_smmu_domain *smmu_domain = smmu_mn->domain;
288 smmu_mn->cd->asid);
291 smmu_mn->cd->asid,
302 struct arm_smmu_mmu_notifier *smmu_mn = mn_to_smmu(mn);
303 struct arm_smmu_domain *smmu_domain = smmu_mn->domain;
308 if (smmu_mn->cleared) {
325 arm_smmu_make_sva_cd(&target, master, NULL, smmu_mn->cd->asid);
331 arm_smmu_tlb_inv_asid(smmu_domain->smmu, smmu_mn->cd->asid);
334 smmu_mn->cleared = true;
356 struct arm_smmu_mmu_notifier *smmu_mn;
358 list_for_each_entry(smmu_mn, &smmu_domain->mmu_notifiers, list) {
359 if (smmu_mn->mn.mm == mm) {
360 refcount_inc(&smmu_mn->refs);
361 return smmu_mn;
369 smmu_mn = kzalloc(sizeof(*smmu_mn), GFP_KERNEL);
370 if (!smmu_mn) {
375 refcount_set(&smmu_mn->refs, 1);
376 smmu_mn->cd = cd;
377 smmu_mn->domain = smmu_domain;
378 smmu_mn->mn.ops = &arm_smmu_mmu_notifier_ops;
380 ret = mmu_notifier_register(&smmu_mn->mn, mm);
382 kfree(smmu_mn);
386 list_add(&smmu_mn->list, &smmu_domain->mmu_notifiers);
387 return smmu_mn;
394 static void arm_smmu_mmu_notifier_put(struct arm_smmu_mmu_notifier *smmu_mn)
396 struct mm_struct *mm = smmu_mn->mn.mm;
397 struct arm_smmu_ctx_desc *cd = smmu_mn->cd;
398 struct arm_smmu_domain *smmu_domain = smmu_mn->domain;
400 if (!refcount_dec_and_test(&smmu_mn->refs))
403 list_del(&smmu_mn->list);
409 if (!smmu_mn->cleared) {
415 /* Frees smmu_mn */
416 mmu_notifier_put(&smmu_mn->mn);
446 bond->smmu_mn = arm_smmu_mmu_notifier_get(smmu_domain, mm);
447 if (IS_ERR(bond->smmu_mn)) {
448 ret = PTR_ERR(bond->smmu_mn);
457 arm_smmu_make_sva_cd(&target, master, mm, bond->smmu_mn->cd->asid);
464 arm_smmu_mmu_notifier_put(bond->smmu_mn);
627 arm_smmu_mmu_notifier_put(bond->smmu_mn);