[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