On Mon, 29 Nov 2021 at 13:58, Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> wrote: > > Add a flag PIN_VALIDATE, to indicate we don't need to pin and only > protected by the object lock. > > This removes the need to unpin, which is done by just releasing the > lock. > > eb_reserve is slightly reworked for readability, but the same steps > are still done: > - First pass pins with NONBLOCK. > - Second pass unbinds all objects first, then pins. > - Third pass is only called when not all objects are softpinned, and > unbinds all objects, then calls i915_gem_evict_vm(), then pins. > > When evicting the entire vm in eb_reserve() we do temporarily pin objects > that are marked with EXEC_OBJECT_PINNED. This is because they are already > at their destination, and i915_gem_evict_vm() would otherwise unbind them. > > However, we reduce the visibility of those pins by limiting the pin > to our call to i915_gem_evict_vm() only, and pin with vm->mutex held, > instead of the entire duration of the execbuf. > > Not sure the latter matters, one can hope.. > In theory we could kill the pinning by adding an extra flag to the vma > to temporarily prevent unbinding for gtt for i915_gem_evict_vm only, but > I think that might be overkill. We're still holding the object lock, and > we don't have blocking eviction yet. It's likely sufficient to simply > enforce EXEC_OBJECT_PINNED for all objects on >= gen12. > > Changes since v1: > - Split out eb_reserve() into separate functions for readability. > Changes since v2: > - Make batch buffer mappable on platforms where only GGTT is available, > to prevent moving the batch buffer during relocations. > Changes since v3: > - Preserve current behavior for batch buffer, instead be cautious when > calling i915_gem_object_ggtt_pin_ww, and re-use the current batch vma > if it's inside ggtt and map-and-fenceable. > - Remove impossible condition check from eb_reserve. (Matt) > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Reviewed-by: Matthew Auld <matthew.auld@xxxxxxxxx>