Lines Matching refs:smmu_mn

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