Lines Matching full:cd
24 struct arm_smmu_ctx_desc *cd; in arm_smmu_share_asid() local
28 cd = xa_load(&arm_smmu_asid_xa, asid); in arm_smmu_share_asid()
29 if (!cd) in arm_smmu_share_asid()
32 if (cd->mm) { in arm_smmu_share_asid()
33 if (WARN_ON(cd->mm != mm)) in arm_smmu_share_asid()
35 /* All devices bound to this mm use the same cd struct. */ in arm_smmu_share_asid()
36 refcount_inc(&cd->refs); in arm_smmu_share_asid()
37 return cd; in arm_smmu_share_asid()
40 smmu_domain = container_of(cd, struct arm_smmu_domain, s1_cfg.cd); in arm_smmu_share_asid()
43 ret = xa_alloc(&arm_smmu_asid_xa, &new_asid, cd, in arm_smmu_share_asid()
52 cd->asid = new_asid; in arm_smmu_share_asid()
54 * Update ASID and invalidate CD in all associated masters. There will in arm_smmu_share_asid()
58 arm_smmu_write_ctx_desc(smmu_domain, 0, cd); in arm_smmu_share_asid()
73 struct arm_smmu_ctx_desc *cd; in arm_smmu_alloc_shared_cd() local
80 cd = kzalloc(sizeof(*cd), GFP_KERNEL); in arm_smmu_alloc_shared_cd()
81 if (!cd) { in arm_smmu_alloc_shared_cd()
86 refcount_set(&cd->refs, 1); in arm_smmu_alloc_shared_cd()
95 err = xa_insert(&arm_smmu_asid_xa, asid, cd, GFP_KERNEL); in arm_smmu_alloc_shared_cd()
127 cd->ttbr = virt_to_phys(mm->pgd); in arm_smmu_alloc_shared_cd()
128 cd->tcr = tcr; in arm_smmu_alloc_shared_cd()
133 cd->mair = read_sysreg(mair_el1); in arm_smmu_alloc_shared_cd()
134 cd->asid = asid; in arm_smmu_alloc_shared_cd()
135 cd->mm = mm; in arm_smmu_alloc_shared_cd()
137 return cd; in arm_smmu_alloc_shared_cd()
140 arm_smmu_free_asid(cd); in arm_smmu_alloc_shared_cd()
142 kfree(cd); in arm_smmu_alloc_shared_cd()
149 static void arm_smmu_free_shared_cd(struct arm_smmu_ctx_desc *cd) in arm_smmu_free_shared_cd() argument
151 if (arm_smmu_free_asid(cd)) { in arm_smmu_free_shared_cd()
153 arm64_mm_context_put(cd->mm); in arm_smmu_free_shared_cd()
154 kfree(cd); in arm_smmu_free_shared_cd()