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