Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Auld <matthew.auld@intel.com>
To: "Upadhyay, Tejas" <tejas.upadhyay@intel.com>,
	"igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>,
	"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH i-g-t V2 2/2] tests/intel: Add xe_pci_membarrier test
Date: Mon, 11 Nov 2024 11:48:51 +0000	[thread overview]
Message-ID: <648a6278-4c97-497c-b99b-59c6b876f0a9@intel.com> (raw)
In-Reply-To: <SJ1PR11MB6204DF3E6F9799CC944C420B81532@SJ1PR11MB6204.namprd11.prod.outlook.com>


On 06/11/2024 13:12, Upadhyay, Tejas wrote:
> 
> 
>> -----Original Message-----
>> From: Upadhyay, Tejas
>> Sent: Wednesday, November 6, 2024 5:30 PM
>> To: Auld, Matthew <matthew.auld@intel.com>; igt-dev@lists.freedesktop.org;
>> intel-xe@lists.freedesktop.org
>> Subject: RE: [PATCH i-g-t V2 2/2] tests/intel: Add xe_pci_membarrier test
>>
>>
>>
>>> -----Original Message-----
>>> From: Auld, Matthew <matthew.auld@intel.com>
>>> Sent: Friday, November 1, 2024 7:25 PM
>>> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>; igt-
>>> dev@lists.freedesktop.org; intel-xe@lists.freedesktop.org
>>> Subject: Re: [PATCH i-g-t V2 2/2] tests/intel: Add xe_pci_membarrier
>>> test
>>>
>>> On 23/10/2024 10:43, Tejas Upadhyay wrote:
>>>> We want to make sure that direct mmap mapping of physical page at
>>>> doorbell space and whole page is accessible in order to use pci
>>>> memory barrier effect effectively.
>>>>
>>>> This is basic pci memory barrier test to showcase xe driver support
>>>> for feature. In follow up patches we will have more of corner and
>>>> negative tests added later.
>>>>
>>>> Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
>>>> ---
>>>>    tests/intel/xe_pci_membarrier.c | 80
>>>> +++++++++++++++++++++++++++++++++
>>>
>>> Could probably just plonk this in the existing mmap offset tests file?
>>
>> I tried this, but looks like none of existing methods which are using bo-create
>> looks related to this test. Also negative tests are also going to be different for
>> this test. I would think it should be good to keep this test separate. What you
>> think!
> 
> Or I can do atlest below :

Yes, somethng like that seems fine to me.

> 
> diff --git a/tests/intel/xe_mmap.c b/tests/intel/xe_mmap.c
> index fc5d73d59..8ae6405b5 100644
> --- a/tests/intel/xe_mmap.c
> +++ b/tests/intel/xe_mmap.c
> @@ -64,6 +64,54 @@ test_mmap(int fd, uint32_t placement, uint32_t flags)
>          gem_close(fd, bo);
>   }
> 
> +#define PAGE_SHIFT 12
> +#define PAGE_SIZE 4096
> +
> +/**
> + * SUBTEST: pci_membarrier
> + * Description: create pci memory barrier with write on defined mmap offset.
> + * Test category: functionality test
> + *
> + */
> +static void test_pci_membarrier(int xe)
> +{
> +        uint64_t flags = MAP_SHARED;
> +        unsigned int prot = PROT_WRITE;
> +        uint32_t *ptr;
> +        uint64_t size = PAGE_SIZE;
> +        struct timespec tv;
> +        struct drm_xe_gem_mmap_offset mmo = {
> +                .handle = 0,
> +                .flags = DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER,
> +        };
> +
> +        igt_assert_eq(igt_ioctl(xe, DRM_IOCTL_XE_GEM_MMAP_OFFSET, &mmo), 0);
> +        ptr = mmap(NULL, size, prot, flags, xe, mmo.offset);
> +        igt_assert(ptr != MAP_FAILED);
> +
> +        /* Check whole page for any errors, also check as
> +         * we should not read written values back
> +         */
> +        for (int i = 0; i < size / sizeof(*ptr); i++) {
> +                /* It is expected unconfigured doorbell space
> +                 * will return read value 0xdeadbeef
> +                 */
> +                igt_assert_eq_u32(READ_ONCE(ptr[i]), 0xdeadbeef);
> +
> +                igt_gettime(&tv);
> +                ptr[i] = i;
> +                if (READ_ONCE(ptr[i]) == i) {
> +                        while (READ_ONCE(ptr[i]) == i)
> +                                ;
> +                        igt_info("fd:%d value retained for %"PRId64"ns pos:%d\n",
> +                                 xe, igt_nsec_elapsed(&tv), i);
> +                }
> +                igt_assert_neq(READ_ONCE(ptr[i]), i);
> +        }
> +
> +        munmap(ptr, size);
> +}
> +
>   /**
>    * SUBTEST: bad-flags
>    * Description: Test mmap offset with bad flags.
> @@ -273,6 +321,9 @@ igt_main
>                  test_mmap(fd, vram_memory(fd, 0) | system_memory(fd),
>                            DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM);
> 
> +       igt_subtest("pci-membarrier")
> +               test_pci_membarrier(fd);
> +
>          igt_subtest("bad-flags")
>                  test_bad_flags(fd);
> 
> diff --git a/tests/meson.build b/tests/meson.build
> index 2724c7a9a..0daed46da 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -306,6 +306,7 @@ intel_xe_progs = [
>          'xe_noexec_ping_pong',
>          'xe_oa',
>          'xe_pat',
> +        'xe_pci_membarrier',
> 
> 
>>
>> Tejas
>>
>>>
>>>>    tests/meson.build               |  1 +
>>>>    2 files changed, 81 insertions(+)
>>>>    create mode 100644 tests/intel/xe_pci_membarrier.c
>>>>
>>>> diff --git a/tests/intel/xe_pci_membarrier.c
>>>> b/tests/intel/xe_pci_membarrier.c new file mode 100644 index
>>>> 000000000..d0bf447b6
>>>> --- /dev/null
>>>> +++ b/tests/intel/xe_pci_membarrier.c
>>>> @@ -0,0 +1,80 @@
>>>> +// SPDX-License-Identifier: MIT
>>>> +/*
>>>> + * Copyright(c) 2024 Intel Corporation. All rights reserved.
>>>> + */
>>>> +
>>>> +#include "xe_drm.h"
>>>> +#include "igt.h"
>>>> +
>>>> +/**
>>>> + * TEST: Test if the driver is capable of putting pci memory
>>>> +barrier using mmap
>>>> + * Category: Core
>>>> + * Mega feature: General Core features
>>>> + * Sub-category: Memory management tests
>>>> + * Functionality: mmap with pre-defined offset  */
>>>> +
>>>> +IGT_TEST_DESCRIPTION("Basic MMAP tests pci memory barrier effect
>>>> +with special offset"); #define PAGE_SHIFT 12 #define PAGE_SIZE 4096
>>>> +
>>>> +/**
>>>> + * SUBTEST: basic
>>>> + * Description: create pci memory barrier with write on defined
>>>> +mmap
>>> offset.
>>>> + * Test category: functionality test
>>>> + *
>>>> + */
>>>> +
>>>> +static void pci_membarrier(int xe)
>>>> +{
>>>> +	uint64_t flags = MAP_SHARED;
>>>> +	unsigned int prot = PROT_WRITE;
>>>> +	uint32_t *ptr;
>>>> +	uint64_t size = PAGE_SIZE;
>>>> +	struct timespec tv;
>>>> +        struct drm_xe_gem_mmap_offset mmo = {
>>>> +                .handle = 0,
>>>> +                .flags = DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER,
>>>> +        };
>>>> +
>>>> +        igt_assert_eq(igt_ioctl(xe, DRM_IOCTL_XE_GEM_MMAP_OFFSET,
>>> &mmo), 0);
>>>> +        ptr = mmap(NULL, size, prot, flags, xe, mmo.offset);
>>>> +	igt_assert(ptr != MAP_FAILED);
>>>
>>> nit: formatting
>>>
>>>> +
>>>> +	/* Check whole page for any errors, also check as
>>>> +	 * we should not read written values back
>>>> +	 */
>>>> +	for (int i = 0; i < size / sizeof(*ptr); i++) {
>>>> +		/* It is expected unconfigured doorbell space
>>>> +		 * will return read value 0xdeadbeef
>>>> +		 */
>>>> +		igt_assert_eq_u32(READ_ONCE(ptr[i]), 0xdeadbeef);
>>>> +
>>>> +		igt_gettime(&tv);
>>>> +		ptr[i] = i;
>>>> +		if (READ_ONCE(ptr[i]) == i) {
>>>
>>> Can this actually happen where the value is written?
>>>
>>> I think also consider adding some negative testcases. For example:
>>>
>>> - Try to mmap something larger than 4K. Ensure we get an error.
>>> - Try BARRIER mmap_offset, and also supply a BO. Ensure we get an error.
>>>
>>>> +			while (READ_ONCE(ptr[i]) == i)
>>>> +				;
>>>> +			igt_info("fd:%d value retained for %"PRId64"ns
>>> pos:%d\n",
>>>> +				 xe, igt_nsec_elapsed(&tv), i);
>>>> +		}
>>>> +		igt_assert_neq(READ_ONCE(ptr[i]), i);
>>>> +	}
>>>> +
>>>> +	munmap(ptr, size);
>>>> +}
>>>> +
>>>> +igt_main
>>>> +{
>>>> +	int xe;
>>>> +
>>>> +	igt_fixture {
>>>> +		xe = drm_open_driver(DRIVER_XE);
>>>> +	}
>>>> +
>>>> +	igt_subtest_f("basic")
>>>> +		pci_membarrier(xe);
>>>> +
>>>> +	igt_fixture
>>>> +		drm_close_driver(xe);
>>>> +}
>>>> diff --git a/tests/meson.build b/tests/meson.build index
>>>> 34b87b125..15131d812 100644
>>>> --- a/tests/meson.build
>>>> +++ b/tests/meson.build
>>>> @@ -306,6 +306,7 @@ intel_xe_progs = [
>>>>    	'xe_noexec_ping_pong',
>>>>    	'xe_oa',
>>>>    	'xe_pat',
>>>> +        'xe_pci_membarrier',
>>>>    	'xe_peer2peer',
>>>>    	'xe_pm',
>>>>    	'xe_pm_residency',


  reply	other threads:[~2024-11-11 11:48 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-23  9:43 [PATCH i-g-t V2 0/2] Add xe_pci_membarrier test Tejas Upadhyay
2024-10-23  9:43 ` [PATCH i-g-t V2 1/2] drm-uapi/xe: Add new flag in mmap offset ioctl Tejas Upadhyay
2024-11-06 17:35   ` Matt Roper
2024-10-23  9:43 ` [PATCH i-g-t V2 2/2] tests/intel: Add xe_pci_membarrier test Tejas Upadhyay
2024-11-01 13:55   ` Matthew Auld
2024-11-06 12:00     ` Upadhyay, Tejas
2024-11-06 13:12       ` Upadhyay, Tejas
2024-11-11 11:48         ` Matthew Auld [this message]
2024-10-23 10:42 ` ✗ GitLab.Pipeline: warning for " Patchwork
2024-10-23 11:00 ` ✓ Fi.CI.BAT: success " Patchwork
2024-10-23 11:09 ` ✓ CI.xeBAT: " Patchwork
2024-10-23 12:58 ` ✗ CI.xeFULL: failure " Patchwork
2024-10-23 15:56 ` ✗ Fi.CI.IGT: " Patchwork
2024-11-06 13:17 ` ✗ Fi.CI.BUILD: failure for Add xe_pci_membarrier test (rev2) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=648a6278-4c97-497c-b99b-59c6b876f0a9@intel.com \
    --to=matthew.auld@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=tejas.upadhyay@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox