2 * Copyright © 2016 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
28 #include "intel_ringbuffer.h"
29 #include "intel_frontbuffer.h"
31 #include <drm/drm_gem.h>
34 i915_vma_retire(struct i915_gem_active
*active
,
35 struct drm_i915_gem_request
*rq
)
37 const unsigned int idx
= rq
->engine
->id
;
38 struct i915_vma
*vma
=
39 container_of(active
, struct i915_vma
, last_read
[idx
]);
40 struct drm_i915_gem_object
*obj
= vma
->obj
;
42 GEM_BUG_ON(!i915_vma_has_active_engine(vma
, idx
));
44 i915_vma_clear_active(vma
, idx
);
45 if (i915_vma_is_active(vma
))
48 GEM_BUG_ON(!drm_mm_node_allocated(&vma
->node
));
49 list_move_tail(&vma
->vm_link
, &vma
->vm
->inactive_list
);
50 if (unlikely(i915_vma_is_closed(vma
) && !i915_vma_is_pinned(vma
)))
51 WARN_ON(i915_vma_unbind(vma
));
53 GEM_BUG_ON(!i915_gem_object_is_active(obj
));
54 if (--obj
->active_count
)
57 /* Bump our place on the bound list to keep it roughly in LRU order
58 * so that we don't steal from recently used but inactive objects
59 * (unless we are forced to ofc!)
62 list_move_tail(&obj
->global_link
, &rq
->i915
->mm
.bound_list
);
64 obj
->mm
.dirty
= true; /* be paranoid */
66 if (i915_gem_object_has_active_reference(obj
)) {
67 i915_gem_object_clear_active_reference(obj
);
68 i915_gem_object_put(obj
);
72 static struct i915_vma
*
73 vma_create(struct drm_i915_gem_object
*obj
,
74 struct i915_address_space
*vm
,
75 const struct i915_ggtt_view
*view
)
78 struct rb_node
*rb
, **p
;
81 vma
= kmem_cache_zalloc(vm
->i915
->vmas
, GFP_KERNEL
);
83 return ERR_PTR(-ENOMEM
);
85 INIT_LIST_HEAD(&vma
->exec_list
);
86 for (i
= 0; i
< ARRAY_SIZE(vma
->last_read
); i
++)
87 init_request_active(&vma
->last_read
[i
], i915_vma_retire
);
88 init_request_active(&vma
->last_fence
, NULL
);
91 vma
->size
= obj
->base
.size
;
92 vma
->display_alignment
= I915_GTT_MIN_ALIGNMENT
;
95 vma
->ggtt_view
= *view
;
96 if (view
->type
== I915_GGTT_VIEW_PARTIAL
) {
97 GEM_BUG_ON(range_overflows_t(u64
,
100 obj
->base
.size
>> PAGE_SHIFT
));
101 vma
->size
= view
->partial
.size
;
102 vma
->size
<<= PAGE_SHIFT
;
103 GEM_BUG_ON(vma
->size
>= obj
->base
.size
);
104 } else if (view
->type
== I915_GGTT_VIEW_ROTATED
) {
105 vma
->size
= intel_rotation_info_size(&view
->rotated
);
106 vma
->size
<<= PAGE_SHIFT
;
110 if (unlikely(vma
->size
> vm
->total
))
113 GEM_BUG_ON(!IS_ALIGNED(vma
->size
, I915_GTT_PAGE_SIZE
));
115 if (i915_is_ggtt(vm
)) {
116 if (unlikely(overflows_type(vma
->size
, u32
)))
119 vma
->fence_size
= i915_gem_fence_size(vm
->i915
, vma
->size
,
120 i915_gem_object_get_tiling(obj
),
121 i915_gem_object_get_stride(obj
));
122 if (unlikely(vma
->fence_size
< vma
->size
|| /* overflow */
123 vma
->fence_size
> vm
->total
))
126 GEM_BUG_ON(!IS_ALIGNED(vma
->fence_size
, I915_GTT_MIN_ALIGNMENT
));
128 vma
->fence_alignment
= i915_gem_fence_alignment(vm
->i915
, vma
->size
,
129 i915_gem_object_get_tiling(obj
),
130 i915_gem_object_get_stride(obj
));
131 GEM_BUG_ON(!is_power_of_2(vma
->fence_alignment
));
133 vma
->flags
|= I915_VMA_GGTT
;
134 list_add(&vma
->obj_link
, &obj
->vma_list
);
136 i915_ppgtt_get(i915_vm_to_ppgtt(vm
));
137 list_add_tail(&vma
->obj_link
, &obj
->vma_list
);
141 p
= &obj
->vma_tree
.rb_node
;
143 struct i915_vma
*pos
;
146 pos
= rb_entry(rb
, struct i915_vma
, obj_node
);
147 if (i915_vma_compare(pos
, vm
, view
) < 0)
152 rb_link_node(&vma
->obj_node
, rb
, p
);
153 rb_insert_color(&vma
->obj_node
, &obj
->vma_tree
);
154 list_add(&vma
->vm_link
, &vm
->unbound_list
);
159 kmem_cache_free(vm
->i915
->vmas
, vma
);
160 return ERR_PTR(-E2BIG
);
163 static struct i915_vma
*
164 vma_lookup(struct drm_i915_gem_object
*obj
,
165 struct i915_address_space
*vm
,
166 const struct i915_ggtt_view
*view
)
170 rb
= obj
->vma_tree
.rb_node
;
172 struct i915_vma
*vma
= rb_entry(rb
, struct i915_vma
, obj_node
);
175 cmp
= i915_vma_compare(vma
, vm
, view
);
189 * i915_vma_instance - return the singleton instance of the VMA
190 * @obj: parent &struct drm_i915_gem_object to be mapped
191 * @vm: address space in which the mapping is located
192 * @view: additional mapping requirements
194 * i915_vma_instance() looks up an existing VMA of the @obj in the @vm with
195 * the same @view characteristics. If a match is not found, one is created.
196 * Once created, the VMA is kept until either the object is freed, or the
197 * address space is closed.
199 * Must be called with struct_mutex held.
201 * Returns the vma, or an error pointer.
204 i915_vma_instance(struct drm_i915_gem_object
*obj
,
205 struct i915_address_space
*vm
,
206 const struct i915_ggtt_view
*view
)
208 struct i915_vma
*vma
;
210 lockdep_assert_held(&obj
->base
.dev
->struct_mutex
);
211 GEM_BUG_ON(view
&& !i915_is_ggtt(vm
));
212 GEM_BUG_ON(vm
->closed
);
214 vma
= vma_lookup(obj
, vm
, view
);
216 vma
= vma_create(obj
, vm
, view
);
218 GEM_BUG_ON(!IS_ERR(vma
) && i915_vma_is_closed(vma
));
219 GEM_BUG_ON(!IS_ERR(vma
) && i915_vma_compare(vma
, vm
, view
));
220 GEM_BUG_ON(!IS_ERR(vma
) && vma_lookup(obj
, vm
, view
) != vma
);
225 * i915_vma_bind - Sets up PTEs for an VMA in it's corresponding address space.
227 * @cache_level: mapping cache level
228 * @flags: flags like global or local mapping
230 * DMA addresses are taken from the scatter-gather table of this object (or of
231 * this VMA in case of non-default GGTT views) and PTE entries set up.
232 * Note that DMA addresses are also the only part of the SG table we care about.
234 int i915_vma_bind(struct i915_vma
*vma
, enum i915_cache_level cache_level
,
241 if (WARN_ON(flags
== 0))
245 if (flags
& PIN_GLOBAL
)
246 bind_flags
|= I915_VMA_GLOBAL_BIND
;
247 if (flags
& PIN_USER
)
248 bind_flags
|= I915_VMA_LOCAL_BIND
;
250 vma_flags
= vma
->flags
& (I915_VMA_GLOBAL_BIND
| I915_VMA_LOCAL_BIND
);
251 if (flags
& PIN_UPDATE
)
252 bind_flags
|= vma_flags
;
254 bind_flags
&= ~vma_flags
;
258 if (GEM_WARN_ON(range_overflows(vma
->node
.start
,
263 if (vma_flags
== 0 && vma
->vm
->allocate_va_range
) {
264 trace_i915_va_alloc(vma
);
265 ret
= vma
->vm
->allocate_va_range(vma
->vm
,
272 trace_i915_vma_bind(vma
, bind_flags
);
273 ret
= vma
->vm
->bind_vma(vma
, cache_level
, bind_flags
);
277 vma
->flags
|= bind_flags
;
281 void __iomem
*i915_vma_pin_iomap(struct i915_vma
*vma
)
285 /* Access through the GTT requires the device to be awake. */
286 assert_rpm_wakelock_held(vma
->vm
->i915
);
288 lockdep_assert_held(&vma
->vm
->i915
->drm
.struct_mutex
);
289 if (WARN_ON(!i915_vma_is_map_and_fenceable(vma
)))
290 return IO_ERR_PTR(-ENODEV
);
292 GEM_BUG_ON(!i915_vma_is_ggtt(vma
));
293 GEM_BUG_ON((vma
->flags
& I915_VMA_GLOBAL_BIND
) == 0);
297 ptr
= io_mapping_map_wc(&i915_vm_to_ggtt(vma
->vm
)->mappable
,
301 return IO_ERR_PTR(-ENOMEM
);
310 void i915_vma_unpin_and_release(struct i915_vma
**p_vma
)
312 struct i915_vma
*vma
;
313 struct drm_i915_gem_object
*obj
;
315 vma
= fetch_and_zero(p_vma
);
324 __i915_gem_object_release_unless_active(obj
);
328 i915_vma_misplaced(struct i915_vma
*vma
, u64 size
, u64 alignment
, u64 flags
)
330 if (!drm_mm_node_allocated(&vma
->node
))
333 if (vma
->node
.size
< size
)
336 GEM_BUG_ON(alignment
&& !is_power_of_2(alignment
));
337 if (alignment
&& !IS_ALIGNED(vma
->node
.start
, alignment
))
340 if (flags
& PIN_MAPPABLE
&& !i915_vma_is_map_and_fenceable(vma
))
343 if (flags
& PIN_OFFSET_BIAS
&&
344 vma
->node
.start
< (flags
& PIN_OFFSET_MASK
))
347 if (flags
& PIN_OFFSET_FIXED
&&
348 vma
->node
.start
!= (flags
& PIN_OFFSET_MASK
))
354 void __i915_vma_set_map_and_fenceable(struct i915_vma
*vma
)
356 bool mappable
, fenceable
;
358 GEM_BUG_ON(!i915_vma_is_ggtt(vma
));
359 GEM_BUG_ON(!vma
->fence_size
);
362 * Explicitly disable for rotated VMA since the display does not
363 * need the fence and the VMA is not accessible to other users.
365 if (vma
->ggtt_view
.type
== I915_GGTT_VIEW_ROTATED
)
368 fenceable
= (vma
->node
.size
>= vma
->fence_size
&&
369 IS_ALIGNED(vma
->node
.start
, vma
->fence_alignment
));
371 mappable
= vma
->node
.start
+ vma
->fence_size
<= i915_vm_to_ggtt(vma
->vm
)->mappable_end
;
373 if (mappable
&& fenceable
)
374 vma
->flags
|= I915_VMA_CAN_FENCE
;
376 vma
->flags
&= ~I915_VMA_CAN_FENCE
;
379 static bool color_differs(struct drm_mm_node
*node
, unsigned long color
)
381 return node
->allocated
&& node
->color
!= color
;
384 bool i915_gem_valid_gtt_space(struct i915_vma
*vma
, unsigned long cache_level
)
386 struct drm_mm_node
*node
= &vma
->node
;
387 struct drm_mm_node
*other
;
390 * On some machines we have to be careful when putting differing types
391 * of snoopable memory together to avoid the prefetcher crossing memory
392 * domains and dying. During vm initialisation, we decide whether or not
393 * these constraints apply and set the drm_mm.color_adjust
396 if (vma
->vm
->mm
.color_adjust
== NULL
)
399 /* Only valid to be called on an already inserted vma */
400 GEM_BUG_ON(!drm_mm_node_allocated(node
));
401 GEM_BUG_ON(list_empty(&node
->node_list
));
403 other
= list_prev_entry(node
, node_list
);
404 if (color_differs(other
, cache_level
) && !drm_mm_hole_follows(other
))
407 other
= list_next_entry(node
, node_list
);
408 if (color_differs(other
, cache_level
) && !drm_mm_hole_follows(node
))
415 * i915_vma_insert - finds a slot for the vma in its address space
417 * @size: requested size in bytes (can be larger than the VMA)
418 * @alignment: required alignment
419 * @flags: mask of PIN_* flags to use
421 * First we try to allocate some free space that meets the requirements for
422 * the VMA. Failiing that, if the flags permit, it will evict an old VMA,
423 * preferrably the oldest idle entry to make room for the new VMA.
426 * 0 on success, negative error code otherwise.
429 i915_vma_insert(struct i915_vma
*vma
, u64 size
, u64 alignment
, u64 flags
)
431 struct drm_i915_private
*dev_priv
= vma
->vm
->i915
;
432 struct drm_i915_gem_object
*obj
= vma
->obj
;
436 GEM_BUG_ON(vma
->flags
& (I915_VMA_GLOBAL_BIND
| I915_VMA_LOCAL_BIND
));
437 GEM_BUG_ON(drm_mm_node_allocated(&vma
->node
));
439 size
= max(size
, vma
->size
);
440 alignment
= max(alignment
, vma
->display_alignment
);
441 if (flags
& PIN_MAPPABLE
) {
442 size
= max_t(typeof(size
), size
, vma
->fence_size
);
443 alignment
= max_t(typeof(alignment
),
444 alignment
, vma
->fence_alignment
);
447 GEM_BUG_ON(!IS_ALIGNED(size
, I915_GTT_PAGE_SIZE
));
448 GEM_BUG_ON(!IS_ALIGNED(alignment
, I915_GTT_MIN_ALIGNMENT
));
449 GEM_BUG_ON(!is_power_of_2(alignment
));
451 start
= flags
& PIN_OFFSET_BIAS
? flags
& PIN_OFFSET_MASK
: 0;
452 GEM_BUG_ON(!IS_ALIGNED(start
, I915_GTT_PAGE_SIZE
));
454 end
= vma
->vm
->total
;
455 if (flags
& PIN_MAPPABLE
)
456 end
= min_t(u64
, end
, dev_priv
->ggtt
.mappable_end
);
457 if (flags
& PIN_ZONE_4G
)
458 end
= min_t(u64
, end
, (1ULL << 32) - I915_GTT_PAGE_SIZE
);
459 GEM_BUG_ON(!IS_ALIGNED(end
, I915_GTT_PAGE_SIZE
));
461 /* If binding the object/GGTT view requires more space than the entire
462 * aperture has, reject it early before evicting everything in a vain
463 * attempt to find space.
466 DRM_DEBUG("Attempting to bind an object larger than the aperture: request=%llu [object=%zd] > %s aperture=%llu\n",
467 size
, obj
->base
.size
,
468 flags
& PIN_MAPPABLE
? "mappable" : "total",
473 ret
= i915_gem_object_pin_pages(obj
);
477 if (flags
& PIN_OFFSET_FIXED
) {
478 u64 offset
= flags
& PIN_OFFSET_MASK
;
479 if (!IS_ALIGNED(offset
, alignment
) ||
480 range_overflows(offset
, size
, end
)) {
485 ret
= i915_gem_gtt_reserve(vma
->vm
, &vma
->node
,
486 size
, offset
, obj
->cache_level
,
491 ret
= i915_gem_gtt_insert(vma
->vm
, &vma
->node
,
492 size
, alignment
, obj
->cache_level
,
497 GEM_BUG_ON(vma
->node
.start
< start
);
498 GEM_BUG_ON(vma
->node
.start
+ vma
->node
.size
> end
);
500 GEM_BUG_ON(!drm_mm_node_allocated(&vma
->node
));
501 GEM_BUG_ON(!i915_gem_valid_gtt_space(vma
, obj
->cache_level
));
503 list_move_tail(&obj
->global_link
, &dev_priv
->mm
.bound_list
);
504 list_move_tail(&vma
->vm_link
, &vma
->vm
->inactive_list
);
506 GEM_BUG_ON(atomic_read(&obj
->mm
.pages_pin_count
) < obj
->bind_count
);
511 i915_gem_object_unpin_pages(obj
);
515 int __i915_vma_do_pin(struct i915_vma
*vma
,
516 u64 size
, u64 alignment
, u64 flags
)
518 unsigned int bound
= vma
->flags
;
521 lockdep_assert_held(&vma
->vm
->i915
->drm
.struct_mutex
);
522 GEM_BUG_ON((flags
& (PIN_GLOBAL
| PIN_USER
)) == 0);
523 GEM_BUG_ON((flags
& PIN_GLOBAL
) && !i915_vma_is_ggtt(vma
));
525 if (WARN_ON(bound
& I915_VMA_PIN_OVERFLOW
)) {
530 if ((bound
& I915_VMA_BIND_MASK
) == 0) {
531 ret
= i915_vma_insert(vma
, size
, alignment
, flags
);
536 ret
= i915_vma_bind(vma
, vma
->obj
->cache_level
, flags
);
540 if ((bound
^ vma
->flags
) & I915_VMA_GLOBAL_BIND
)
541 __i915_vma_set_map_and_fenceable(vma
);
543 GEM_BUG_ON(!drm_mm_node_allocated(&vma
->node
));
544 GEM_BUG_ON(i915_vma_misplaced(vma
, size
, alignment
, flags
));
548 __i915_vma_unpin(vma
);
552 void i915_vma_destroy(struct i915_vma
*vma
)
554 GEM_BUG_ON(vma
->node
.allocated
);
555 GEM_BUG_ON(i915_vma_is_active(vma
));
556 GEM_BUG_ON(!i915_vma_is_closed(vma
));
557 GEM_BUG_ON(vma
->fence
);
559 list_del(&vma
->vm_link
);
560 if (!i915_vma_is_ggtt(vma
))
561 i915_ppgtt_put(i915_vm_to_ppgtt(vma
->vm
));
563 kmem_cache_free(to_i915(vma
->obj
->base
.dev
)->vmas
, vma
);
566 void i915_vma_close(struct i915_vma
*vma
)
568 GEM_BUG_ON(i915_vma_is_closed(vma
));
569 vma
->flags
|= I915_VMA_CLOSED
;
571 list_del(&vma
->obj_link
);
572 rb_erase(&vma
->obj_node
, &vma
->obj
->vma_tree
);
574 if (!i915_vma_is_active(vma
) && !i915_vma_is_pinned(vma
))
575 WARN_ON(i915_vma_unbind(vma
));
578 static void __i915_vma_iounmap(struct i915_vma
*vma
)
580 GEM_BUG_ON(i915_vma_is_pinned(vma
));
582 if (vma
->iomap
== NULL
)
585 io_mapping_unmap(vma
->iomap
);
589 int i915_vma_unbind(struct i915_vma
*vma
)
591 struct drm_i915_gem_object
*obj
= vma
->obj
;
592 unsigned long active
;
595 lockdep_assert_held(&obj
->base
.dev
->struct_mutex
);
597 /* First wait upon any activity as retiring the request may
598 * have side-effects such as unpinning or even unbinding this vma.
600 active
= i915_vma_get_active(vma
);
604 /* When a closed VMA is retired, it is unbound - eek.
605 * In order to prevent it from being recursively closed,
606 * take a pin on the vma so that the second unbind is
609 * Even more scary is that the retire callback may free
610 * the object (last active vma). To prevent the explosion
611 * we defer the actual object free to a worker that can
612 * only proceed once it acquires the struct_mutex (which
613 * we currently hold, therefore it cannot free this object
614 * before we are finished).
618 for_each_active(active
, idx
) {
619 ret
= i915_gem_active_retire(&vma
->last_read
[idx
],
620 &vma
->vm
->i915
->drm
.struct_mutex
);
625 __i915_vma_unpin(vma
);
629 GEM_BUG_ON(i915_vma_is_active(vma
));
632 if (i915_vma_is_pinned(vma
))
635 if (!drm_mm_node_allocated(&vma
->node
))
638 GEM_BUG_ON(obj
->bind_count
== 0);
639 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(obj
));
641 if (i915_vma_is_map_and_fenceable(vma
)) {
642 /* release the fence reg _after_ flushing */
643 ret
= i915_vma_put_fence(vma
);
647 /* Force a pagefault for domain tracking on next user access */
648 i915_gem_release_mmap(obj
);
650 __i915_vma_iounmap(vma
);
651 vma
->flags
&= ~I915_VMA_CAN_FENCE
;
654 if (likely(!vma
->vm
->closed
)) {
655 trace_i915_vma_unbind(vma
);
656 vma
->vm
->unbind_vma(vma
);
658 vma
->flags
&= ~(I915_VMA_GLOBAL_BIND
| I915_VMA_LOCAL_BIND
);
660 drm_mm_remove_node(&vma
->node
);
661 list_move_tail(&vma
->vm_link
, &vma
->vm
->unbound_list
);
663 if (vma
->pages
!= obj
->mm
.pages
) {
664 GEM_BUG_ON(!vma
->pages
);
665 sg_free_table(vma
->pages
);
670 /* Since the unbound list is global, only move to that list if
671 * no more VMAs exist. */
672 if (--obj
->bind_count
== 0)
673 list_move_tail(&obj
->global_link
,
674 &to_i915(obj
->base
.dev
)->mm
.unbound_list
);
676 /* And finally now the object is completely decoupled from this vma,
677 * we can drop its hold on the backing storage and allow it to be
678 * reaped by the shrinker.
680 i915_gem_object_unpin_pages(obj
);
681 GEM_BUG_ON(atomic_read(&obj
->mm
.pages_pin_count
) < obj
->bind_count
);
684 if (unlikely(i915_vma_is_closed(vma
)))
685 i915_vma_destroy(vma
);