Check if this 3-step procedure exhibits any issues with device recover after unplug. Such issues may indicate insufficient device hardware re-initialization performed by the device driver, or other kernel bugs outside the driver code. v2: rebase on upstream Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@xxxxxxxxxxxxxxx> --- tests/core_hotunplug.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c index 35eba9b8a..a4809720b 100644 --- a/tests/core_hotunplug.c +++ b/tests/core_hotunplug.c @@ -211,6 +211,35 @@ static void unbind_rebind(void) healthcheck(); } +static void unbind_unplug_rescan(void) +{ + struct hotunplug priv; + char buf[PATH_MAX]; + + /* prepare for unbind */ + prepare_for_rebind(&priv, buf, sizeof(buf)); + + /* also prepare for unplug */ + local_debug("closing the device"); + close(priv.fd.drm); + prepare_for_rescan(&priv); + + local_debug("closing the device"); + close(priv.fd.drm); + + local_debug("unbinding the driver from the device"); + driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr); + close(priv.fd.sysfs_drv); + + local_debug("unplugging the device"); + device_unplug(priv.fd.sysfs_dev); + + local_debug("recovering the device"); + bus_rescan(priv.fd.sysfs_bus); + + healthcheck(); +} + static void unplug_rescan(void) { struct hotunplug priv; @@ -290,14 +319,21 @@ igt_main close(fd_drm); } - igt_describe("Check if the driver can be cleanly unbound from a device believed to be closed"); + igt_describe("Check if the driver can be cleanly unbound from a device believed to be closed, then rebound"); igt_subtest("unbind-rebind") unbind_rebind(); igt_fixture igt_abort_on_f(failure, "%s\n", failure); - igt_describe("Check if a device believed to be closed can be cleanly unplugged"); + igt_describe("Check if a device with the driver unbound from it can be cleanly recovered after being unplugged\n"); + igt_subtest("unbind-unplug-rescan") + unbind_unplug_rescan(); + + igt_fixture + igt_abort_on_f(failure, "%s\n", failure); + + igt_describe("Check if a device believed to be closed can be cleanly unplugged and recovered"); igt_subtest("unplug-rescan") unplug_rescan(); -- 2.21.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx