[Intel-gfx] [PATCH 1/2]i-g-t: check kernel enable rings or not

Ben Widawsky ben at bwidawsk.net
Sat May 4 02:40:25 CEST 2013


On Fri, May 03, 2013 at 03:54:48PM +0800, Zhong Li wrote:
> Signed-off-by: Zhong Li <zhong.li at intel.com>
> 
> 1. add functions check kernel enable a ring or not.
> 2. add function gem_get_num_rings() to check how many rings kernel has enable.
> 3. gem_ring_sync_loop.c will call gem_get_num_rings() directly instead of original static fucntion get_number_rings().

Please wrap commit messages, and place the Signed-off-by at the bottom.

> ---
>  lib/drmtest.c              |   61 ++++++++++++++++++++++++++++++++++++++------
>  lib/drmtest.h              |    6 ++++-
>  tests/gem_ring_sync_loop.c |   38 +--------------------------
>  3 files changed, 59 insertions(+), 46 deletions(-)

> 
> diff --git a/lib/drmtest.c b/lib/drmtest.c
> index 2ddaff0..a6a988b 100644
> --- a/lib/drmtest.c
> +++ b/lib/drmtest.c
> @@ -270,19 +270,64 @@ void gem_set_tiling(int fd, uint32_t handle, int tiling, int stride)
>  	assert(st.tiling_mode == tiling);
>  }
>  
> +bool gem_has_enable_ring(int fd,int param)
> +{
> +	drm_i915_getparam_t gp;
> +	int ret, tmp;
> +	memset(&gp, 0, sizeof(gp));
> +	
> +	gp.value = &tmp;
> +	gp.param = param;
> +	
> +	ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
> +	
> +	if ((ret == 0) && (*gp.value > 0))
> +		return true;
> +	else
> +		return false;
> +}

Whitespace problems again. Again, please fix your editor, or whatever
you must do.

> +
> +bool gem_has_bsd(int fd)
> +{
> +
> +	return gem_has_enable_ring(fd,I915_PARAM_HAS_BSD);
> +}
> +
> +bool gem_has_blt(int fd)
> +{
> +
> +	return gem_has_enable_ring(fd,I915_PARAM_HAS_BLT);
> +}
> +
>  #define LOCAL_I915_PARAM_HAS_VEBOX 22
> -int gem_has_vebox(int fd)
> +bool gem_has_vebox(int fd)
>  {
> -	struct drm_i915_getparam gp;
> -	int val;
>  
> -	gp.param = LOCAL_I915_PARAM_HAS_VEBOX;
> -	gp.value = &val;
> +	return gem_has_enable_ring(fd,LOCAL_I915_PARAM_HAS_VEBOX);
> +}
> +
> +int gem_get_num_rings(int fd)
> +{
> +	int num_rings = 1;	/* render ring is always available */
> +
> +	if (gem_has_bsd(fd))
> +		num_rings++;
> +	else
> +		goto skip;
> +
> +	if (gem_has_blt(fd))
> +		num_rings++;
> +	else
> +		goto skip;
> +
> +	if (gem_has_vebox(fd))
> +		num_rings++;
> +	else
> +		goto skip;
>  
> -	if (ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp)))
> -		return 0;
>  
> -	return val != 0;
> +skip:
> +	return num_rings;
I know you just copied this from Haihao's original code... the goto is a
bit superfluous.
>  }
>  
>  struct local_drm_i915_gem_cacheing {
> diff --git a/lib/drmtest.h b/lib/drmtest.h
> index f15c074..3549c47 100644
> --- a/lib/drmtest.h
> +++ b/lib/drmtest.h
> @@ -47,8 +47,12 @@ int drm_open_any_master(void);
>  void gem_quiescent_gpu(int fd);
>  
>  /* ioctl wrappers and similar stuff for bare metal testing */
> -int gem_has_vebox(int fd);
>  void gem_set_tiling(int fd, uint32_t handle, int tiling, int stride);
> +bool gem_has_enable_ring(int fd,int param);
> +bool gem_has_bsd(int fd);
> +bool gem_has_blt(int fd);
> +bool gem_has_vebox(int fd);
> +int gem_get_num_rings(int fd);
>  int gem_has_cacheing(int fd);
>  void gem_set_cacheing(int fd, uint32_t handle, int cacheing);
>  int gem_get_cacheing(int fd, uint32_t handle);
> diff --git a/tests/gem_ring_sync_loop.c b/tests/gem_ring_sync_loop.c
> index 501e97c..af40590 100644
> --- a/tests/gem_ring_sync_loop.c
> +++ b/tests/gem_ring_sync_loop.c
> @@ -55,47 +55,11 @@ static drm_intel_bo *target_buffer;
>  #define MI_COND_BATCH_BUFFER_END	(0x36<<23 | 1)
>  #define MI_DO_COMPARE			(1<<21)
>  
> -static int
> -get_num_rings(int fd)
> -{
> -	int num_rings = 1;	/* render ring is always available */
> -	drm_i915_getparam_t gp;
> -	int ret, tmp;
> -
> -	memset(&gp, 0, sizeof(gp));
> -	gp.value = &tmp;
> -
> -	gp.param = I915_PARAM_HAS_BSD;
> -	ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
> -
> -	if ((ret == 0) && (*gp.value > 0))
> -		num_rings++;
> -	else
> -		goto skip;
> -
> -	gp.param = I915_PARAM_HAS_BLT;
> -	ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
> -
> -	if ((ret == 0) && (*gp.value > 0))
> -		num_rings++;
> -	else
> -		goto skip;
> -
> -	if (gem_has_vebox(fd))
> -		num_rings++;
> -	else
> -		goto skip;
> -
> -
> -skip:
> -	return num_rings;
> -}
> -
>  static void
>  store_dword_loop(int fd)
>  {
>  	int i;
> -	int num_rings = get_num_rings(fd);
> +	int num_rings = gem_get_num_rings(fd);
>  
>  	srandom(0xdeadbeef);
>  
> -- 
> 1.7.9.5
> 

With the whitespace fix, I've merged this patch to master.

-- 
Ben Widawsky, Intel Open Source Technology Center



More information about the Intel-gfx mailing list