[PATCH i-g-t] tests/intel/xe_busted: Introduce a new test for Xe device busted state

Vivi, Rodrigo rodrigo.vivi at intel.com
Wed Apr 3 18:28:28 UTC 2024


On Wed, 2024-04-03 at 20:23 +0200, Kamil Konieczny wrote:
> Hi Rodrigo,
> On 2024-03-14 at 21:08:41 -0400, Rodrigo Vivi wrote:
> > Let's inject a gt_reset failure that will put Xe device in the
> > new busted state, then we confirm the IOCTL is blocked and we
> ----- ^^^^^^
> Why is not 'wedged'? What is a difference?

doh!

Please read it wedged. I forgot to s/busted/wedged in the commit
messages. I will send a fixed version later.

> 
> Regards,
> Kamil
> 
> > reload the driver to get back to a clean state for other test
> > execution, since busted state in Xe is a final state that can only
> > be cleared with a device rebind/reprobe.
> > 
> > The fault injection of this test is entirely based on xe_uevent
> > provided by Himal.
> > 
> > v2: Use rebind instead of module reload (Lucas)
> >     And other improvements also pointed out by Lucas.
> > 
> > Cc: Lucas De Marchi <lucas.demarchi at intel.com>
> > Cc:  Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> > ---
> >  tests/intel/xe_busted.c | 107
> > ++++++++++++++++++++++++++++++++++++++++
> >  tests/meson.build       |   1 +
> >  2 files changed, 108 insertions(+)
> >  create mode 100644 tests/intel/xe_busted.c
> > 
> > diff --git a/tests/intel/xe_busted.c b/tests/intel/xe_busted.c
> > new file mode 100644
> > index 000000000..88278213d
> > --- /dev/null
> > +++ b/tests/intel/xe_busted.c
> > @@ -0,0 +1,107 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +/**
> > + * TEST: cause fake gt reset failure which put Xe device in busted
> > state
> > + * Category: Software building block
> > + * Sub-category: driver
> > + * Functionality: busted
> > + * Test category: functionality test
> > + */
> > +
> > +#include <limits.h>
> > +#include <dirent.h>
> > +
> > +#include "igt.h"
> > +#include "igt_device.h"
> > +#include "igt_kmod.h"
> > +#include "igt_sysfs.h"
> > +
> > +#include "xe/xe_ioctl.h"
> > +
> > +static void force_busted(int fd)
> > +{
> > + igt_debugfs_write(fd, "fail_gt_reset/probability", "100");
> > + igt_debugfs_write(fd, "fail_gt_reset/times", "2");
> > +
> > + xe_force_gt_reset(fd, 0);
> > + sleep(1);
> > +}
> > +
> > +static int rebind_xe(int fd)
> > +{
> > + char pci_slot[NAME_MAX];
> > + int sysfs;
> > +
> > + igt_device_get_pci_slot_name(fd, pci_slot);
> > +
> > + sysfs = open("/sys/bus/pci/drivers/xe", O_DIRECTORY);
> > + igt_assert(sysfs);
> > +
> > +        igt_assert(igt_sysfs_set(sysfs, "unbind", pci_slot));
> > +
> > + /*
> > + * We need to close the client for a proper release, before
> > + * binding back again.
> > + */
> > + close(fd);
> > +
> > +        igt_assert(igt_sysfs_set(sysfs, "bind", pci_slot));
> > + close(sysfs);
> > +
> > + /* Renew the client connection */
> > + fd = drm_open_driver(DRIVER_XE);
> > + igt_assert(fd);
> > +
> > + return fd;
> > +}
> > +
> > +static int simple_ioctl(int fd)
> > +{
> > + int ret;
> > +
> > + struct drm_xe_vm_create create = {
> > + .extensions = 0,
> > + .flags = 0,
> > + };
> > +
> > + ret = igt_ioctl(fd, DRM_IOCTL_XE_VM_CREATE, &create);
> > +
> > + if (ret == 0)
> > + xe_vm_destroy(fd, create.vm_id);
> > +
> > + return ret;
> > +}
> > +
> > +/**
> > + * SUBTEST: basic-busted
> > + * Description: Force Xe device busted after injecting a failure
> > in GT reset
> > + */
> > +igt_main
> > +{
> > + int fd;
> > +
> > + igt_fixture {
> > + fd = drm_open_driver(DRIVER_XE);
> > + igt_require(igt_debugfs_exists(fd, "fail_gt_reset/probability",
> > +        O_RDWR));
> > + }
> > +
> > + igt_subtest("basic-busted") {
> > + igt_assert_eq(simple_ioctl(fd), 0);
> > + force_busted(fd);
> > + igt_assert_neq(simple_ioctl(fd), 0);
> > + fd = rebind_xe(fd);
> > + igt_assert_eq(simple_ioctl(fd), 0);
> > + }
> > +
> > + igt_fixture {
> > + if (igt_debugfs_exists(fd, "fail_gt_reset/probability", O_RDWR))
> > {
> > + igt_debugfs_write(fd, "fail_gt_reset/probability", "0");
> > + igt_debugfs_write(fd, "fail_gt_reset/times", "1");
> > + }
> > + drm_close_driver(fd);
> > + }
> > +}
> > diff --git a/tests/meson.build b/tests/meson.build
> > index a856510fc..87a531051 100644
> > --- a/tests/meson.build
> > +++ b/tests/meson.build
> > @@ -274,6 +274,7 @@ intel_kms_progs = [
> >  ]
> >  
> >  intel_xe_progs = [
> > + 'xe_busted',
> >   'xe_ccs',
> >   'xe_create',
> >   'xe_compute',
> > -- 
> > 2.44.0
> > 



More information about the igt-dev mailing list