• Ben Widawsky's avatar
    drm/i915: plumb VM into bind/unbind code · 07fe0b12
    Ben Widawsky authored
    As alluded to in several patches, and it will be reiterated later... A
    VMA is an abstraction for a GEM BO bound into an address space.
    Therefore it stands to reason, that the existing bind, and unbind are
    the ones which will be the most impacted. This patch implements this,
    and updates all callers which weren't already updated in the series
    (because it was too messy).
    
    This patch represents the bulk of an earlier, larger patch. I've pulled
    out a bunch of things by the request of Daniel. The history is preserved
    for posterity with the email convention of ">" One big change from the
    original patch aside from a bunch of cropping is I've created an
    i915_vma_unbind() function. That is because we always have the VMA
    anyway, and doing an extra lookup is useful. There is a caveat, we
    retain an i915_gem_object_ggtt_unbind, for the global cases which might
    not talk in VMAs.
    
    > drm/i915: plumb VM into object operations
    >
    > This patch was formerly known as:
    > "drm/i915: Create VMAs (part 3) - plumbing"
    >
    > This patch adds a VM argument, bind/unbind, and the object
    > offset/size/color getters/setters. It preserves the old ggtt helper
    > functions because things still need, and will continue to need them.
    >
    > Some code will still need to be ported over after this.
    >
    > v2: Fix purge to pick an object and unbind all vmas
    > This was doable because of the global bound list change.
    >
    > v3: With the commit to actually pin/unpin pages in place, there is no
    > longer a need to check if unbind succeeded before calling put_pages().
    > Make put_pages only BUG() after checking pin count.
    >
    > v4: Rebased on top of the new hangcheck work by Mika
    > plumbed eb_destroy also
    > Many checkpatch related fixes
    >
    > v5: Very large rebase
    >
    > v6:
    > Change BUG_ON to WARN_ON (Daniel)
    > Rename vm to ggtt in preallocate stolen, since it is always ggtt when
    > dealing with stolen memory. (Daniel)
    > list_for_each will short-circuit already (Daniel)
    > remove superflous space (Daniel)
    > Use per object list of vmas (Daniel)
    > Make obj_bound_any() use obj_bound for each vm (Ben)
    > s/bind_to_gtt/bind_to_vm/ (Ben)
    >
    > Fixed up the inactive shrinker. As Daniel noticed the code could
    > potentially count the same object multiple times. While it's not
    > possible in the current case, since 1 object can only ever be bound into
    > 1 address space thus far - we may as well try to get something more
    > future proof in place now. With a prep patch before this to switch over
    > to using the bound list + inactive check, we're now able to carry that
    > forward for every address space an object is bound into.
    Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    [danvet: Rebase on top of the loss of "drm/i915: Cleanup more of VMA
    in destroy".]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    07fe0b12
i915_gem_tiling.c 16.2 KB