[igt-dev] [PATCH v4 3/4] tests/xe/xe_guc_pc: Change the sysfs paths
Ghimiray, Himal Prasad
himal.prasad.ghimiray at intel.com
Tue Jul 4 05:46:33 UTC 2023
Hi Ashutosh,
> -----Original Message-----
> From: Dixit, Ashutosh <ashutosh.dixit at intel.com>
> Sent: 01 July 2023 23:28
> To: Ghimiray, Himal Prasad <himal.prasad.ghimiray at intel.com>
> Cc: igt-dev at lists.freedesktop.org; Upadhyay, Tejas
> <tejas.upadhyay at intel.com>; Iddamsetty, Aravind
> <aravind.iddamsetty at intel.com>; Kamil Konieczny
> <kamil.konieczny at linux.intel.com>; Nilawar, Badal
> <badal.nilawar at intel.com>; Tauro, Riana <riana.tauro at intel.com>; Gupta,
> Anshuman <anshuman.gupta at intel.com>
> Subject: Re: [PATCH v4 3/4] tests/xe/xe_guc_pc: Change the sysfs paths
>
> On Tue, 27 Jun 2023 11:08:04 -0700, Himal Prasad Ghimiray wrote:
> >
>
> Hi Himal,
>
> > diff --git a/tests/xe/xe_guc_pc.c b/tests/xe/xe_guc_pc.c index
> > 89d5ae9e..2900ff09 100644
> > --- a/tests/xe/xe_guc_pc.c
> > +++ b/tests/xe/xe_guc_pc.c
> > @@ -133,23 +133,25 @@ static void exec_basic(int fd, struct
> drm_xe_engine_class_instance *eci,
> > xe_vm_destroy(fd, vm);
> > }
> >
> > -static int set_freq(int sysfs, int gt_id, const char *freq_name,
> > uint32_t freq)
> > +static int set_freq(int sysfs, int tile_id, int gt_id, const char
> > +*freq_name, uint32_t freq)
> > {
> > int ret = -EAGAIN;
> > char path[32];
> >
> > - sprintf(path, "device/gt%d/freq_%s", gt_id, freq_name);
> > + igt_assert(snprintf(path, sizeof(path),
> "device/tile%d/gt%d/freq_%s",
> > + tile_id, gt_id, freq_name) < sizeof(path));
> > while (ret == -EAGAIN)
> > ret = igt_sysfs_printf(sysfs, path, "%u", freq);
> > return ret;
> > }
>
> /snip/
>
> > @@ -162,37 +164,37 @@ static uint32_t get_freq(int sysfs, int gt_id, const
> char *freq_name)
> > * Run type: BAT
> > */
> >
> > -static void test_freq_basic_api(int sysfs, int gt_id)
> > +static void test_freq_basic_api(int sysfs, int tile_id, int gt_id)
> > {
> > - uint32_t rpn = get_freq(sysfs, gt_id, "rpn");
> > - uint32_t rpe = get_freq(sysfs, gt_id, "rpe");
> > - uint32_t rp0 = get_freq(sysfs, gt_id, "rp0");
> > + uint32_t rpn = get_freq(sysfs, tile_id, gt_id, "rpn");
> > + uint32_t rpe = get_freq(sysfs, tile_id, gt_id, "rpe");
> > + uint32_t rp0 = get_freq(sysfs, tile_id, gt_id, "rp0");
>
> /snip/
>
> > @@ -373,7 +375,7 @@ igt_main
> > {
> > struct drm_xe_engine_class_instance *hwe;
> > int fd;
> > - int gt;
> > + int gt, tile;
> > static int sysfs = -1;
> > int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
> > uint32_t stash_min;
> > @@ -386,24 +388,24 @@ igt_main
> > sysfs = igt_sysfs_open(fd);
> > igt_assert(sysfs != -1);
> >
> > - /* The defaults are the same. Stashing the gt0 is enough */
> > - stash_min = get_freq(sysfs, 0, "min");
> > - stash_max = get_freq(sysfs, 0, "max");
> > + /* The defaults are the same. Stashing the gt0 in tile0 is
> enough */
> > + stash_min = get_freq(sysfs, 0, 0, "min");
> > + stash_max = get_freq(sysfs, 0, 0, "max");
> > }
> >
> > igt_subtest("freq_basic_api") {
> > - xe_for_each_gt(fd, gt)
> > - test_freq_basic_api(sysfs, gt);
> > + xe_for_each_gt_under_each_tile(fd, tile, gt)
> > + test_freq_basic_api(sysfs, tile, gt);
>
> Basically I have decided I disagree with the entire approach here, so I
> disagree with Patches 2 and 3 in this series. Patch 2 is especially hacky but I
> think it's not needed. Let's do this differently. My points:
>
> * gt id's are unique (so e.g. on MTL we have tile0/gt0 and tile0/gt1, on
> PVC we have tile0/gt0 and tile1/gt1).
>
> * The code in xe_guc_pc.c touches quantities (freq's etc.) which are
> associated with gt's. It doesn't care about tiles and which gt is present
> on which tile etc. It just cares about gt's. So it wrong to change the
> whole code to start worrying about tiles now as this patch is doing (via
> xe_for_each_gt_under_each_tile()).
>
> * So instead what we need to do is very simple. Let's write a function
> which will return the sysfs path for a gt (this function will need to be
> tile aware so it will return things like "device/tile0/gt0",
> "device/tile0/gt1", "device/tile1/gt1" etc.). The function prototype is
> something like:
>
> char *xe_gt_sysfs_path(int gt_id);
>
> How it is implemented probably doesn't matter much. It could e.g. go
> through the sysfs directory tree to find the path of a gt or it could use
> info on how gts are situated on tiles for particular platforms (MTL vs
> PVC as shown above e.g.). Either approach is fine, the platform approach
> is simpler.
>
> So once we have this function implemented, in the above
> set_freq()/get_freq() functions we could just use the gt path returned by
> this function to read/write the sysfs. We don't need to make the entire
> file tile aware. We just need to modify set_freq()/get_freq().
>
My intention of introducing patch 2 was to ensure uniformity and applicability in
case gt specific debugfs and other entries also move under tiles.
If recommendation is to use something sysfs specific, will implement xe_gt_sysfs_path(int gt_id);
And update this test accordingly in next patch.
BR
Himal
> If this doesn't work for some reason please let me know why. Please don't
> merge this series till we resolve this.
>
> Thanks.
> --
> Ashutosh
More information about the igt-dev
mailing list