Lines Matching +full:memory +full:- +full:mapped
1 // SPDX-License-Identifier: GPL-2.0-only
17 drm_mm_takedown(&aspace->mm); in msm_gem_address_space_destroy()
18 if (aspace->mmu) in msm_gem_address_space_destroy()
19 aspace->mmu->funcs->destroy(aspace->mmu); in msm_gem_address_space_destroy()
20 put_pid(aspace->pid); in msm_gem_address_space_destroy()
28 kref_put(&aspace->kref, msm_gem_address_space_destroy); in msm_gem_address_space_put()
35 kref_get(&aspace->kref); in msm_gem_address_space_get()
40 /* Actually unmap memory for the vma */
44 unsigned size = vma->node.size << PAGE_SHIFT; in msm_gem_purge_vma()
47 if (WARN_ON(vma->inuse > 0)) in msm_gem_purge_vma()
50 /* Don't do anything if the memory isn't mapped */ in msm_gem_purge_vma()
51 if (!vma->mapped) in msm_gem_purge_vma()
54 if (aspace->mmu) in msm_gem_purge_vma()
55 aspace->mmu->funcs->unmap(aspace->mmu, vma->iova, size); in msm_gem_purge_vma()
57 vma->mapped = false; in msm_gem_purge_vma()
64 if (!WARN_ON(!vma->iova)) in msm_gem_unmap_vma()
65 vma->inuse--; in msm_gem_unmap_vma()
76 if (WARN_ON(!vma->iova)) in msm_gem_map_vma()
77 return -EINVAL; in msm_gem_map_vma()
80 vma->inuse++; in msm_gem_map_vma()
82 if (vma->mapped) in msm_gem_map_vma()
85 vma->mapped = true; in msm_gem_map_vma()
87 if (aspace && aspace->mmu) in msm_gem_map_vma()
88 ret = aspace->mmu->funcs->map(aspace->mmu, vma->iova, sgt, in msm_gem_map_vma()
92 vma->mapped = false; in msm_gem_map_vma()
93 vma->inuse--; in msm_gem_map_vma()
103 if (WARN_ON(vma->inuse > 0 || vma->mapped)) in msm_gem_close_vma()
106 spin_lock(&aspace->lock); in msm_gem_close_vma()
107 if (vma->iova) in msm_gem_close_vma()
108 drm_mm_remove_node(&vma->node); in msm_gem_close_vma()
109 spin_unlock(&aspace->lock); in msm_gem_close_vma()
111 vma->iova = 0; in msm_gem_close_vma()
123 if (WARN_ON(vma->iova)) in msm_gem_init_vma()
124 return -EBUSY; in msm_gem_init_vma()
126 spin_lock(&aspace->lock); in msm_gem_init_vma()
127 ret = drm_mm_insert_node_in_range(&aspace->mm, &vma->node, npages, 0, in msm_gem_init_vma()
129 spin_unlock(&aspace->lock); in msm_gem_init_vma()
134 vma->iova = vma->node.start << PAGE_SHIFT; in msm_gem_init_vma()
135 vma->mapped = false; in msm_gem_init_vma()
137 kref_get(&aspace->kref); in msm_gem_init_vma()
153 return ERR_PTR(-ENOMEM); in msm_gem_address_space_create()
155 spin_lock_init(&aspace->lock); in msm_gem_address_space_create()
156 aspace->name = name; in msm_gem_address_space_create()
157 aspace->mmu = mmu; in msm_gem_address_space_create()
159 drm_mm_init(&aspace->mm, va_start >> PAGE_SHIFT, size >> PAGE_SHIFT); in msm_gem_address_space_create()
161 kref_init(&aspace->kref); in msm_gem_address_space_create()