Lines Matching refs:msm_obj

22 static void update_inactive(struct msm_gem_object *msm_obj);
26 struct msm_gem_object *msm_obj = to_msm_bo(obj); in physaddr() local
28 return (((dma_addr_t)msm_obj->vram_node->start) << PAGE_SHIFT) + in physaddr()
34 struct msm_gem_object *msm_obj = to_msm_bo(obj); in use_pages() local
35 return !msm_obj->vram_node; in use_pages()
52 static void sync_for_device(struct msm_gem_object *msm_obj) in sync_for_device() argument
54 struct device *dev = msm_obj->base.dev->dev; in sync_for_device()
56 dma_map_sgtable(dev, msm_obj->sgt, DMA_BIDIRECTIONAL, 0); in sync_for_device()
59 static void sync_for_cpu(struct msm_gem_object *msm_obj) in sync_for_cpu() argument
61 struct device *dev = msm_obj->base.dev->dev; in sync_for_cpu()
63 dma_unmap_sgtable(dev, msm_obj->sgt, DMA_BIDIRECTIONAL, 0); in sync_for_cpu()
69 struct msm_gem_object *msm_obj = to_msm_bo(obj); in get_pages_vram() local
80 ret = drm_mm_insert_node(&priv->vram.mm, msm_obj->vram_node, npages); in get_pages_vram()
98 struct msm_gem_object *msm_obj = to_msm_bo(obj); in get_pages() local
102 if (!msm_obj->pages) { in get_pages()
118 msm_obj->pages = p; in get_pages()
120 msm_obj->sgt = drm_prime_pages_to_sg(obj->dev, p, npages); in get_pages()
121 if (IS_ERR(msm_obj->sgt)) { in get_pages()
122 void *ptr = ERR_CAST(msm_obj->sgt); in get_pages()
125 msm_obj->sgt = NULL; in get_pages()
132 if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED)) in get_pages()
133 sync_for_device(msm_obj); in get_pages()
135 update_inactive(msm_obj); in get_pages()
138 return msm_obj->pages; in get_pages()
143 struct msm_gem_object *msm_obj = to_msm_bo(obj); in put_pages_vram() local
147 drm_mm_remove_node(msm_obj->vram_node); in put_pages_vram()
150 kvfree(msm_obj->pages); in put_pages_vram()
155 struct msm_gem_object *msm_obj = to_msm_bo(obj); in put_pages() local
157 if (msm_obj->pages) { in put_pages()
158 if (msm_obj->sgt) { in put_pages()
163 if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED)) in put_pages()
164 sync_for_cpu(msm_obj); in put_pages()
166 sg_free_table(msm_obj->sgt); in put_pages()
167 kfree(msm_obj->sgt); in put_pages()
168 msm_obj->sgt = NULL; in put_pages()
172 drm_gem_put_pages(obj, msm_obj->pages, true, false); in put_pages()
176 msm_obj->pages = NULL; in put_pages()
182 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_get_pages() local
187 if (GEM_WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED)) { in msm_gem_get_pages()
195 msm_obj->pin_count++; in msm_gem_get_pages()
196 update_inactive(msm_obj); in msm_gem_get_pages()
205 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_put_pages() local
208 msm_obj->pin_count--; in msm_gem_put_pages()
209 GEM_WARN_ON(msm_obj->pin_count < 0); in msm_gem_put_pages()
210 update_inactive(msm_obj); in msm_gem_put_pages()
214 static pgprot_t msm_gem_pgprot(struct msm_gem_object *msm_obj, pgprot_t prot) in msm_gem_pgprot() argument
216 if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED)) in msm_gem_pgprot()
225 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_fault() local
242 if (GEM_WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED)) { in msm_gem_fault()
301 struct msm_gem_object *msm_obj = to_msm_bo(obj); in add_vma() local
312 list_add_tail(&vma->list, &msm_obj->vmas); in add_vma()
320 struct msm_gem_object *msm_obj = to_msm_bo(obj); in lookup_vma() local
325 list_for_each_entry(vma, &msm_obj->vmas, list) { in lookup_vma()
351 struct msm_gem_object *msm_obj = to_msm_bo(obj); in put_iova_spaces() local
356 list_for_each_entry(vma, &msm_obj->vmas, list) { in put_iova_spaces()
369 struct msm_gem_object *msm_obj = to_msm_bo(obj); in put_iova_vmas() local
374 list_for_each_entry_safe(vma, tmp, &msm_obj->vmas, list) { in put_iova_vmas()
410 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_pin_iova() local
415 if (!(msm_obj->flags & MSM_BO_GPU_READONLY)) in msm_gem_pin_iova()
418 if (msm_obj->flags & MSM_BO_MAP_PRIV) in msm_gem_pin_iova()
421 if (msm_obj->flags & MSM_BO_CACHED_COHERENT) in msm_gem_pin_iova()
426 if (GEM_WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED)) in msm_gem_pin_iova()
438 msm_obj->sgt, obj->size >> PAGE_SHIFT); in msm_gem_pin_iova()
441 msm_obj->pin_count++; in msm_gem_pin_iova()
535 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_unpin_iova_locked() local
545 msm_obj->pin_count--; in msm_gem_unpin_iova_locked()
546 GEM_WARN_ON(msm_obj->pin_count < 0); in msm_gem_unpin_iova_locked()
548 update_inactive(msm_obj); in msm_gem_unpin_iova_locked()
597 struct msm_gem_object *msm_obj = to_msm_bo(obj); in get_vaddr() local
605 if (GEM_WARN_ON(msm_obj->madv > madv)) { in get_vaddr()
607 msm_obj->madv, madv); in get_vaddr()
617 msm_obj->vmap_count++; in get_vaddr()
619 if (!msm_obj->vaddr) { in get_vaddr()
625 msm_obj->vaddr = vmap(pages, obj->size >> PAGE_SHIFT, in get_vaddr()
626 VM_MAP, msm_gem_pgprot(msm_obj, PAGE_KERNEL)); in get_vaddr()
627 if (msm_obj->vaddr == NULL) { in get_vaddr()
632 update_inactive(msm_obj); in get_vaddr()
635 return msm_obj->vaddr; in get_vaddr()
638 msm_obj->vmap_count--; in get_vaddr()
671 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_put_vaddr_locked() local
674 GEM_WARN_ON(msm_obj->vmap_count < 1); in msm_gem_put_vaddr_locked()
676 msm_obj->vmap_count--; in msm_gem_put_vaddr_locked()
691 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_madvise() local
695 if (msm_obj->madv != __MSM_MADV_PURGED) in msm_gem_madvise()
696 msm_obj->madv = madv; in msm_gem_madvise()
698 madv = msm_obj->madv; in msm_gem_madvise()
703 if (msm_obj->active_count == 0) in msm_gem_madvise()
704 update_inactive(msm_obj); in msm_gem_madvise()
714 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_purge() local
717 GEM_WARN_ON(!is_purgeable(msm_obj)); in msm_gem_purge()
730 msm_obj->madv = __MSM_MADV_PURGED; in msm_gem_purge()
731 update_inactive(msm_obj); in msm_gem_purge()
752 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_evict() local
755 GEM_WARN_ON(is_unevictable(msm_obj)); in msm_gem_evict()
756 GEM_WARN_ON(!msm_obj->evictable); in msm_gem_evict()
757 GEM_WARN_ON(msm_obj->active_count); in msm_gem_evict()
766 update_inactive(msm_obj); in msm_gem_evict()
771 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_vunmap() local
775 if (!msm_obj->vaddr || GEM_WARN_ON(!is_vunmapable(msm_obj))) in msm_gem_vunmap()
778 vunmap(msm_obj->vaddr); in msm_gem_vunmap()
779 msm_obj->vaddr = NULL; in msm_gem_vunmap()
784 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_active_get() local
789 GEM_WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED); in msm_gem_active_get()
790 GEM_WARN_ON(msm_obj->dontneed); in msm_gem_active_get()
792 if (msm_obj->active_count++ == 0) { in msm_gem_active_get()
794 if (msm_obj->evictable) in msm_gem_active_get()
795 mark_unevictable(msm_obj); in msm_gem_active_get()
796 list_move_tail(&msm_obj->mm_list, &gpu->active_list); in msm_gem_active_get()
803 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_active_put() local
808 if (--msm_obj->active_count == 0) { in msm_gem_active_put()
809 update_inactive(msm_obj); in msm_gem_active_put()
813 static void update_inactive(struct msm_gem_object *msm_obj) in update_inactive() argument
815 struct msm_drm_private *priv = msm_obj->base.dev->dev_private; in update_inactive()
817 GEM_WARN_ON(!msm_gem_is_locked(&msm_obj->base)); in update_inactive()
819 if (msm_obj->active_count != 0) in update_inactive()
824 if (msm_obj->dontneed) in update_inactive()
825 mark_unpurgeable(msm_obj); in update_inactive()
826 if (msm_obj->evictable) in update_inactive()
827 mark_unevictable(msm_obj); in update_inactive()
829 list_del(&msm_obj->mm_list); in update_inactive()
830 if ((msm_obj->madv == MSM_MADV_WILLNEED) && msm_obj->sgt) { in update_inactive()
831 list_add_tail(&msm_obj->mm_list, &priv->inactive_willneed); in update_inactive()
832 mark_evictable(msm_obj); in update_inactive()
833 } else if (msm_obj->madv == MSM_MADV_DONTNEED) { in update_inactive()
834 list_add_tail(&msm_obj->mm_list, &priv->inactive_dontneed); in update_inactive()
835 mark_purgeable(msm_obj); in update_inactive()
837 GEM_WARN_ON((msm_obj->madv != __MSM_MADV_PURGED) && msm_obj->sgt); in update_inactive()
838 list_add_tail(&msm_obj->mm_list, &priv->inactive_unpinned); in update_inactive()
882 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_describe() local
895 if (is_active(msm_obj)) { in msm_gem_describe()
900 if (msm_obj->pages) { in msm_gem_describe()
905 switch (msm_obj->madv) { in msm_gem_describe()
923 msm_obj->flags, is_active(msm_obj) ? 'A' : 'I', in msm_gem_describe()
925 off, msm_obj->vaddr); in msm_gem_describe()
927 seq_printf(m, " %08zu %9s %-32s\n", obj->size, madv, msm_obj->name); in msm_gem_describe()
929 if (!list_empty(&msm_obj->vmas)) { in msm_gem_describe()
933 list_for_each_entry(vma, &msm_obj->vmas, list) { in msm_gem_describe()
981 struct msm_gem_object *msm_obj; in msm_gem_describe_objects() local
984 list_for_each_entry(msm_obj, list, node) { in msm_gem_describe_objects()
985 struct drm_gem_object *obj = &msm_obj->base; in msm_gem_describe_objects()
1006 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_free_object() local
1011 list_del(&msm_obj->node); in msm_gem_free_object()
1015 if (msm_obj->dontneed) in msm_gem_free_object()
1016 mark_unpurgeable(msm_obj); in msm_gem_free_object()
1017 list_del(&msm_obj->mm_list); in msm_gem_free_object()
1023 GEM_WARN_ON(is_active(msm_obj)); in msm_gem_free_object()
1028 GEM_WARN_ON(msm_obj->vaddr); in msm_gem_free_object()
1033 kvfree(msm_obj->pages); in msm_gem_free_object()
1042 drm_prime_gem_destroy(obj, msm_obj->sgt); in msm_gem_free_object()
1052 kfree(msm_obj); in msm_gem_free_object()
1057 struct msm_gem_object *msm_obj = to_msm_bo(obj); in msm_gem_object_mmap() local
1060 vma->vm_page_prot = msm_gem_pgprot(msm_obj, vm_get_page_prot(vma->vm_flags)); in msm_gem_object_mmap()
1111 struct msm_gem_object *msm_obj; in msm_gem_new_impl() local
1128 msm_obj = kzalloc(sizeof(*msm_obj), GFP_KERNEL); in msm_gem_new_impl()
1129 if (!msm_obj) in msm_gem_new_impl()
1132 msm_obj->flags = flags; in msm_gem_new_impl()
1133 msm_obj->madv = MSM_MADV_WILLNEED; in msm_gem_new_impl()
1135 INIT_LIST_HEAD(&msm_obj->node); in msm_gem_new_impl()
1136 INIT_LIST_HEAD(&msm_obj->vmas); in msm_gem_new_impl()
1138 *obj = &msm_obj->base; in msm_gem_new_impl()
1147 struct msm_gem_object *msm_obj; in msm_gem_new() local
1172 msm_obj = to_msm_bo(obj); in msm_gem_new()
1196 INIT_LIST_HEAD(&msm_obj->mm_list); in msm_gem_new()
1221 list_add_tail(&msm_obj->mm_list, &priv->inactive_unpinned); in msm_gem_new()
1225 list_add_tail(&msm_obj->node, &priv->objects); in msm_gem_new()
1239 struct msm_gem_object *msm_obj; in msm_gem_import() local
1260 msm_obj = to_msm_bo(obj); in msm_gem_import()
1262 msm_obj->sgt = sgt; in msm_gem_import()
1263 msm_obj->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL); in msm_gem_import()
1264 if (!msm_obj->pages) { in msm_gem_import()
1270 ret = drm_prime_sg_to_page_array(sgt, msm_obj->pages, npages); in msm_gem_import()
1279 list_add_tail(&msm_obj->mm_list, &priv->inactive_unpinned); in msm_gem_import()
1283 list_add_tail(&msm_obj->node, &priv->objects); in msm_gem_import()
1341 struct msm_gem_object *msm_obj = to_msm_bo(bo); in msm_gem_object_set_name() local
1348 vsnprintf(msm_obj->name, sizeof(msm_obj->name), fmt, ap); in msm_gem_object_set_name()