Hi Joonas/Chris, do you have any comments? I've asked OCL team for this patch, they also agree to use available aperture size for max allocation buffer definition, code confirmation ongoing. > -----Original Message----- > From: Li, Weinan Z > Sent: Wednesday, May 3, 2017 8:51 AM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; intel-gvt-dev@xxxxxxxxxxxxxxxxxxxxx > Cc: Li, Weinan Z <weinan.z.li@xxxxxxxxx> > Subject: [PATCH v3] drm/i915/gvt: return the actual aperture size under gvt > environment > > I915_GEM_GET_APERTURE ioctl is used to probe aperture size from userspace. > In gvt environment, each vm only use the ballooned part of aperture, so we > should return the actual available aperture size exclude the reserved part by > balloon. > > v2: add 'reserved' in struct i915_address_space to record the reserved size in > ggtt by balloon. > > v3: remain aper_size as total, adjust aper_available_size exclude reserved and > pinned. UMD driver need to adjust the max allocation size according to the > available aperture size but not total size. > > Signed-off-by: Weinan Li <weinan.z.li@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem.c | 7 +++---- > drivers/gpu/drm/i915/i915_gem_gtt.h | 3 ++- > drivers/gpu/drm/i915/i915_vgpu.c | 5 ++++- > 3 files changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c > b/drivers/gpu/drm/i915/i915_gem.c index 84ea249..e84576c 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -145,9 +145,8 @@ int i915_mutex_lock_interruptible(struct drm_device > *dev) > struct i915_ggtt *ggtt = &dev_priv->ggtt; > struct drm_i915_gem_get_aperture *args = data; > struct i915_vma *vma; > - size_t pinned; > + size_t pinned = 0; > > - pinned = 0; > mutex_lock(&dev->struct_mutex); > list_for_each_entry(vma, &ggtt->base.active_list, vm_link) > if (i915_vma_is_pinned(vma)) > @@ -158,8 +157,8 @@ int i915_mutex_lock_interruptible(struct drm_device > *dev) > mutex_unlock(&dev->struct_mutex); > > args->aper_size = ggtt->base.total; > - args->aper_available_size = args->aper_size - pinned; > - > + args->aper_available_size = args->aper_size > + - ggtt->base.reserved - pinned; > return 0; > } > > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h > b/drivers/gpu/drm/i915/i915_gem_gtt.h > index fb15684..bdf832d 100644 > --- a/drivers/gpu/drm/i915/i915_gem_gtt.h > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h > @@ -255,7 +255,8 @@ struct i915_address_space { > struct drm_i915_file_private *file; > struct list_head global_link; > u64 total; /* size addr space maps (ex. 2GB for ggtt) */ > - > + /* size addr space reserved by GVT balloon, only used for ggtt */ > + u64 reserved; > bool closed; > > struct i915_page_dma scratch_page; > diff --git a/drivers/gpu/drm/i915/i915_vgpu.c > b/drivers/gpu/drm/i915/i915_vgpu.c > index 4ab8a97..58055a9 100644 > --- a/drivers/gpu/drm/i915/i915_vgpu.c > +++ b/drivers/gpu/drm/i915/i915_vgpu.c > @@ -183,7 +183,7 @@ int intel_vgt_balloon(struct drm_i915_private > *dev_priv) > > unsigned long mappable_base, mappable_size, mappable_end; > unsigned long unmappable_base, unmappable_size, unmappable_end; > - int ret; > + int ret, i; > > if (!intel_vgpu_active(dev_priv)) > return 0; > @@ -242,6 +242,9 @@ int intel_vgt_balloon(struct drm_i915_private > *dev_priv) > goto err; > } > > + for (i = 0; i < ARRAY_SIZE(bl_info.space); i++) > + ggtt->base.reserved += bl_info.space[i].size; > + > DRM_INFO("VGT balloon successfully\n"); > return 0; > > -- > 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx