[Intel-xe] [PATCH v2 05/14] drm/xe/uapi: Align on a common way to return arrays (memory regions)
Francois Dugast
francois.dugast at intel.com
Wed Nov 29 12:33:18 UTC 2023
On Tue, Nov 28, 2023 at 03:51:13PM -0500, Rodrigo Vivi wrote:
> On Fri, Nov 24, 2023 at 06:19:47PM +0000, Souza, Jose wrote:
> > On Wed, 2023-11-22 at 14:38 +0000, Francois Dugast wrote:
> > > The uAPI provides queries which return arrays of elements. As of now
> > > the format used in the struct is different depending on which element
> > > is queried. Fix this for memory regions by applying the pattern below:
> > >
> > > struct drm_xe_query_Xs {
> > > __u32 num_Xs;
> > > struct drm_xe_X Xs[];
> > > ...
> > > }
> > >
> > > This removes "query" in the name of struct drm_xe_query_mem_region
> > > as it is not returned from the query IOCTL. There is no functional
> > > change.
> > >
> > > v2: Only rename drm_xe_query_mem_region to drm_xe_mem_region
> > > (José Roberto de Souza)
> > >
> > > Signed-off-by: Francois Dugast <francois.dugast at intel.com>
> > > ---
> > > drivers/gpu/drm/xe/xe_query.c | 36 ++++++++++++++++++-----------------
> > > include/uapi/drm/xe_drm.h | 12 ++++++------
> > > 2 files changed, 25 insertions(+), 23 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> > > index 0cbfeaeb1330..f321ed4d3b0b 100644
> > > --- a/drivers/gpu/drm/xe/xe_query.c
> > > +++ b/drivers/gpu/drm/xe/xe_query.c
> > > @@ -240,11 +240,11 @@ static size_t calc_mem_regions_size(struct xe_device *xe)
> > > if (ttm_manager_type(&xe->ttm, i))
> > > num_managers++;
> > >
> > > - return offsetof(struct drm_xe_query_mem_regions, regions[num_managers]);
> > > + return offsetof(struct drm_xe_query_mem_regions, mem_regions[num_managers]);
> > > }
> > >
> > > static int query_mem_regions(struct xe_device *xe,
> > > - struct drm_xe_device_query *query)
> > > + struct drm_xe_device_query *query)
> > > {
> > > size_t size = calc_mem_regions_size(xe);
> > > struct drm_xe_query_mem_regions *usage;
> > > @@ -265,36 +265,38 @@ static int query_mem_regions(struct xe_device *xe,
> > > return -ENOMEM;
> > >
> > > man = ttm_manager_type(&xe->ttm, XE_PL_TT);
> > > - usage->regions[0].mem_class = DRM_XE_MEM_REGION_CLASS_SYSMEM;
> > > - usage->regions[0].instance = 0;
> > > - usage->regions[0].min_page_size = PAGE_SIZE;
> > > - usage->regions[0].total_size = man->size << PAGE_SHIFT;
> > > + usage->mem_regions[0].mem_class = DRM_XE_MEM_REGION_CLASS_SYSMEM;
> >
> > nit: can you also rename 'usage' to something else, it was named 'usage' because of the old query name.
>
> my bad for having forgotten this 'usage' in here. Let's fix that in a follow-up after this series is merged.
>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
Thanks, it is already fixed in the next revision.
Francois
>
> >
> >
> > > + usage->mem_regions[0].instance = 0;
> > > + usage->mem_regions[0].min_page_size = PAGE_SIZE;
> > > + usage->mem_regions[0].total_size = man->size << PAGE_SHIFT;
> > > if (perfmon_capable())
> > > - usage->regions[0].used = ttm_resource_manager_usage(man);
> > > - usage->num_regions = 1;
> > > + usage->mem_regions[0].used = ttm_resource_manager_usage(man);
> > > + usage->num_mem_regions = 1;
> > >
> > > for (i = XE_PL_VRAM0; i <= XE_PL_VRAM1; ++i) {
> > > man = ttm_manager_type(&xe->ttm, i);
> > > if (man) {
> > > - usage->regions[usage->num_regions].mem_class =
> > > + usage->mem_regions[usage->num_mem_regions].mem_class =
> > > DRM_XE_MEM_REGION_CLASS_VRAM;
> > > - usage->regions[usage->num_regions].instance =
> > > - usage->num_regions;
> > > - usage->regions[usage->num_regions].min_page_size =
> > > + usage->mem_regions[usage->num_mem_regions].instance =
> > > + usage->num_mem_regions;
> > > + usage->mem_regions[usage->num_mem_regions].min_page_size =
> > > xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K ?
> > > SZ_64K : PAGE_SIZE;
> > > - usage->regions[usage->num_regions].total_size =
> > > + usage->mem_regions[usage->num_mem_regions].total_size =
> > > man->size;
> > >
> > > if (perfmon_capable()) {
> > > xe_ttm_vram_get_used(man,
> > > - &usage->regions[usage->num_regions].used,
> > > - &usage->regions[usage->num_regions].cpu_visible_used);
> > > + &usage->mem_regions
> > > + [usage->num_mem_regions].used,
> > > + &usage->mem_regions
> > > + [usage->num_mem_regions].cpu_visible_used);
> > > }
> > >
> > > - usage->regions[usage->num_regions].cpu_visible_size =
> > > + usage->mem_regions[usage->num_mem_regions].cpu_visible_size =
> > > xe_ttm_vram_get_cpu_visible_size(man);
> > > - usage->num_regions++;
> > > + usage->num_mem_regions++;
> > > }
> > > }
> > >
> > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > index da10d946930b..a9bbdf141fe2 100644
> > > --- a/include/uapi/drm/xe_drm.h
> > > +++ b/include/uapi/drm/xe_drm.h
> > > @@ -182,10 +182,10 @@ enum drm_xe_memory_class {
> > > };
> > >
> > > /**
> > > - * struct drm_xe_query_mem_region - Describes some region as known to
> > > + * struct drm_xe_mem_region - Describes some region as known to
> > > * the driver.
> > > */
> > > -struct drm_xe_query_mem_region {
> > > +struct drm_xe_mem_region {
> > > /**
> > > * @mem_class: The memory class describing this region.
> > > *
> > > @@ -322,12 +322,12 @@ struct drm_xe_query_engine_cycles {
> > > * struct drm_xe_query_mem_regions in .data.
> > > */
> > > struct drm_xe_query_mem_regions {
> > > - /** @num_regions: number of memory regions returned in @regions */
> > > - __u32 num_regions;
> > > + /** @num_mem_regions: number of memory regions returned in @mem_regions */
> > > + __u32 num_mem_regions;
> > > /** @pad: MBZ */
> > > __u32 pad;
> > > - /** @regions: The returned regions for this device */
> > > - struct drm_xe_query_mem_region regions[];
> > > + /** @mem_regions: The returned memory regions for this device */
> > > + struct drm_xe_mem_region mem_regions[];
> > > };
> > >
> > > /**
> >
More information about the Intel-xe
mailing list