Add a new query (AMDGPU_VM_OP_QUERY_RESERVED_VMID) to the
DRM_IOCTL_AMDGPU_VM ioctl.

This is required for the checkpoint and restore to be able to correctly
restore the client VM.

Signed-off-by: Tvrtko Ursulin <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 ++++
 include/uapi/drm/amdgpu_drm.h          | 5 ++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 9ba9de16a27a..ce068e2d32d3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -2942,6 +2942,10 @@ int amdgpu_vm_ioctl(struct drm_device *dev, void *data, 
struct drm_file *filp)
        case AMDGPU_VM_OP_UNRESERVE_VMID:
                amdgpu_vmid_free_reserved(adev, vm, AMDGPU_GFXHUB(0));
                break;
+       case AMDGPU_VM_OP_QUERY_RESERVED_VMID:
+               if (vm->reserved_vmid[AMDGPU_GFXHUB(0)])
+                       args->out.flags = AMDGPU_VM_OUT_FLAG_VMID_RESERVED;
+               break;
        default:
                return -EINVAL;
        }
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 3069560ac26e..8a6f4c558102 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -587,6 +587,7 @@ struct drm_amdgpu_userq_wait {
 /* vm ioctl */
 #define AMDGPU_VM_OP_RESERVE_VMID      1
 #define AMDGPU_VM_OP_UNRESERVE_VMID    2
+#define AMDGPU_VM_OP_QUERY_RESERVED_VMID       3
 
 struct drm_amdgpu_vm_in {
        /** AMDGPU_VM_OP_* */
@@ -594,8 +595,10 @@ struct drm_amdgpu_vm_in {
        __u32   flags;
 };
 
+/* drm_amdgpu_vm_out flags */
+#define AMDGPU_VM_OUT_FLAG_VMID_RESERVED       (1ul << 63)
+
 struct drm_amdgpu_vm_out {
-       /** For future use, no flags defined so far */
        __u64   flags;
 };
 
-- 
2.54.0

Reply via email to