mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-08 16:36:14 +00:00
tools/aubdump: Add --device option for overriding device ID
This lets us capture AUB traces for platforms different from the one we're running on. Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
This commit is contained in:
parent
f47bdba8b0
commit
220c7d1f91
@ -25,7 +25,12 @@ Write the trace output to the file
|
|||||||
.IR FILE .
|
.IR FILE .
|
||||||
Default is
|
Default is
|
||||||
.IR COMMAND .aub.
|
.IR COMMAND .aub.
|
||||||
|
.TP
|
||||||
|
.BI \-\^\-device= ID
|
||||||
|
Override the PCI ID of the drm device. This is useful for getting an
|
||||||
|
aub dump for a different generation of GPU. In this mode intel_aubdump
|
||||||
|
will intercept but not forward the execbuffer2 ioctl, as that would
|
||||||
|
typically cause a GPU hang.
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
.TP
|
.TP
|
||||||
intel_aubdump -v --output=stuff.aub -- glxgears -geometry 500x500
|
intel_aubdump -v --output=stuff.aub -- glxgears -geometry 500x500
|
||||||
|
@ -52,6 +52,8 @@ static FILE *file;
|
|||||||
static int gen = 0;
|
static int gen = 0;
|
||||||
static int verbose = 0;
|
static int verbose = 0;
|
||||||
static const uint32_t gtt_size = 0x10000;
|
static const uint32_t gtt_size = 0x10000;
|
||||||
|
static bool device_override;
|
||||||
|
static uint32_t device;
|
||||||
|
|
||||||
#define MAX_BO_COUNT 64 * 1024
|
#define MAX_BO_COUNT 64 * 1024
|
||||||
|
|
||||||
@ -315,15 +317,17 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)
|
|||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
/* We can't do this at open time as we're not yet authenticated. */
|
/* We can't do this at open time as we're not yet authenticated. */
|
||||||
|
if (device == 0) {
|
||||||
|
device = gem_get_param(fd, I915_PARAM_CHIPSET_ID);
|
||||||
|
fail_if(device == 0 || gen == -1, "failed to identify chipset\n");
|
||||||
|
}
|
||||||
if (gen == 0) {
|
if (gen == 0) {
|
||||||
uint32_t chipset_id = gem_get_param(fd, I915_PARAM_CHIPSET_ID);
|
gen = intel_gen(device);
|
||||||
gen = intel_gen(chipset_id);
|
|
||||||
|
|
||||||
fail_if(chipset_id == 0 || gen == -1, "failed to identify chipset\n");
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf("[intel_aubdump active: "
|
printf("[intel_aubdump active: "
|
||||||
"output file %s, chipset id 0x%04x, gen %d]\n",
|
"output file %s, chipset id 0x%04x, gen %d]\n",
|
||||||
filename, chipset_id, gen);
|
filename, device, gen);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < execbuffer2->buffer_count; i++) {
|
for (uint32_t i = 0; i < execbuffer2->buffer_count; i++) {
|
||||||
@ -430,6 +434,16 @@ ioctl(int fd, unsigned long request, ...)
|
|||||||
|
|
||||||
if (fd == drm_fd) {
|
if (fd == drm_fd) {
|
||||||
switch (request) {
|
switch (request) {
|
||||||
|
case DRM_IOCTL_I915_GETPARAM: {
|
||||||
|
struct drm_i915_getparam *getparam = argp;
|
||||||
|
|
||||||
|
if (device_override && getparam->param == I915_PARAM_CHIPSET_ID) {
|
||||||
|
*getparam->value = device;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return libc_ioctl(fd, request, argp);
|
||||||
|
}
|
||||||
|
|
||||||
case DRM_IOCTL_I915_GEM_EXECBUFFER: {
|
case DRM_IOCTL_I915_GEM_EXECBUFFER: {
|
||||||
static bool once;
|
static bool once;
|
||||||
if (!once) {
|
if (!once) {
|
||||||
@ -442,6 +456,9 @@ ioctl(int fd, unsigned long request, ...)
|
|||||||
|
|
||||||
case DRM_IOCTL_I915_GEM_EXECBUFFER2: {
|
case DRM_IOCTL_I915_GEM_EXECBUFFER2: {
|
||||||
dump_execbuffer2(fd, argp);
|
dump_execbuffer2(fd, argp);
|
||||||
|
if (device_override)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return libc_ioctl(fd, request, argp);
|
return libc_ioctl(fd, request, argp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,10 +534,14 @@ init(void)
|
|||||||
fail_if(libc_open == NULL || libc_close == NULL || libc_ioctl == NULL,
|
fail_if(libc_open == NULL || libc_close == NULL || libc_ioctl == NULL,
|
||||||
"intel_aubdump: failed to get libc open or ioctl\n");
|
"intel_aubdump: failed to get libc open or ioctl\n");
|
||||||
|
|
||||||
if (sscanf(args, "verbose=%d;file=%m[^;]", &verbose, &filename) != 2)
|
if (sscanf(args, "verbose=%d;file=%m[^;];device=%i",
|
||||||
|
&verbose, &filename, &device) != 3)
|
||||||
filename = strdup("intel.aub");
|
filename = strdup("intel.aub");
|
||||||
fail_if(filename == NULL, "intel_aubdump: out of memory\n");
|
fail_if(filename == NULL, "intel_aubdump: out of memory\n");
|
||||||
|
|
||||||
|
if (device)
|
||||||
|
device_override = true;
|
||||||
|
|
||||||
bos = malloc(MAX_BO_COUNT * sizeof(bos[0]));
|
bos = malloc(MAX_BO_COUNT * sizeof(bos[0]));
|
||||||
fail_if(bos == NULL, "intel_aubdump: out of memory\n");
|
fail_if(bos == NULL, "intel_aubdump: out of memory\n");
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@ contents and execution of the GEM application.
|
|||||||
|
|
||||||
-o, --output=FILE Name of AUB file. Defaults to COMMAND.aub
|
-o, --output=FILE Name of AUB file. Defaults to COMMAND.aub
|
||||||
|
|
||||||
|
--device=ID Override PCI ID of the reported device
|
||||||
|
|
||||||
-v Enable verbose output
|
-v Enable verbose output
|
||||||
|
|
||||||
--help Display this help message and exit
|
--help Display this help message and exit
|
||||||
@ -20,6 +22,7 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
verbose=0
|
verbose=0
|
||||||
|
device=0
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@ -39,6 +42,10 @@ while true; do
|
|||||||
file=${1##--output=}
|
file=${1##--output=}
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--device=*)
|
||||||
|
device=${1##--device=}
|
||||||
|
shift
|
||||||
|
;;
|
||||||
--help)
|
--help)
|
||||||
show_help
|
show_help
|
||||||
;;
|
;;
|
||||||
@ -66,5 +73,5 @@ exec_prefix=@exec_prefix@
|
|||||||
libdir=@libdir@
|
libdir=@libdir@
|
||||||
|
|
||||||
LD_PRELOAD=${libdir}/intel_aubdump.so${LD_PPRELOAD:+:${LD_PRELOAD}} \
|
LD_PRELOAD=${libdir}/intel_aubdump.so${LD_PPRELOAD:+:${LD_PRELOAD}} \
|
||||||
INTEL_AUBDUMP_ARGS="verbose=$verbose;file=$file" \
|
INTEL_AUBDUMP_ARGS="verbose=$verbose;file=$file;device=$device" \
|
||||||
exec -- "$@"
|
exec -- "$@"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user