summaryrefslogtreecommitdiff
path: root/tests/core_hotunplug.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/core_hotunplug.c')
-rw-r--r--tests/core_hotunplug.c38
1 files 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);