From: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> To: igt-dev@lists.freedesktop.org Cc: "Michał Winiarski" <michal.winiarski@intel.com>, intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH i-g-t v6 13/24] tests/core_hotunplug: Let the driver time out essential sysfs operations Date: Fri, 11 Sep 2020 12:30:28 +0200 [thread overview] Message-ID: <20200911103039.4574-14-janusz.krzysztofik@linux.intel.com> (raw) In-Reply-To: <20200911103039.4574-1-janusz.krzysztofik@linux.intel.com> The test now arms a timer before performing each driver unbind / rebind or device unplug / bus rescan sysfs operation. Then in case of issues we may prevent the driver from showing us if and how it can handle them. Don't arm the timer before sysfs operations which are essential for a subtest. v2: Refresh, - don't time out on hot driver rebind / hot device restore in *-lateclose variants, those operations haven't been covered by other subtests. Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> --- tests/core_hotunplug.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c index d31faf215..6112704f4 100644 --- a/tests/core_hotunplug.c +++ b/tests/core_hotunplug.c @@ -120,29 +120,31 @@ static void prepare(struct hotunplug *priv) } /* Unbind the driver from the device */ -static void driver_unbind(struct hotunplug *priv, const char *prefix) +static void driver_unbind(struct hotunplug *priv, const char *prefix, + int timeout) { igt_debug("%sunbinding the driver from the device\n", prefix); priv->failure = "Driver unbind failure!"; - igt_set_timeout(60, "Driver unbind timeout!"); + igt_set_timeout(timeout, "Driver unbind timeout!"); igt_sysfs_set(priv->fd.sysfs_drv, "unbind", priv->dev_bus_addr); igt_reset_timeout(); } /* Re-bind the driver to the device */ -static void driver_bind(struct hotunplug *priv) +static void driver_bind(struct hotunplug *priv, int timeout) { igt_debug("rebinding the driver to the device\n"); priv->failure = "Driver re-bind failure!"; - igt_set_timeout(60, "Driver re-bind timeout!"); + igt_set_timeout(timeout, "Driver re-bind timeout!"); igt_sysfs_set(priv->fd.sysfs_drv, "bind", priv->dev_bus_addr); igt_reset_timeout(); } /* Remove (virtually unplug) the device from its bus */ -static void device_unplug(struct hotunplug *priv, const char *prefix) +static void device_unplug(struct hotunplug *priv, const char *prefix, + int timeout) { igt_require(priv->fd.sysfs_dev == -1); @@ -153,7 +155,7 @@ static void device_unplug(struct hotunplug *priv, const char *prefix) igt_debug("%sunplugging the device\n", prefix); priv->failure = "Device unplug failure!"; - igt_set_timeout(60, "Device unplug timeout!"); + igt_set_timeout(timeout, "Device unplug timeout!"); igt_sysfs_set(priv->fd.sysfs_dev, "remove", "1"); igt_reset_timeout(); @@ -162,12 +164,12 @@ static void device_unplug(struct hotunplug *priv, const char *prefix) } /* Re-discover the device by rescanning its bus */ -static void bus_rescan(struct hotunplug *priv) +static void bus_rescan(struct hotunplug *priv, int timeout) { igt_debug("rediscovering the device\n"); priv->failure = "Bus rescan failure!"; - igt_set_timeout(60, "Bus rescan timeout!"); + igt_set_timeout(timeout, "Bus rescan timeout!"); igt_sysfs_set(priv->fd.sysfs_bus, "../rescan", "1"); igt_reset_timeout(); } @@ -214,10 +216,10 @@ static void recover(struct hotunplug *priv) cleanup(priv); if (faccessat(priv->fd.sysfs_bus, priv->dev_bus_addr, F_OK, 0)) - bus_rescan(priv); + bus_rescan(priv, 60); else if (faccessat(priv->fd.sysfs_drv, priv->dev_bus_addr, F_OK, 0)) - driver_bind(priv); + driver_bind(priv, 60); if (priv->failure) healthcheck(priv); @@ -252,9 +254,9 @@ static void unbind_rebind(struct hotunplug *priv) { igt_assert_eq(priv->fd.drm, -1); - driver_unbind(priv, ""); + driver_unbind(priv, "", 0); - driver_bind(priv); + driver_bind(priv, 0); healthcheck(priv); } @@ -263,9 +265,9 @@ static void unplug_rescan(struct hotunplug *priv) { igt_assert_eq(priv->fd.drm, -1); - device_unplug(priv, ""); + device_unplug(priv, "", 0); - bus_rescan(priv); + bus_rescan(priv, 0); healthcheck(priv); } @@ -275,9 +277,9 @@ static void hotunbind_lateclose(struct hotunplug *priv) igt_assert_eq(priv->fd.drm, -1); priv->fd.drm = local_drm_open_driver("", " for hot unbind"); - driver_unbind(priv, "hot "); + driver_unbind(priv, "hot ", 0); - driver_bind(priv); + driver_bind(priv, 0); priv->fd.drm = close_device(priv->fd.drm, "late ", "unbound "); igt_assert_eq(priv->fd.drm, -1); @@ -290,9 +292,9 @@ static void hotunplug_lateclose(struct hotunplug *priv) igt_assert_eq(priv->fd.drm, -1); priv->fd.drm = local_drm_open_driver("", " for hot unplug"); - device_unplug(priv, "hot "); + device_unplug(priv, "hot ", 0); - bus_rescan(priv); + bus_rescan(priv, 0); priv->fd.drm = close_device(priv->fd.drm, "late ", "removed "); igt_assert_eq(priv->fd.drm, -1); -- 2.21.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> To: igt-dev@lists.freedesktop.org Cc: "Michał Winiarski" <michal.winiarski@intel.com>, "Petri Latvala" <petri.latvala@intel.com>, intel-gfx@lists.freedesktop.org, "Tvrtko Ursulin" <tvrtko.ursulin@intel.com> Subject: [igt-dev] [PATCH i-g-t v6 13/24] tests/core_hotunplug: Let the driver time out essential sysfs operations Date: Fri, 11 Sep 2020 12:30:28 +0200 [thread overview] Message-ID: <20200911103039.4574-14-janusz.krzysztofik@linux.intel.com> (raw) In-Reply-To: <20200911103039.4574-1-janusz.krzysztofik@linux.intel.com> The test now arms a timer before performing each driver unbind / rebind or device unplug / bus rescan sysfs operation. Then in case of issues we may prevent the driver from showing us if and how it can handle them. Don't arm the timer before sysfs operations which are essential for a subtest. v2: Refresh, - don't time out on hot driver rebind / hot device restore in *-lateclose variants, those operations haven't been covered by other subtests. Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> --- tests/core_hotunplug.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/tests/core_hotunplug.c b/tests/core_hotunplug.c index d31faf215..6112704f4 100644 --- a/tests/core_hotunplug.c +++ b/tests/core_hotunplug.c @@ -120,29 +120,31 @@ static void prepare(struct hotunplug *priv) } /* Unbind the driver from the device */ -static void driver_unbind(struct hotunplug *priv, const char *prefix) +static void driver_unbind(struct hotunplug *priv, const char *prefix, + int timeout) { igt_debug("%sunbinding the driver from the device\n", prefix); priv->failure = "Driver unbind failure!"; - igt_set_timeout(60, "Driver unbind timeout!"); + igt_set_timeout(timeout, "Driver unbind timeout!"); igt_sysfs_set(priv->fd.sysfs_drv, "unbind", priv->dev_bus_addr); igt_reset_timeout(); } /* Re-bind the driver to the device */ -static void driver_bind(struct hotunplug *priv) +static void driver_bind(struct hotunplug *priv, int timeout) { igt_debug("rebinding the driver to the device\n"); priv->failure = "Driver re-bind failure!"; - igt_set_timeout(60, "Driver re-bind timeout!"); + igt_set_timeout(timeout, "Driver re-bind timeout!"); igt_sysfs_set(priv->fd.sysfs_drv, "bind", priv->dev_bus_addr); igt_reset_timeout(); } /* Remove (virtually unplug) the device from its bus */ -static void device_unplug(struct hotunplug *priv, const char *prefix) +static void device_unplug(struct hotunplug *priv, const char *prefix, + int timeout) { igt_require(priv->fd.sysfs_dev == -1); @@ -153,7 +155,7 @@ static void device_unplug(struct hotunplug *priv, const char *prefix) igt_debug("%sunplugging the device\n", prefix); priv->failure = "Device unplug failure!"; - igt_set_timeout(60, "Device unplug timeout!"); + igt_set_timeout(timeout, "Device unplug timeout!"); igt_sysfs_set(priv->fd.sysfs_dev, "remove", "1"); igt_reset_timeout(); @@ -162,12 +164,12 @@ static void device_unplug(struct hotunplug *priv, const char *prefix) } /* Re-discover the device by rescanning its bus */ -static void bus_rescan(struct hotunplug *priv) +static void bus_rescan(struct hotunplug *priv, int timeout) { igt_debug("rediscovering the device\n"); priv->failure = "Bus rescan failure!"; - igt_set_timeout(60, "Bus rescan timeout!"); + igt_set_timeout(timeout, "Bus rescan timeout!"); igt_sysfs_set(priv->fd.sysfs_bus, "../rescan", "1"); igt_reset_timeout(); } @@ -214,10 +216,10 @@ static void recover(struct hotunplug *priv) cleanup(priv); if (faccessat(priv->fd.sysfs_bus, priv->dev_bus_addr, F_OK, 0)) - bus_rescan(priv); + bus_rescan(priv, 60); else if (faccessat(priv->fd.sysfs_drv, priv->dev_bus_addr, F_OK, 0)) - driver_bind(priv); + driver_bind(priv, 60); if (priv->failure) healthcheck(priv); @@ -252,9 +254,9 @@ static void unbind_rebind(struct hotunplug *priv) { igt_assert_eq(priv->fd.drm, -1); - driver_unbind(priv, ""); + driver_unbind(priv, "", 0); - driver_bind(priv); + driver_bind(priv, 0); healthcheck(priv); } @@ -263,9 +265,9 @@ static void unplug_rescan(struct hotunplug *priv) { igt_assert_eq(priv->fd.drm, -1); - device_unplug(priv, ""); + device_unplug(priv, "", 0); - bus_rescan(priv); + bus_rescan(priv, 0); healthcheck(priv); } @@ -275,9 +277,9 @@ static void hotunbind_lateclose(struct hotunplug *priv) igt_assert_eq(priv->fd.drm, -1); priv->fd.drm = local_drm_open_driver("", " for hot unbind"); - driver_unbind(priv, "hot "); + driver_unbind(priv, "hot ", 0); - driver_bind(priv); + driver_bind(priv, 0); priv->fd.drm = close_device(priv->fd.drm, "late ", "unbound "); igt_assert_eq(priv->fd.drm, -1); @@ -290,9 +292,9 @@ static void hotunplug_lateclose(struct hotunplug *priv) igt_assert_eq(priv->fd.drm, -1); priv->fd.drm = local_drm_open_driver("", " for hot unplug"); - device_unplug(priv, "hot "); + device_unplug(priv, "hot ", 0); - bus_rescan(priv); + bus_rescan(priv, 0); priv->fd.drm = close_device(priv->fd.drm, "late ", "removed "); igt_assert_eq(priv->fd.drm, -1); -- 2.21.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev
next prev parent reply other threads:[~2020-09-11 10:31 UTC|newest] Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-11 10:30 [Intel-gfx] [PATCH i-g-t v6 00/24] tests/core_hotunplug: Fixes and enhancements Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 01/24] tests/core_hotunplug: Use igt_assert_fd() Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 02/24] tests/core_hotunplug: Constify dev_bus_addr string Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 03/24] tests/core_hotunplug: Clean up device open error handling Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 04/24] tests/core_hotunplug: Consolidate duplicated debug messages Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 05/24] tests/core_hotunplug: Assert successful device filter application Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 06/24] tests/core_hotunplug: Maintain a single data structure instance Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 07/24] tests/core_hotunplug: Pass errors via a data structure field Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 08/24] tests/core_hotunplug: Handle device close errors Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 09/24] tests/core_hotunplug: Prepare invariant data once per test run Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 10/24] tests/core_hotunplug: Skip selectively on sysfs close errors Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 11/24] tests/core_hotunplug: Recover from subtest failures Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 12/24] tests/core_hotunplug: Fail subtests on device close errors Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` Janusz Krzysztofik [this message] 2020-09-11 10:30 ` [igt-dev] [PATCH i-g-t v6 13/24] tests/core_hotunplug: Let the driver time out essential sysfs operations Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 14/24] tests/core_hotunplug: Process return values of " Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 15/24] tests/core_hotunplug: Assert expected device presence/absence Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 16/24] tests/core_hotunplug: Explicitly ignore unused return values Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 17/24] tests/core_hotunplug: Also check health of render device node Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 18/24] tests/core_hotunplug: More thorough i915 healthcheck and recovery Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 19/24] tests/core_hotunplug: Add 'lateclose before restore' variants Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 20/24] tests/core_hotunplug: Check health both before and after late close Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 21/24] tests/core_hotunplug: HSW/BDW audio issue workaround Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 12:22 ` [Intel-gfx] " Petri Latvala 2020-09-11 12:22 ` [igt-dev] " Petri Latvala 2020-09-11 13:15 ` [Intel-gfx] " Janusz Krzysztofik 2020-09-11 13:15 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 14:17 ` [Intel-gfx] " Petri Latvala 2020-09-11 14:17 ` [igt-dev] " Petri Latvala 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 22/24] tests/core_hotunplug: Duplicate debug messages in dmesg Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 23/24] tests/core_hotunplug: Un-blocklist *bind* subtests Janusz Krzysztofik 2020-09-11 11:51 ` Petri Latvala 2020-09-11 11:51 ` [igt-dev] " Petri Latvala 2020-09-11 12:00 ` [Intel-gfx] " Janusz Krzysztofik 2020-09-11 12:00 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 14:20 ` [Intel-gfx] " Petri Latvala 2020-09-11 14:20 ` [igt-dev] " Petri Latvala 2020-09-11 10:30 ` [Intel-gfx] [PATCH i-g-t v6 24/24] tests/core_hotunplug: Add unbind-rebind subtest to BAT scope Janusz Krzysztofik 2020-09-11 10:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 11:52 ` [Intel-gfx] " Petri Latvala 2020-09-11 11:52 ` [igt-dev] " Petri Latvala 2020-09-11 12:01 ` [Intel-gfx] " Janusz Krzysztofik 2020-09-11 12:01 ` [igt-dev] " Janusz Krzysztofik 2020-09-11 11:24 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/core_hotunplug: Fixes and enhancements (rev6) Patchwork 2020-09-11 14:18 ` Petri Latvala 2020-09-11 14:15 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 2020-09-14 18:18 ` [Intel-gfx] [PATCH i-g-t v6 00/24] tests/core_hotunplug: Fixes and enhancements Michał Winiarski 2020-09-14 18:18 ` [igt-dev] " Michał Winiarski 2020-09-14 19:30 ` Janusz Krzysztofik 2020-09-14 19:30 ` [igt-dev] " Janusz Krzysztofik 2020-09-14 20:43 ` Vudum, Lakshminarayana 2020-09-14 20:43 ` [igt-dev] " Vudum, Lakshminarayana 2020-09-15 7:47 ` Janusz Krzysztofik 2020-09-15 7:47 ` [igt-dev] " Janusz Krzysztofik 2020-09-15 15:39 ` Vudum, Lakshminarayana 2020-09-15 15:39 ` [igt-dev] " Vudum, Lakshminarayana 2020-09-16 7:59 ` Janusz Krzysztofik 2020-09-16 7:59 ` [igt-dev] " Janusz Krzysztofik
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=20200911103039.4574-14-janusz.krzysztofik@linux.intel.com \ --to=janusz.krzysztofik@linux.intel.com \ --cc=igt-dev@lists.freedesktop.org \ --cc=intel-gfx@lists.freedesktop.org \ --cc=michal.winiarski@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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.