Lines Matching refs:vkms_obj
151 static struct page **_get_pages(struct vkms_gem_object *vkms_obj) in _get_pages() argument
153 struct drm_gem_object *gem_obj = &vkms_obj->gem; in _get_pages()
155 if (!vkms_obj->pages) { in _get_pages()
161 if (cmpxchg(&vkms_obj->pages, NULL, pages)) in _get_pages()
165 return vkms_obj->pages; in _get_pages()
170 struct vkms_gem_object *vkms_obj = drm_gem_to_vkms_gem(obj); in vkms_gem_vunmap() local
172 mutex_lock(&vkms_obj->pages_lock); in vkms_gem_vunmap()
173 if (vkms_obj->vmap_count < 1) { in vkms_gem_vunmap()
174 WARN_ON(vkms_obj->vaddr); in vkms_gem_vunmap()
175 WARN_ON(vkms_obj->pages); in vkms_gem_vunmap()
176 mutex_unlock(&vkms_obj->pages_lock); in vkms_gem_vunmap()
180 vkms_obj->vmap_count--; in vkms_gem_vunmap()
182 if (vkms_obj->vmap_count == 0) { in vkms_gem_vunmap()
183 vunmap(vkms_obj->vaddr); in vkms_gem_vunmap()
184 vkms_obj->vaddr = NULL; in vkms_gem_vunmap()
185 drm_gem_put_pages(obj, vkms_obj->pages, false, true); in vkms_gem_vunmap()
186 vkms_obj->pages = NULL; in vkms_gem_vunmap()
189 mutex_unlock(&vkms_obj->pages_lock); in vkms_gem_vunmap()
194 struct vkms_gem_object *vkms_obj = drm_gem_to_vkms_gem(obj); in vkms_gem_vmap() local
197 mutex_lock(&vkms_obj->pages_lock); in vkms_gem_vmap()
199 if (!vkms_obj->vaddr) { in vkms_gem_vmap()
201 struct page **pages = _get_pages(vkms_obj); in vkms_gem_vmap()
208 vkms_obj->vaddr = vmap(pages, n_pages, VM_MAP, PAGE_KERNEL); in vkms_gem_vmap()
209 if (!vkms_obj->vaddr) in vkms_gem_vmap()
213 vkms_obj->vmap_count++; in vkms_gem_vmap()
218 drm_gem_put_pages(obj, vkms_obj->pages, false, true); in vkms_gem_vmap()
219 vkms_obj->pages = NULL; in vkms_gem_vmap()
221 mutex_unlock(&vkms_obj->pages_lock); in vkms_gem_vmap()