diff --git a/src/intel/tools/intel_hang_replay.c b/src/intel/tools/intel_hang_replay.c index 80632813cdb..1c7dafd2352 100644 --- a/src/intel/tools/intel_hang_replay.c +++ b/src/intel/tools/intel_hang_replay.c @@ -405,7 +405,7 @@ replay_dmp_file(int file_fd, int drm_fd, const struct intel_device_info *devinfo struct util_dynarray *buffers, void *mem_ctx, struct intel_hang_dump_block_exec *init, struct intel_hang_dump_block_exec *exec, - uint32_t vm_flags, uint32_t bo_dumpable) + uint32_t vm_flags, uint32_t bo_dumpable, bool scratch) { /* Sort buffers by size */ qsort(util_dynarray_begin(buffers), @@ -417,7 +417,7 @@ replay_dmp_file(int file_fd, int drm_fd, const struct intel_device_info *devinfo return process_i915_dmp_file(file_fd, drm_fd, buffers, mem_ctx, init, exec); else if (devinfo->kmd_type == INTEL_KMD_TYPE_XE) return process_xe_dmp_file(file_fd, drm_fd, devinfo, buffers, mem_ctx, init, exec, - vm_flags, bo_dumpable); + vm_flags, bo_dumpable, scratch); else fprintf(stderr, "driver is unknown, exiting\n"); @@ -427,7 +427,7 @@ replay_dmp_file(int file_fd, int drm_fd, const struct intel_device_info *devinfo int main(int argc, char *argv[]) { - bool help = false, list = false, bo_dumpable = false; + bool help = false, list = false, bo_dumpable = false, scratch = false; const struct option aubinator_opts[] = { { "address", required_argument, NULL, 'a' }, { "dump", required_argument, NULL, 'd' }, @@ -435,6 +435,7 @@ main(int argc, char *argv[]) { "list", no_argument, NULL, 'l' }, { "dumpable", no_argument, 0, 'D'}, { "help", no_argument, NULL, 'h' }, + { "scratch", no_argument, NULL, 'S' }, { NULL, 0, NULL, 0 }, }; @@ -448,7 +449,7 @@ main(int argc, char *argv[]) uint64_t check_addr = -1; uint32_t vm_flags = -1; int c, i; - while ((c = getopt_long(argc, argv, "a:d:hlDs:", aubinator_opts, &i)) != -1) { + while ((c = getopt_long(argc, argv, "a:d:hlDSs:", aubinator_opts, &i)) != -1) { switch (c) { case 'a': check_addr = strtol(optarg, NULL, 0); @@ -471,6 +472,9 @@ main(int argc, char *argv[]) case 'D': bo_dumpable = true; break; + case 'S': + scratch = true; + break; default: break; } @@ -661,7 +665,7 @@ main(int argc, char *argv[]) } if (!list && util_dynarray_num_elements(&shader_addresses, uint64_t) == 0) - replay_dmp_file(file_fd, drm_fd, &devinfo, &buffers, mem_ctx, &init, &exec, vm_flags, bo_dumpable); + replay_dmp_file(file_fd, drm_fd, &devinfo, &buffers, mem_ctx, &init, &exec, vm_flags, bo_dumpable, scratch); close(drm_fd); close(file_fd); diff --git a/src/intel/tools/intel_hang_replay_xe.c b/src/intel/tools/intel_hang_replay_xe.c index c691a750335..4968f0f85dc 100644 --- a/src/intel/tools/intel_hang_replay_xe.c +++ b/src/intel/tools/intel_hang_replay_xe.c @@ -125,12 +125,6 @@ xe_vm_create(int drm_fd, uint32_t flags) .flags = flags, }; - /* Mesa enforces the flag but it may go away at some point */ - if (flags != (flags | DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE)) { - create.flags = flags | DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE; - fprintf(stderr, "DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE flag is now being set.\n"); - } - if (flags & DRM_XE_VM_CREATE_FLAG_LR_MODE) { fprintf(stderr, "Long running VM is not supported, aborting.\n"); exit(EXIT_FAILURE); @@ -283,7 +277,7 @@ process_xe_dmp_file(int file_fd, int drm_fd, const struct intel_device_info *dev struct util_dynarray *buffers, void *mem_ctx, struct intel_hang_dump_block_exec *init, struct intel_hang_dump_block_exec *block_exec, - uint32_t vm_flags, uint32_t bo_dumpable) + uint32_t vm_flags, uint32_t bo_dumpable, bool scratch) { void *hw_img = NULL; uint32_t hw_img_size = 0; @@ -300,6 +294,11 @@ process_xe_dmp_file(int file_fd, int drm_fd, const struct intel_device_info *dev }; const uint32_t dumpable_bit = bo_dumpable ? DRM_XE_VM_BIND_FLAG_DUMPABLE : 0; + if (scratch && vm_flags != (vm_flags | DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE)) { + vm_flags |= DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE; + fprintf(stderr, "DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE flag is now being set.\n"); + } + uint32_t vm = xe_vm_create(drm_fd, vm_flags); /* Allocate BOs populate them */ diff --git a/src/intel/tools/intel_hang_replay_xe.h b/src/intel/tools/intel_hang_replay_xe.h index 9846881311d..fa3da333af7 100644 --- a/src/intel/tools/intel_hang_replay_xe.h +++ b/src/intel/tools/intel_hang_replay_xe.h @@ -16,4 +16,4 @@ bool process_xe_dmp_file(int file_fd, int drm_fd, const struct intel_device_info struct util_dynarray *buffers, void *mem_ctx, struct intel_hang_dump_block_exec *init, struct intel_hang_dump_block_exec *exec, - uint32_t vm_uapi_flags, uint32_t bo_dumpable); + uint32_t vm_uapi_flags, uint32_t bo_dumpable, bool scratch);