[PATCH i-g-t v2 3/4] tests/intel/xe_sriov_flr: Use VRAM access helpers from intel_vram library
Bernatowicz, Marcin
marcin.bernatowicz at linux.intel.com
Thu Aug 28 12:23:45 UTC 2025
On 8/27/2025 4:49 PM, Lukasz Laguna wrote:
> Replace local VRAM access helper functions with the helpers provided by
> the intel_vram library.
>
> Signed-off-by: Lukasz Laguna <lukasz.laguna at intel.com>
> ---
> v2:
> - adjust the patch for lib changes
> ---
> tests/intel/xe_sriov_flr.c | 104 +++++++------------------------------
> 1 file changed, 18 insertions(+), 86 deletions(-)
>
> diff --git a/tests/intel/xe_sriov_flr.c b/tests/intel/xe_sriov_flr.c
> index fc08703c0..1a04c6891 100644
> --- a/tests/intel/xe_sriov_flr.c
> +++ b/tests/intel/xe_sriov_flr.c
> @@ -11,6 +11,7 @@
> #include "igt_device.h"
> #include "igt_sriov_device.h"
> #include "intel_chipset.h"
> +#include "intel_vram.h"
> #include "linux_scaffold.h"
> #include "xe/xe_mmio.h"
> #include "xe/xe_query.h"
> @@ -676,94 +677,28 @@ struct lmem_data {
> size_t *vf_lmem_size;
> };
>
> -struct lmem_info {
> - /* pointer to the mapped area */
> - char *addr;
> - /* size of mapped area */
> - size_t size;
> -};
> -
> const size_t STEP = SZ_1M;
>
> -static void *mmap_vf_lmem(int pf_fd, int vf_num, size_t length, int prot, off_t offset)
> -{
> - int open_flags = ((prot & PROT_WRITE) != 0) ? O_RDWR : O_RDONLY;
> - struct stat st;
> - int sysfs, fd;
> - void *addr;
> -
> - sysfs = igt_sriov_device_sysfs_open(pf_fd, vf_num);
> - if (sysfs < 0) {
> - igt_debug("Failed to open sysfs for VF%d: %s\n", vf_num, strerror(errno));
> - return NULL;
> - }
> -
> - fd = openat(sysfs, "resource2", open_flags | O_SYNC);
> - close(sysfs);
> - if (fd < 0) {
> - igt_debug("Failed to open resource2 for VF%d: %s\n", vf_num, strerror(errno));
> - return NULL;
> - }
> -
> - if (fstat(fd, &st)) {
> - igt_debug("Failed to stat resource2 for VF%d: %s\n", vf_num, strerror(errno));
> - close(fd);
> - return NULL;
> - }
> -
> - if (st.st_size < length) {
> - igt_debug("Mapping length (%zu) exceeds BAR2 size (%" PRIu64 ")\n", length, (uint64_t)st.st_size);
> - close(fd);
> - return NULL;
> - }
> -
> - addr = mmap(NULL, length, prot, MAP_SHARED, fd, offset);
> - close(fd);
> - if (addr == MAP_FAILED) {
> - igt_debug("Failed mmap resource2 for VF%d: %s\n", vf_num, strerror(errno));
> - return NULL;
> - }
> -
> - return addr;
> -}
> -
> -static void munmap_vf_lmem(struct lmem_info *lmem)
> -{
> - igt_debug_on_f(munmap(lmem->addr, lmem->size),
> - "Failed munmap %p: %s\n", lmem->addr, strerror(errno));
> -}
> -
> -static char lmem_read(const char *addr, size_t idx)
> -{
> - return READ_ONCE(*(addr + idx));
> -}
> -
> -static char lmem_write_readback(char *addr, size_t idx, char value)
> -{
> - WRITE_ONCE(*(addr + idx), value);
> - return lmem_read(addr, idx);
> -}
> -
> -static bool lmem_write_pattern(struct lmem_info *lmem, char value, size_t start, size_t step)
> +static bool lmem_write_pattern(struct vram_mapping *m, uint8_t value, size_t start, size_t step)
> {
> - char read;
> + uint8_t read;
>
> - for (; start < lmem->size; start += step) {
> - read = lmem_write_readback(lmem->addr, start, value);
> + for (; start < m->size; start += step) {
> + read = intel_vram_write_readback8(m, start, value);
> if (igt_debug_on_f(read != value, "LMEM[%zu]=%u != %u\n", start, read, value))
> return false;
> }
> return true;
> }
>
> -static bool lmem_contains_expected_values_(struct lmem_info *lmem,
> - char expected, size_t start,
> +static bool lmem_contains_expected_values_(struct vram_mapping *m,
> + uint8_t expected, size_t start,
> size_t step)
> {
> - char read;
> + uint8_t read;
>
> - for (; start < lmem->size; start += step) {
> - read = lmem_read(lmem->addr, start);
> + for (; start < m->size; start += step) {
> + read = intel_vram_read8(m, start);
> if (igt_debug_on_f(read != expected,
> "LMEM[%zu]=%u != %u\n", start, read, expected))
> return false;
> @@ -774,30 +709,27 @@ static bool lmem_contains_expected_values_(struct lmem_info *lmem,
> static bool lmem_contains_expected_values(int pf_fd, int vf_num, size_t length,
> char expected)
> {
> - struct lmem_info lmem = { .size = length };
> + struct vram_mapping vram;
> bool result;
>
> - lmem.addr = mmap_vf_lmem(pf_fd, vf_num, length, PROT_READ | PROT_WRITE, 0);
> - if (igt_debug_on(!lmem.addr))
> + if (igt_debug_on(intel_vram_mmap(pf_fd, vf_num, 0, length, PROT_READ | PROT_WRITE, &vram)))
> return false;
>
> - result = lmem_contains_expected_values_(&lmem, expected, 0, STEP);
> - munmap_vf_lmem(&lmem);
> + result = lmem_contains_expected_values_(&vram, expected, 0, STEP);
> + intel_vram_munmap(&vram);
>
> return result;
> }
>
> static bool lmem_mmap_write_munmap(int pf_fd, int vf_num, size_t length, char value)
> {
> - struct lmem_info lmem;
> + struct vram_mapping vram;
> bool result;
>
> - lmem.size = length;
> - lmem.addr = mmap_vf_lmem(pf_fd, vf_num, length, PROT_READ | PROT_WRITE, 0);
> - if (igt_debug_on(!lmem.addr))
> + if (igt_debug_on(intel_vram_mmap(pf_fd, vf_num, 0, length, PROT_READ | PROT_WRITE, &vram)))
> return false;
> - result = lmem_write_pattern(&lmem, value, 0, STEP);
> - munmap_vf_lmem(&lmem);
> + result = lmem_write_pattern(&vram, value, 0, STEP);
> + intel_vram_munmap(&vram);
>
> return result;
> }
LGTM,
Reviewed-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
More information about the igt-dev
mailing list