Lines Matching full:mapping

7 #include <linux/dma-mapping.h>
219 struct etnaviv_vram_mapping *mapping; in etnaviv_gem_get_vram_mapping() local
221 list_for_each_entry(mapping, &obj->vram_list, obj_node) { in etnaviv_gem_get_vram_mapping()
222 if (mapping->context == context) in etnaviv_gem_get_vram_mapping()
223 return mapping; in etnaviv_gem_get_vram_mapping()
229 void etnaviv_gem_mapping_unreference(struct etnaviv_vram_mapping *mapping) in etnaviv_gem_mapping_unreference() argument
231 struct etnaviv_gem_object *etnaviv_obj = mapping->object; in etnaviv_gem_mapping_unreference()
234 WARN_ON(mapping->use == 0); in etnaviv_gem_mapping_unreference()
235 mapping->use -= 1; in etnaviv_gem_mapping_unreference()
246 struct etnaviv_vram_mapping *mapping; in etnaviv_gem_mapping_get() local
251 mapping = etnaviv_gem_get_vram_mapping(etnaviv_obj, mmu_context); in etnaviv_gem_mapping_get()
252 if (mapping) { in etnaviv_gem_mapping_get()
257 * the MMU owns this mapping to close this race. in etnaviv_gem_mapping_get()
259 if (mapping->use == 0) { in etnaviv_gem_mapping_get()
261 if (mapping->context == mmu_context) in etnaviv_gem_mapping_get()
262 if (va && mapping->iova != va) { in etnaviv_gem_mapping_get()
263 etnaviv_iommu_reap_mapping(mapping); in etnaviv_gem_mapping_get()
264 mapping = NULL; in etnaviv_gem_mapping_get()
266 mapping->use += 1; in etnaviv_gem_mapping_get()
269 mapping = NULL; in etnaviv_gem_mapping_get()
271 if (mapping) in etnaviv_gem_mapping_get()
274 mapping->use += 1; in etnaviv_gem_mapping_get()
286 * See if we have a reaped vram mapping we can re-use before in etnaviv_gem_mapping_get()
287 * allocating a fresh mapping. in etnaviv_gem_mapping_get()
289 mapping = etnaviv_gem_get_vram_mapping(etnaviv_obj, NULL); in etnaviv_gem_mapping_get()
290 if (!mapping) { in etnaviv_gem_mapping_get()
291 mapping = kzalloc(sizeof(*mapping), GFP_KERNEL); in etnaviv_gem_mapping_get()
292 if (!mapping) { in etnaviv_gem_mapping_get()
297 INIT_LIST_HEAD(&mapping->scan_node); in etnaviv_gem_mapping_get()
298 mapping->object = etnaviv_obj; in etnaviv_gem_mapping_get()
300 list_del(&mapping->obj_node); in etnaviv_gem_mapping_get()
303 mapping->use = 1; in etnaviv_gem_mapping_get()
307 mapping, va); in etnaviv_gem_mapping_get()
309 kfree(mapping); in etnaviv_gem_mapping_get()
311 list_add_tail(&mapping->obj_node, &etnaviv_obj->vram_list); in etnaviv_gem_mapping_get()
321 return mapping; in etnaviv_gem_mapping_get()
491 struct etnaviv_vram_mapping *mapping, *tmp; in etnaviv_gem_free_object() local
500 list_for_each_entry_safe(mapping, tmp, &etnaviv_obj->vram_list, in etnaviv_gem_free_object()
502 struct etnaviv_iommu_context *context = mapping->context; in etnaviv_gem_free_object()
504 WARN_ON(mapping->use); in etnaviv_gem_free_object()
507 etnaviv_iommu_unmap_gem(context, mapping); in etnaviv_gem_free_object()
509 list_del(&mapping->obj_node); in etnaviv_gem_free_object()
510 kfree(mapping); in etnaviv_gem_free_object()