[PATCH v10 00/23] drm/i915/vm_bind: Add VM_BIND functionality

Niranjana Vishwanathapura niranjana.vishwanathapura at intel.com
Thu Apr 13 18:51:20 UTC 2023


On Tue, Jan 17, 2023 at 11:15:46PM -0800, Niranjana Vishwanathapura wrote:
>DRM_I915_GEM_VM_BIND/UNBIND ioctls allows UMD to bind/unbind GEM
>buffer objects (BOs) or sections of a BOs at specified GPU virtual
>addresses on a specified address space (VM). Multiple mappings can map
>to the same physical pages of an object (aliasing). These mappings (also
>referred to as persistent mappings) will be persistent across multiple
>GPU submissions (execbuf calls) issued by the UMD, without user having
>to provide a list of all required mappings during each submission (as
>required by older execbuf mode).
>
>This patch series support VM_BIND version 1, as described by the param
>I915_PARAM_VM_BIND_VERSION.
>
>Add new execbuf3 ioctl (I915_GEM_EXECBUFFER3) which only works in
>vm_bind mode. The vm_bind mode only works with this new execbuf3 ioctl.
>The new execbuf3 ioctl will not have any execlist support and all the
>legacy support like relocations etc., are removed.
>
>NOTEs:
>* It is based on below VM_BIND design+uapi rfc.
>  Documentation/gpu/rfc/i915_vm_bind.rst
>
>* The IGT RFC series is posted as,
>  [PATCH i-g-t v10 0/19] vm_bind: Add VM_BIND validation support
>
>v2: Address various review comments
>v3: Address review comments and other fixes
>v4: Remove vm_unbind out fence uapi which is not supported yet,
>    replace vm->vm_bind_mode check with i915_gem_vm_is_vm_bind_mode()
>v5: Render kernel-doc, use PIN_NOEVICT, limit vm_bind support to
>    non-recoverable faults
>v6: Rebased, minor fixes, add reserved fields to drm_i915_gem_vm_bind,
>    add new patch for async vm_unbind support
>v7: Rebased, minor cleanups as per review feedback
>v8: Rebased, add capture support
>v9: Address capture support feedback from v8
>v10: Properly handle vma->resource for mappings with capture request
>
>Test-with: 20230118071350.17498-1-niranjana.vishwanathapura at intel.com
>
>Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura at intel.com>
>

Hi,

It has become clear that we have a long way towards fully featured implementation of VM_BIND in i915.
Examples of the many challenges include integration with display, integration with userspace drivers,
a rewrite of all the i915 IGTs to support execbuf3, alignment with DRM GPU VA manager[1] etc.

We are stopping further VM_BIND upstreaming efforts in i915 so we can accelerate the merge plan
for the new drm/xe driver[2] which has been designed for VM_BIND from the beginning.

Since we are not proceeding further with this i915 VM_BIND patch series, the MTL support needed for
setting the MOCS and PAT settings in an immutable way at buffer creation time has been posted in a
separate series[3] under review.

Thanks for all your feedback on this series which is much appreciated.

Regards,
Niranjana

[1] https://www.spinics.net/lists/nouveau/msg11069.html  
[2] https://www.spinics.net/lists/dri-devel/msg390882.html 
[3] https://patchwork.freedesktop.org/series/115980/

>Niranjana Vishwanathapura (23):
>  drm/i915/vm_bind: Expose vm lookup function
>  drm/i915/vm_bind: Add __i915_sw_fence_await_reservation()
>  drm/i915/vm_bind: Expose i915_gem_object_max_page_size()
>  drm/i915/vm_bind: Support partially mapped vma resource
>  drm/i915/vm_bind: Add support to create persistent vma
>  drm/i915/vm_bind: Implement bind and unbind of object
>  drm/i915/vm_bind: Support for VM private BOs
>  drm/i915/vm_bind: Add support to handle object evictions
>  drm/i915/vm_bind: Support persistent vma activeness tracking
>  drm/i915/vm_bind: Add out fence support
>  drm/i915/vm_bind: Abstract out common execbuf functions
>  drm/i915/vm_bind: Use common execbuf functions in execbuf path
>  drm/i915/vm_bind: Implement I915_GEM_EXECBUFFER3 ioctl
>  drm/i915/vm_bind: Update i915_vma_verify_bind_complete()
>  drm/i915/vm_bind: Expose i915_request_await_bind()
>  drm/i915/vm_bind: Handle persistent vmas in execbuf3
>  drm/i915/vm_bind: userptr dma-resv changes
>  drm/i915/vm_bind: Limit vm_bind mode to non-recoverable contexts
>  drm/i915/vm_bind: Add uapi for user to enable vm_bind_mode
>  drm/i915/vm_bind: Render VM_BIND documentation
>  drm/i915/vm_bind: Async vm_unbind support
>  drm/i915/vm_bind: Properly build persistent map sg table
>  drm/i915/vm_bind: Support capture of persistent mappings
>
> Documentation/gpu/i915.rst                    |  78 +-
> drivers/gpu/drm/i915/Makefile                 |   3 +
> drivers/gpu/drm/i915/gem/i915_gem_context.c   |  43 +-
> drivers/gpu/drm/i915/gem/i915_gem_context.h   |  17 +
> drivers/gpu/drm/i915/gem/i915_gem_create.c    |  72 +-
> drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c    |   6 +
> .../gpu/drm/i915/gem/i915_gem_execbuffer.c    | 522 +----------
> .../gpu/drm/i915/gem/i915_gem_execbuffer3.c   | 872 ++++++++++++++++++
> .../drm/i915/gem/i915_gem_execbuffer_common.c | 671 ++++++++++++++
> .../drm/i915/gem/i915_gem_execbuffer_common.h |  76 ++
> drivers/gpu/drm/i915/gem/i915_gem_ioctls.h    |   2 +
> drivers/gpu/drm/i915/gem/i915_gem_object.c    |   3 +
> drivers/gpu/drm/i915/gem/i915_gem_object.h    |   2 +
> .../gpu/drm/i915/gem/i915_gem_object_types.h  |   6 +
> drivers/gpu/drm/i915/gem/i915_gem_userptr.c   |  19 +
> drivers/gpu/drm/i915/gem/i915_gem_vm_bind.h   |  30 +
> .../drm/i915/gem/i915_gem_vm_bind_object.c    | 463 ++++++++++
> drivers/gpu/drm/i915/gt/intel_gtt.c           |  22 +
> drivers/gpu/drm/i915/gt/intel_gtt.h           |  28 +
> drivers/gpu/drm/i915/i915_driver.c            |   4 +
> drivers/gpu/drm/i915/i915_drv.h               |   2 +
> drivers/gpu/drm/i915/i915_gem.c               |  14 +-
> drivers/gpu/drm/i915/i915_gem_gtt.c           |  39 +
> drivers/gpu/drm/i915/i915_gem_gtt.h           |   3 +
> drivers/gpu/drm/i915/i915_getparam.c          |   3 +
> drivers/gpu/drm/i915/i915_gpu_error.c         |  52 +-
> drivers/gpu/drm/i915/i915_sw_fence.c          |  28 +-
> drivers/gpu/drm/i915/i915_sw_fence.h          |  23 +-
> drivers/gpu/drm/i915/i915_vma.c               | 301 +++++-
> drivers/gpu/drm/i915/i915_vma.h               |  70 +-
> drivers/gpu/drm/i915/i915_vma_types.h         |  43 +
> include/uapi/drm/i915_drm.h                   | 281 +++++-
> 32 files changed, 3245 insertions(+), 553 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_execbuffer3.c
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_execbuffer_common.c
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_execbuffer_common.h
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_vm_bind.h
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c
>
>-- 
>2.21.0.rc0.32.g243a4c7e27
>


More information about the dri-devel mailing list