From: Lionel Landwerlin Date: Wed, 2 Oct 2019 23:13:32 +0000 (+0300) Subject: intel/dump_gpu: only write BOs mapped by the driver X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=63c90acc9eba2c7252794b415ad4d5ace6956c4e;p=mesa.git intel/dump_gpu: only write BOs mapped by the driver Track what BOs are mapped by the driver and only write those. We can safely assume that when not mapped there is no data to save. v2: Don't forget to return the ret (Rafael) Signed-off-by: Lionel Landwerlin Reviewed-by: Kenneth Graunke Part-of: --- diff --git a/src/intel/tools/intel_dump_gpu.c b/src/intel/tools/intel_dump_gpu.c index 24dd1dffcaa..1b6a1fa6cb9 100644 --- a/src/intel/tools/intel_dump_gpu.c +++ b/src/intel/tools/intel_dump_gpu.c @@ -65,6 +65,7 @@ struct bo { uint32_t size; uint64_t offset; void *map; + bool mapped; }; static struct bo *bos; @@ -285,12 +286,14 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2) else data = bo->map; - if (bo == batch_bo) { - aub_write_trace_block(&aub_file, AUB_TRACE_TYPE_BATCH, - GET_PTR(data), bo->size, bo->offset); - } else { - aub_write_trace_block(&aub_file, AUB_TRACE_TYPE_NOTYPE, - GET_PTR(data), bo->size, bo->offset); + if (bo->mapped) { + if (bo == batch_bo) { + aub_write_trace_block(&aub_file, AUB_TRACE_TYPE_BATCH, + GET_PTR(data), bo->size, bo->offset); + } else { + aub_write_trace_block(&aub_file, AUB_TRACE_TYPE_NOTYPE, + GET_PTR(data), bo->size, bo->offset); + } } if (data != bo->map) @@ -331,6 +334,7 @@ add_new_bo(unsigned fd, int handle, uint64_t size, void *map) bo->size = size; bo->map = map; + bo->mapped = false; } static void @@ -342,6 +346,7 @@ remove_bo(int fd, int handle) munmap(bo->map, bo->size); bo->size = 0; bo->map = NULL; + bo->mapped = false; } __attribute__ ((visibility ("default"))) int @@ -636,6 +641,16 @@ ioctl(int fd, unsigned long request, ...) return ret; } + case DRM_IOCTL_I915_GEM_MMAP: { + ret = libc_ioctl(fd, request, argp); + if (ret == 0) { + struct drm_i915_gem_mmap *mmap = argp; + struct bo *bo = get_bo(fd, mmap->handle); + bo->mapped = true; + } + return ret; + } + default: return libc_ioctl(fd, request, argp); }