• C
    drm/i915: Add soft-pinning API for execbuffer · 506a8e87
    Chris Wilson 提交于
    Userspace can pass in an offset that it presumes the object is located
    at. The kernel will then do its utmost to fit the object into that
    location. The assumption is that userspace is handling its own object
    locations (for example along with full-ppgtt) and that the kernel will
    rarely have to make space for the user's requests.
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    
    v2: Fixed incorrect eviction found by Michal Winiarski - fix suggested by Chris
    Wilson.  Fixed incorrect error paths causing crash found by Michal Winiarski.
    (Not published externally)
    
    v3: Rebased because of trivial conflict in object_bind_to_vm.  Fixed eviction
    to allow eviction of soft-pinned objects when another soft-pinned object used
    by a subsequent execbuffer overlaps reported by Michal Winiarski.
    (Not published externally)
    
    v4: Moved soft-pinned objects to the front of ordered_vmas so that they are
    pinned first after an address conflict happens to avoid repeated conflicts in
    rare cases (Suggested by Chris Wilson).  Expanded comment on
    drm_i915_gem_exec_object2.offset to cover this new API.
    
    v5: Added I915_PARAM_HAS_EXEC_SOFTPIN parameter for detecting this capability
    (Kristian). Added check for multiple pinnings on eviction (Akash). Made sure
    buffers are not considered misplaced without the user specifying
    EXEC_OBJECT_SUPPORTS_48B_ADDRESS.  User must assume responsibility for any
    addressing workarounds.  Updated object2.offset field comment again to clarify
    NO_RELOC case (Chris).  checkpatch cleanup.
    
    v6: Trivial rebase on latest drm-intel-nightly
    
    v7: Catch attempts to pin above the max virtual address size and return
    EINVAL (Tvrtko). Decouple EXEC_OBJECT_SUPPORTS_48B_ADDRESS and
    EXEC_OBJECT_PINNED flags, user must pass both flags in any attempt to pin
    something at an offset above 4GB (Chris, Daniel Vetter).
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Akash Goel <akash.goel@intel.com>
    Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
    Cc: Michal Winiarski <michal.winiarski@intel.com>
    Cc: Zou Nanhai <nanhai.zou@intel.com>
    Cc: Kristian Høgsberg <hoegsberg@gmail.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Reviewed-by: NMichel Thierry <michel.thierry@intel.com>
    Acked-by: PDT
    Signed-off-by: NThomas Daniel <thomas.daniel@intel.com>
    Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1449575707-20933-1-git-send-email-thomas.daniel@intel.com
    506a8e87
i915_gem_execbuffer.c 47.6 KB