[igt-dev] [PATCH i-g-t v3 2/2] tests/xe_pm: Add d3-mmap IGT test

Gupta, Anshuman anshuman.gupta at intel.com
Thu Oct 5 10:27:09 UTC 2023



> -----Original Message-----
> From: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> Sent: Thursday, October 5, 2023 3:54 PM
> To: igt-dev at lists.freedesktop.org
> Cc: Gupta, Anshuman <anshuman.gupta at intel.com>; Vivi, Rodrigo
> <rodrigo.vivi at intel.com>
> Subject: Re: [igt-dev] [PATCH i-g-t v3 2/2] tests/xe_pm: Add d3-mmap IGT
> test
> 
> Hi Anshuman,
> 
> On 2023-09-29 at 15:41:55 +0530, Anshuman Gupta wrote:
> > Adding a test to validate mmap memory mappings along with runtime
> > suspend and resume for both xe device and it's pci parent bridge in
> > device hierarchy.
> >
> > v2:
> > - Use 0xc00fee pattern. [Rodrigo]
> > - Test the pagefault case on read and write the mapping. [Rodrigo]
> >
> > Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> > Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
> > ---
> >  tests/intel/xe_pm.c | 88
> > +++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 88 insertions(+)
> >
> > diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c index
> > 48518a5e5..8656e2146 100644
> > --- a/tests/intel/xe_pm.c
> > +++ b/tests/intel/xe_pm.c
> > @@ -446,6 +446,77 @@ static void test_vram_d3cold_threshold(device_t
> device, int sysfs_fd)
> >  	igt_assert(in_d3(device, IGT_ACPI_D3Cold));  }
> >
> > +/**
> > + * SUBTEST: d3-mmap-%s
> > + * Description:
> > + *	Validate mmap memory mapping with d3 state, for %arg[1] region,
> > + *	if supported by device.
> > + * arg[1]:
> > + *
> > + * @vram:	vram region
> > + * @system:	system region
> > + *
> > + * Functionality: pm-d3
> > + * Run type: FULL
> ----- ^^^^^^^^^^^^^^
> Delete this line, field was removed some days ago.
> 
> > + */
> > +static void test_mmap(device_t device, uint32_t flags) {
> > +	size_t bo_size = 8192;
> > +	uint32_t *map = NULL;
> > +	uint32_t bo;
> > +	int i;
> > +
> > +	igt_require_f(flags, "Device doesn't support such memory region\n");
> > +
> > +	bo = xe_bo_create_flags(device.fd_xe, 0, bo_size, flags);
> > +	map = xe_bo_map(device.fd_xe, bo, bo_size);
> > +	igt_assert(map);
> > +	memset(map, 0, bo_size);
> > +
> > +	fw_handle = igt_debugfs_open(device.fd_xe, "forcewake_all",
> > +O_RDONLY);
> > +
> > +	igt_assert(fw_handle >= 0);
> > +	igt_assert(igt_get_runtime_pm_status() ==
> > +IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +
> > +	for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> sizeof(*map) or sizeof(map[0])
> 
> > +		map[i] = 0xc0ffee;
> ---------------- ^
> imho better use define or const, for example MAGIC_1
> 
> > +
> > +	for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> 
> > +		igt_assert(map[i] == 0xc0ffee);
> ---------------------------- ^
> 
> > +
> > +	/* Runtime suspend and validate the pattern and changed the pattern
> */
> > +	close(fw_handle);
> > +
> 	igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSP
> ENDED));
> > +
> > +	for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> > +		igt_assert(map[i] == 0xc0ffee);
> ----------------------------- ^
> Same here.
> 
> > +
> > +	/* dgfx page-fault on mmaping should wake the gpu */
> > +	if (xe_has_vram(device.fd_xe))
> > +		igt_assert(igt_get_runtime_pm_status() ==
> > +IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +
> > +
> 	igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSP
> ENDED));
> > +
> > +	for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> > +		map[i] = 0xdeadbeef;
> ---------------- ^
> MAGIC_2
> 
> > +
> > +	if (xe_has_vram(device.fd_xe))
> > +		igt_assert(igt_get_runtime_pm_status() ==
> > +IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +
> > +
> 	igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSP
> ENDED));
> > +
> > +	/* Runtime resume and check the pattern */
> > +	fw_handle = igt_debugfs_open(device.fd_xe, "forcewake_all",
> O_RDONLY);
> > +	igt_assert(fw_handle >= 0);
> > +	igt_assert(igt_get_runtime_pm_status() ==
> IGT_RUNTIME_PM_STATUS_ACTIVE);
> > +	for (i = 0; i < bo_size / 4; i++)
> ----------------------------- ^
> Same here.
> > +		igt_assert(map[i] == 0xdeadbeef);
> ----------------------------- ^
> Same here.
Thanks for review, I will do all of those change.
Br,
Anshuman.
> 
> Regards,
> Kamil
> 
> > +
> > +	igt_assert(munmap(map, bo_size) == 0);
> > +	gem_close(device.fd_xe, bo);
> > +	close(fw_handle);
> > +}
> > +
> >  igt_main
> >  {
> >  	struct drm_xe_engine_class_instance *hwe; @@ -556,6 +627,23 @@
> > igt_main
> >
> 	igt_install_exit_handler(vram_d3cold_threshold_restore);
> >  			test_vram_d3cold_threshold(device, sysfs_fd);
> >  		}
> > +
> > +		igt_describe("Validate mmap memory mappings with system
> region,"
> > +			     "when device along with parent bridge in d3");
> > +		igt_subtest("d3-mmap-system") {
> > +			test_mmap(device, system_memory(device.fd_xe));
> > +		}
> > +
> > +		igt_describe("Validate mmap memory mappings with vram
> region,"
> > +			     "when device along with parent bridge in d3");
> > +		igt_subtest("d3-mmap-vram") {
> > +			if (device.pci_root != device.pci_xe) {
> > +
> 	igt_pm_enable_pci_card_runtime_pm(device.pci_root, NULL);
> > +
> 	igt_pm_set_d3cold_allowed(device.pci_slot_name, 1);
> > +			}
> > +
> > +			test_mmap(device,
> visible_vram_memory(device.fd_xe, 0));
> > +		}
> >  	}
> >
> >  	igt_fixture {
> > --
> > 2.25.1
> >


More information about the igt-dev mailing list