[Beignet] [PATCH] intel: Export pooled EU and min no. of eus in a pool.

Yang, Rong R rong.r.yang at intel.com
Fri Jul 15 05:36:23 UTC 2016


OK, I have send a new version patch.

> -----Original Message-----
> From: Chris Wilson [mailto:chris at chris-wilson.co.uk]
> Sent: Thursday, July 14, 2016 3:10
> To: Arun Siluvery <arun.siluvery at linux.intel.com>
> Cc: Yang, Rong R <rong.r.yang at intel.com>; beignet at lists.freedesktop.org;
> dri-devel at lists.freedesktop.org; Daniel Vetter <daniel at ffwll.ch>; Tvrtko
> Ursulin <tvrtko.ursulin at linux.intel.com>; martin.peres at linux.intel.com
> Subject: Re: [Beignet] [PATCH] intel: Export pooled EU and min no. of eus in a
> pool.
> 
> On Wed, Jul 13, 2016 at 11:44:09AM +0100, Arun Siluvery wrote:
> > On 06/07/2016 05:51, Yang Rong wrote:
> > >Update kernel interface with new I915_GETPARAM ioctl entries for
> > >pooled EU and min no. of eus in a pool. Add a wrapping function for
> > >each parameter. Userspace drivers need these values when decide the
> > >thread count. This kernel enabled pooled eu by default for BXT and
> > >for fused down 2x6 parts it is advised to turn it off.
> > >
> > >But there is another HW issue in these parts (fused down 2x6 parts)
> > >before C0 that requires Pooled EU to be enabled as a workaround. In
> > >this case the pool configuration changes depending upon which
> > >subslice is disabled and the no. of eus in a pool is different, So
> > >userspace need to know min no. of eus in a pool.
> > >
> > >Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> > >---
> >
> > Could you check this and give comments/ACK to merge this to libdrm?
> > Kernel changes are merged in drm-intel.
> >
> > regards
> > Arun
> >
> > >  include/drm/i915_drm.h   |  2 ++
> > >  intel/intel_bufmgr.h     |  3 +++
> > >  intel/intel_bufmgr_gem.c | 32 ++++++++++++++++++++++++++++++++
> > >  3 files changed, 37 insertions(+)
> > >
> > >diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index
> > >c4ce6b2..eb611a7 100644
> > >--- a/include/drm/i915_drm.h
> > >+++ b/include/drm/i915_drm.h
> > >@@ -357,6 +357,8 @@ typedef struct drm_i915_irq_wait {
> > >  #define I915_PARAM_HAS_GPU_RESET	 35
> > >  #define I915_PARAM_HAS_RESOURCE_STREAMER 36
> > >  #define I915_PARAM_HAS_EXEC_SOFTPIN	 37
> > >+#define I915_PARAM_HAS_POOLED_EU         38
> > >+#define I915_PARAM_MIN_EU_IN_POOL        39
> > >
> > >  typedef struct drm_i915_getparam {
> > >  	__s32 param;
> > >diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h index
> > >a1abbcd..8370694 100644
> > >--- a/intel/intel_bufmgr.h
> > >+++ b/intel/intel_bufmgr.h
> > >@@ -273,6 +273,9 @@ int drm_intel_get_reset_stats(drm_intel_context
> > >*ctx,
> > >  int drm_intel_get_subslice_total(int fd, unsigned int
> > >*subslice_total);
> > >  int drm_intel_get_eu_total(int fd, unsigned int *eu_total);
> > >
> > >+int drm_intel_get_pooled_eu(int fd, unsigned int *has_pooled_eu);
> > >+int drm_intel_get_min_eu_in_pool(int fd, unsigned int *min_eu);
> 
> Do we export more than 2 billion eu? Or more than 2 billion states for the
> bool has_pooled_eu?
> 
> Could we not just use
> 
> int drm_intel_get_pooled_eu(int fd);
> 
> ret < 0 => error occurred / unknown
> ret == 0 => no
> ret > 0 => yes
> 
> and same for get_min_eu.
> 
> > >+
> > >  /** @{ Compatibility defines to keep old code building despite the
> symbol rename
> > >   * from dri_* to drm_intel_*
> > >   */
> > >diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
> > >index 0a4012b..b8bb654 100644
> > >--- a/intel/intel_bufmgr_gem.c
> > >+++ b/intel/intel_bufmgr_gem.c
> > >@@ -3237,6 +3237,38 @@ drm_intel_get_eu_total(int fd, unsigned int
> *eu_total)
> > >  	return 0;
> > >  }
> > >
> > >+int
> > >+drm_intel_get_pooled_eu(int fd, unsigned int *has_pooled_eu) {
> > >+	drm_i915_getparam_t gp;
> > >+	int ret;
> > >+
> > >+	memclear(gp);
> > >+	gp.value = (int*)has_pooled_eu;
> > >+	gp.param = I915_PARAM_HAS_POOLED_EU;
> > >+	ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
> > >+	if (ret)
> 
> save a few electrons....
> 
> int drm_intel_get_pooled_eu(int fd)
> {
> 	drm_i915_getparam_t gp;
> 	int ret;
> 
> 	memclear(gp);
> 	gp.param = I915_PARAM_HAS_POOLED_EU;
> 	gp.value = &ret;
> 	if (drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp))
> 		return -errno;
> 
> 	return ret;
> }
> 
> (save a few more by calling this int __getparam(int fd, unsigned name)) -
> Chris
> 
> --
> Chris Wilson, Intel Open Source Technology Centre


More information about the dri-devel mailing list