• Danilo Krummrich's avatar
    drm/nouveau: implement new VM_BIND uAPI · b88baab8
    Danilo Krummrich authored
    This commit provides the implementation for the new uapi motivated by the
    Vulkan API. It allows user mode drivers (UMDs) to:
    
    1) Initialize a GPU virtual address (VA) space via the new
       DRM_IOCTL_NOUVEAU_VM_INIT ioctl for UMDs to specify the portion of VA
       space managed by the kernel and userspace, respectively.
    
    2) Allocate and free a VA space region as well as bind and unbind memory
       to the GPUs VA space via the new DRM_IOCTL_NOUVEAU_VM_BIND ioctl.
       UMDs can request the named operations to be processed either
       synchronously or asynchronously. It supports DRM syncobjs
       (incl. timelines) as synchronization mechanism. The management of the
       GPU VA mappings is implemented with the DRM GPU VA manager.
    
    3) Execute push buffers with the new DRM_IOCTL_NOUVEAU_EXEC ioctl. The
       execution happens asynchronously. It supports DRM syncobj (incl.
       timelines) as synchronization mechanism. DRM GEM object locking is
       handled with drm_exec.
    
    Both, DRM_IOCTL_NOUVEAU_VM_BIND and DRM_IOCTL_NOUVEAU_EXEC, use the DRM
    GPU scheduler for the asynchronous paths.
    Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
    Signed-off-by: default avatarDanilo Krummrich <dakr@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230804182406.5222-12-dakr@redhat.com
    b88baab8
nouveau_abi16.c 17.6 KB