diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index baf3612..cbaafea 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -1,3 +1,3 @@
 
 dist_noinst_SCRIPTS = who.sh
-noinst_PYTHON = throttle.py
+noinst_PYTHON = throttle.py dmesg_filter
diff --git a/scripts/dmesg_filter b/scripts/dmesg_filter
new file mode 100755
index 0000000..782a942
--- /dev/null
+++ b/scripts/dmesg_filter
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+import fileinput
+import re
+import sys
+
+DRM_COMMAND_BASE = 0x40
+DRM_COMMAND_END  = 0xA0
+
+drm_ioctls = (
+    ('DRM_IOCTL_VERSION', 0x00),
+    ('DRM_IOCTL_GET_UNIQUE', 0x01),
+    ('DRM_IOCTL_GET_MAGIC', 0x02),
+    ('DRM_IOCTL_IRQ_BUSID', 0x03),
+    ('DRM_IOCTL_GET_MAP', 0x04),
+    ('DRM_IOCTL_GET_CLIENT', 0x05),
+    ('DRM_IOCTL_GET_STATS', 0x06),
+    ('DRM_IOCTL_SET_VERSION', 0x07),
+    ('DRM_IOCTL_MODESET_CTL', 0x08),
+    ('DRM_IOCTL_GEM_CLOSE', 0x09),
+    ('DRM_IOCTL_GEM_FLINK', 0x0a),
+    ('DRM_IOCTL_GEM_OPEN', 0x0b),
+    ('DRM_IOCTL_GET_CAP', 0x0c),
+
+    ('DRM_IOCTL_SET_UNIQUE', 0x10),
+    ('DRM_IOCTL_AUTH_MAGIC', 0x11),
+    ('DRM_IOCTL_BLOCK', 0x12),
+    ('DRM_IOCTL_UNBLOCK', 0x13),
+    ('DRM_IOCTL_CONTROL', 0x14),
+    ('DRM_IOCTL_ADD_MAP', 0x15),
+    ('DRM_IOCTL_ADD_BUFS', 0x16),
+    ('DRM_IOCTL_MARK_BUFS', 0x17),
+    ('DRM_IOCTL_INFO_BUFS', 0x18),
+    ('DRM_IOCTL_MAP_BUFS', 0x19),
+    ('DRM_IOCTL_FREE_BUFS', 0x1a),
+
+    ('DRM_IOCTL_RM_MAP', 0x1b),
+
+    ('DRM_IOCTL_SET_SAREA_CTX', 0x1c),
+    ('DRM_IOCTL_GET_SAREA_CTX', 0x1d),
+
+    ('DRM_IOCTL_SET_MASTER', 0x1e),
+    ('DRM_IOCTL_DROP_MASTER', 0x1f),
+
+    ('DRM_IOCTL_ADD_CTX', 0x20),
+    ('DRM_IOCTL_RM_CTX', 0x21),
+    ('DRM_IOCTL_MOD_CTX', 0x22),
+    ('DRM_IOCTL_GET_CTX', 0x23),
+    ('DRM_IOCTL_SWITCH_CTX', 0x24),
+    ('DRM_IOCTL_NEW_CTX', 0x25),
+    ('DRM_IOCTL_RES_CTX', 0x26),
+    ('DRM_IOCTL_ADD_DRAW', 0x27),
+    ('DRM_IOCTL_RM_DRAW', 0x28),
+    ('DRM_IOCTL_DMA', 0x29),
+    ('DRM_IOCTL_LOCK', 0x2a),
+    ('DRM_IOCTL_UNLOCK', 0x2b),
+    ('DRM_IOCTL_FINISH', 0x2c),
+
+    ('DRM_IOCTL_PRIME_HANDLE_TO_FD', 0x2d),
+    ('DRM_IOCTL_PRIME_FD_TO_HANDLE', 0x2e),
+
+    ('DRM_IOCTL_AGP_ACQUIRE', 0x30),
+    ('DRM_IOCTL_AGP_RELEASE', 0x31),
+    ('DRM_IOCTL_AGP_ENABLE',  0x32),
+    ('DRM_IOCTL_AGP_INFO', 0x33),
+    ('DRM_IOCTL_AGP_ALLOC',0x34),
+    ('DRM_IOCTL_AGP_FREE', 0x35),
+    ('DRM_IOCTL_AGP_BIND', 0x36),
+    ('DRM_IOCTL_AGP_UNBIND', 0x37),
+
+    ('DRM_IOCTL_SG_ALLOC', 0x38),
+    ('DRM_IOCTL_SG_FREE', 0x39),
+
+    ('DRM_IOCTL_WAIT_VBLANK', 0x3a),
+
+    ('DRM_IOCTL_UPDATE_DRAW', 0x3f),
+
+    ('DRM_IOCTL_MODE_GETRESOURCES', 0xA0),
+    ('DRM_IOCTL_MODE_GETCRTC', 0xA1),
+    ('DRM_IOCTL_MODE_SETCRTC', 0xA2),
+    ('DRM_IOCTL_MODE_CURSOR', 0xA3),
+    ('DRM_IOCTL_MODE_GETGAMMA', 0xA4),
+    ('DRM_IOCTL_MODE_SETGAMMA', 0xA5),
+    ('DRM_IOCTL_MODE_GETENCODER', 0xA6),
+    ('DRM_IOCTL_MODE_GETCONNECTOR', 0xA7),
+    ('DRM_IOCTL_MODE_ATTACHMODE', 0xA8),
+    ('DRM_IOCTL_MODE_DETACHMODE', 0xA9),
+
+    ('DRM_IOCTL_MODE_GETPROPERTY', 0xAA),
+    ('DRM_IOCTL_MODE_SETPROPERTY', 0xAB),
+    ('DRM_IOCTL_MODE_GETPROPBLOB', 0xAC),
+    ('DRM_IOCTL_MODE_GETFB', 0xAD),
+    ('DRM_IOCTL_MODE_ADDFB', 0xAE),
+    ('DRM_IOCTL_MODE_RMFB', 0xAF),
+    ('DRM_IOCTL_MODE_PAGE_FLIP', 0xB0),
+    ('DRM_IOCTL_MODE_DIRTYFB', 0xB1),
+
+    ('DRM_IOCTL_MODE_CREATE_DUMB', 0xB2),
+    ('DRM_IOCTL_MODE_MAP_DUMB', 0xB3),
+    ('DRM_IOCTL_MODE_DESTROY_DUMB', 0xB4),
+    ('DRM_IOCTL_MODE_GETPLANERESOURCES', 0xB5),
+    ('DRM_IOCTL_MODE_GETPLANE', 0xB6),
+    ('DRM_IOCTL_MODE_SETPLANE', 0xB7),
+    ('DRM_IOCTL_MODE_ADDFB2', 0xB8),
+    ('DRM_IOCTL_MODE_OBJ_GETPROPERTIES', 0xB9),
+    ('DRM_IOCTL_MODE_OBJ_SETPROPERTY', 0xBA),
+)
+
+intel_ioctls = (
+    ('DRM_I915_INIT', 0x00),
+    ('DRM_I915_FLUSH', 0x01),
+    ('DRM_I915_FLIP', 0x02),
+    ('DRM_I915_BATCHBUFFER', 0x03),
+    ('DRM_I915_IRQ_EMIT', 0x04),
+    ('DRM_I915_IRQ_WAIT', 0x05),
+    ('DRM_I915_GETPARAM', 0x06),
+    ('DRM_I915_SETPARAM', 0x07),
+    ('DRM_I915_ALLOC', 0x08),
+    ('DRM_I915_FREE', 0x09),
+    ('DRM_I915_INIT_HEAP', 0x0a),
+    ('DRM_I915_CMDBUFFER', 0x0b),
+    ('DRM_I915_DESTROY_HEAP', 0x0c),
+    ('DRM_I915_SET_VBLANK_PIPE', 0x0d),
+    ('DRM_I915_GET_VBLANK_PIPE', 0x0e),
+    ('DRM_I915_VBLANK_SWAP', 0x0f),
+    ('DRM_I915_HWS_ADDR', 0x11),
+    ('DRM_I915_GEM_INIT', 0x13),
+    ('DRM_I915_GEM_EXECBUFFER', 0x14),
+    ('DRM_I915_GEM_PIN', 0x15),
+    ('DRM_I915_GEM_UNPIN', 0x16),
+    ('DRM_I915_GEM_BUSY', 0x17),
+    ('DRM_I915_GEM_THROTTLE', 0x18),
+    ('DRM_I915_GEM_ENTERVT', 0x19),
+    ('DRM_I915_GEM_LEAVEVT', 0x1a),
+    ('DRM_I915_GEM_CREATE', 0x1b),
+    ('DRM_I915_GEM_PREAD', 0x1c),
+    ('DRM_I915_GEM_PWRITE', 0x1d),
+    ('DRM_I915_GEM_MMAP', 0x1e),
+    ('DRM_I915_GEM_SET_DOMAIN', 0x1f),
+    ('DRM_I915_GEM_SW_FINISH', 0x20),
+    ('DRM_I915_GEM_SET_TILING', 0x21),
+    ('DRM_I915_GEM_GET_TILING', 0x22),
+    ('DRM_I915_GEM_GET_APERTURE', 0x23),
+    ('DRM_I915_GEM_MMAP_GTT', 0x24),
+    ('DRM_I915_GET_PIPE_FROM_CRTC_ID', 0x25),
+    ('DRM_I915_GEM_MADVISE', 0x26),
+    ('DRM_I915_OVERLAY_PUT_IMAGE', 0x27),
+    ('DRM_I915_OVERLAY_ATTRS', 0x28),
+    ('DRM_I915_GEM_EXECBUFFER2', 0x29),
+    ('DRM_I915_GET_SPRITE_COLORKEY', 0x2a),
+    ('DRM_I915_SET_SPRITE_COLORKEY', 0x2b),
+    ('DRM_I915_GEM_WAIT', 0x2c),
+    ('DRM_I915_GEM_CONTEXT_CREATE', 0x2d),
+    ('DRM_I915_GEM_CONTEXT_DESTROY', 0x2e),
+    ('DRM_I915_GEM_SET_CACHEING', 0x2f),
+    ('DRM_I915_GEM_GET_CACHEING', 0x30),
+    ('DRM_I915_REG_READ', 0x31),
+)
+
+ioctl_hash = {}
+for ioctl in drm_ioctls:
+    ioctl_hash["0x%02x" % ioctl[1]] = ioctl[0]
+for ioctl in intel_ioctls:
+    ioctl_hash["0x%02x" % (DRM_COMMAND_BASE + ioctl[1])] = ioctl[0]
+
+def find_ioctl(nr):
+    if nr in ioctl_hash:
+        return ioctl_hash[nr]
+    else:
+        return "Unknown ioctl 0x%02x" % str(nr)
+
+ioctl_pattern = re.compile(r"""
+    \[(?P<timesamp>[ \d\.]+)\]\ ?
+    \[drm:drm_ioctl\],
+    \ pid=(?P<pid>[\d]+),
+    \ cmd=(?P<cmd>[\dxa-fA-F]+),
+    \ nr=(?P<nr>[\dxa-fA-F]+),
+    \ dev\ (?P<dev>[\dxa-fA-F]+),
+    \ auth=(?P<auth>[\d]+)
+""", re.X)
+
+for line in fileinput.input():
+    m = ioctl_pattern.match(line)
+    if m:
+        ts = m.group('timesamp')
+        nr = m.group('nr')
+	pid = m.group('pid')
+	dev = m.group('dev')
+	if ts:
+            print("[%s] [drm:drm_ioctl], [pid=%s], [dev=%s], %s" %
+              (ts, pid, dev, find_ioctl(nr)))
+        else:
+            print("[drm:drm_ioctl], [pid=%s], [dev=%s], %s" %
+              (pid, dev, find_ioctl(nr)))
+    else:
+        sys.stdout.write(line)
