On Wed, 6 May 2015 16:48:01 +0200 Patrik Jakobsson <patrik.jakobsson@xxxxxxxxxxxxxxx> wrote: > This patch set aims to make strace more useful when tracing i915 ioctls. > The ioctl type is first checked for being drm and then the driver > backing the opened device is identified by looking at sysfs. Other > drivers than i915 can easily be added. > > Only a subset of the i915 ioctls are included. I will extend this patch > set if the approach looks ok. The generic drm ioctls are also missing. > > Give it a spin with: > strace -e trace=ioctl -p `pidof X` > > Patrik Jakobsson (2): > strace/drm: Print extended info for drm and i915 ioctls > strace/drm: Print args for most common i915 ioctls > > Makefile.am | 2 + > defs.h | 2 + > drm.c | 104 +++++++++++++++++ > drm_i915.c | 278 +++++++++++++++++++++++++++++++++++++++++++++ > ioctl.c | 5 + > xlat/drm_i915_getparams.in | 28 +++++ > xlat/drm_i915_ioctls.in | 51 +++++++++ > xlat/drm_i915_setparams.in | 4 + > 8 files changed, 474 insertions(+) > create mode 100644 drm.c > create mode 100644 drm_i915.c > create mode 100644 xlat/drm_i915_getparams.in > create mode 100644 xlat/drm_i915_ioctls.in > create mode 100644 xlat/drm_i915_setparams.in > This is a great start! We need this kind of decoding. Do you plan to add also the generic drm ioctl decoding? Some issues though: * The way you avoid the ioctl request decoding is quite hard to follow, but it seems that you don't have much of a choice, except that in drm_ioctl(), the code from SYS_FUNC(ioctl) is duplicated. It seems it needs some work here, to allow a simpler code path. Maybe this would be clearer if the decoding/drm_get_driver_name, etc… was in ioctl_decode_command_number(). Also, with the actual code, if you are on i915 with an invalid ioctl number, it will be printed as "I915_IOCTL_???" and not "_IOC(...)" (see below for an example.) This will also add an inconsistent result depending whether /sys is mounted or not. * This does not compile on my system (archlinux), because drm.h lives in libdrm/drm.h and not in drm/drm.h, I know it is an rfc, but this needs to use pkg-config in order to know where libdrm headers are. #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h> #include <drm.h> #include <i915_drm.h> int main() { int fd = open("/dev/dri/card0", O_RDWR); ioctl(fd, DRM_IOW(DRM_COMMAND_BASE + DRM_I915_FLUSH, int), 0); return 0; } $ CFLAGS=-I/usr/include/libdrm make i915-ioctls cc -I/usr/include/libdrm i915-ioctls.c -o i915-ioctls $ sudo strace -e ioctl ./i915-ioctls ioctl(3, _IOC(_IOC_WRITE, 0x64, 0x41, 0x04), 0) = 0 +++ exited with 0 +++ $ sudo ~/source/strace/strace -e ioctl ./i915-ioctls ioctl(3, 0x40046441 /* I915_IOCTL_??? */, 0) = 0 +++ exited with 0 +++ -- Gabriel Laskar _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx