[Intel-gfx] Enhance our tests with graphics memory issue detection

Eric Anholt eric at anholt.net
Thu Apr 2 20:17:48 CEST 2009


On Thu, 2009-04-02 at 15:13 +0800, Shuang He wrote:
> Alexander E. Patrakov wrote: 
> > Shuang He <shuang.he at intel.com> wrote:
> >   
> > > The patch of libdrm for testing is attached. You'll need
> > > valgrind-devel installed to compile it.
> > >     
> > 
> > It may be a good idea to put this under an ifdef, and make
> > the ./configure script accept the --with-valgrind switch.
> > 
> >   
> Yeah, good idea. I have attached the updated patch for libdrm. It will
> make ./configure script accept --enable-valgrind switch. 
> It's disabled by default. 

What does the VALGRIND_MALLOCLIKE_BLOCK on the gem_handle achieve?  It's
not a malloc-like block (no virtual address space, just a kernel
refcounted object handle).

Other than that, the configure.ac detection was what I was going to ask
for, and that looks fine now.

> plain text document attachment (drm.valgrind.patch)
> diff --git a/configure.ac b/configure.ac
> index 8be1e2a..d7544fe 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -47,6 +47,10 @@ AC_ARG_ENABLE(nouveau-experimental-api,
>  	      [Enable support for nouveau's experimental API (default: disabled)]),
>  	      [NOUVEAU=$enableval], [NOUVEAU=no])
>  
> +AC_ARG_ENABLE(valgrind,     AS_HELP_STRING([--enable-valgrind],
> +                                [Build with valgrind support (default: disabled)]),
> +                                [VALGRIND=$enableval], [VALGRIND=no])
> +
>  dnl ===========================================================================
>  dnl check compiler flags
>  AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
> @@ -131,6 +135,10 @@ if test "x$HAVE_CAIRO" = xyes; then
>  fi
>  AM_CONDITIONAL(HAVE_CAIRO, [test "x$HAVE_CAIRO" = xyes])
>  
> +if test "x$VALGRIND" = xyes; then
> +        AC_DEFINE(VALGRIND, 1, [Have valgrind support])
> +fi
> +
>  
>  AC_SUBST(WARN_CFLAGS)
>  AC_OUTPUT([
> diff --git a/libdrm/intel/intel_bufmgr_gem.c b/libdrm/intel/intel_bufmgr_gem.c
> index e48778c..6f1ffb8 100644
> --- a/libdrm/intel/intel_bufmgr_gem.c
> +++ b/libdrm/intel/intel_bufmgr_gem.c
> @@ -38,6 +38,9 @@
>  #include "config.h"
>  #endif
>  
> +#ifdef VALGRIND
> +#include <valgrind/valgrind.h>
> +#endif
>  #include <xf86drm.h>
>  #include <fcntl.h>
>  #include <stdio.h>
> @@ -424,6 +427,10 @@ 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);
>  
> +#ifdef VALGRIND
> +    VALGRIND_MALLOCLIKE_BLOCK( bo_gem->gem_handle, 0, 0, 0 );
> +#endif
> +
>      return &bo_gem->bo;
>  }
>  
> @@ -553,6 +560,10 @@ drm_intel_gem_bo_unreference_locked(drm_intel_bo *bo)
>  	struct drm_intel_gem_bo_bucket *bucket;
>  	uint32_t tiling_mode;
>  
> +#ifdef VALGRIND
> +        VALGRIND_FREELIKE_BLOCK( bo_gem->gem_handle, 0 );
> +#endif
> +
>  	if (bo_gem->relocs != NULL) {
>  	    int i;
>  
> @@ -635,6 +646,10 @@ 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->mem_virtual);
> +
> +#ifdef VALGRIND
> +    VALGRIND_MALLOCLIKE_BLOCK( bo_gem->mem_virtual, bo->size, 0, /*is_zeroed*/0 );
> +#endif
>      bo->virtual = bo_gem->mem_virtual;
>  
>      if (bo_gem->global_name != 0 || !bo_gem->swrast) {
> @@ -749,6 +764,10 @@ drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo)
>      bo->virtual = NULL;
>      pthread_mutex_unlock(&bufmgr_gem->lock);
>  
> +#ifdef VALGRIND
> +    VALGRIND_FREELIKE_BLOCK( bo_gem->mem_virtual, bo->size );
> +#endif
> +
>      return ret;
>  }
>  
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
-- 
Eric Anholt
eric at anholt.net                         eric.anholt at intel.com


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20090402/90f2e568/attachment-0001.sig>


More information about the Intel-gfx mailing list