diff --git a/libdrm/intel/intel_bufmgr_gem.c b/libdrm/intel/intel_bufmgr_gem.c
index 9e49d7c..9d43382 100644
--- a/libdrm/intel/intel_bufmgr_gem.c
+++ b/libdrm/intel/intel_bufmgr_gem.c
@@ -38,6 +38,7 @@
 #include "config.h"
 #endif
 
+#include <valgrind/valgrind.h>
 #include <xf86drm.h>
 #include <fcntl.h>
 #include <stdio.h>
@@ -421,7 +422,7 @@ drm_intel_gem_bo_alloc_internal(drm_intel_bufmgr *bufmgr, const char *name,
 
     DBG("bo_create: buf %d (%s) %ldb\n",
 	bo_gem->gem_handle, bo_gem->name, size);
-
+    VALGRIND_MALLOCLIKE_BLOCK( bo_gem->gem_handle, 0, 0, 0 );
     return &bo_gem->bo;
 }
 
@@ -548,6 +549,7 @@ drm_intel_gem_bo_unreference_locked(drm_intel_bo *bo)
     if (--bo_gem->refcount == 0) {
 	struct drm_intel_gem_bo_bucket *bucket;
 	uint32_t tiling_mode;
+	VALGRIND_FREELIKE_BLOCK( bo_gem->gem_handle, 0 );
 
 	if (bo_gem->relocs != NULL) {
 	    int i;
@@ -631,6 +633,7 @@ drm_intel_gem_bo_map(drm_intel_bo *bo, int write_enable)
     }
     DBG("bo_map: %d (%s) -> %p\n", bo_gem->gem_handle, bo_gem->name,
 	bo_gem->virtual);
+    VALGRIND_MALLOCLIKE_BLOCK( bo_gem->virtual, bo->size, 0, /*is_zeroed*/0 );
     bo->virtual = bo_gem->virtual;
 
     if (bo_gem->global_name != 0 || !bo_gem->swrast) {
@@ -751,6 +754,7 @@ drm_intel_gem_bo_unmap(drm_intel_bo *bo)
 	bo_gem->swrast = 0;
     }
     pthread_mutex_unlock(&bufmgr_gem->lock);
+    VALGRIND_FREELIKE_BLOCK( bo_gem->virtual, bo->size );
     return 0;
 }
 
