@@ -90,8 +90,11 @@ static void prepare(struct hotunplug *priv, char *buf, int buflen)
static const char *failure;
/* Unbind the driver from the device */
-static void driver_unbind(int fd_sysfs_drv, const char *dev_bus_addr)
+static void driver_unbind(int fd_sysfs_drv, const char *dev_bus_addr,
+ const char *prefix)
{
+ igt_debug("%sunbinding the driver from the device\n", prefix);
+
failure = "Driver unbind timeout!";
igt_set_timeout(60, failure);
igt_sysfs_set(fd_sysfs_drv, "unbind", dev_bus_addr);
@@ -104,6 +107,8 @@ static void driver_unbind(int fd_sysfs_drv, const char *dev_bus_addr)
/* Re-bind the driver to the device */
static void driver_bind(int fd_sysfs_drv, const char *dev_bus_addr)
{
+ igt_debug("rebinding the driver to the device\n");
+
failure = "Driver re-bind timeout!";
igt_set_timeout(60, failure);
igt_sysfs_set(fd_sysfs_drv, "bind", dev_bus_addr);
@@ -114,8 +119,10 @@ static void driver_bind(int fd_sysfs_drv, const char *dev_bus_addr)
}
/* Remove (virtually unplug) the device from its bus */
-static void device_unplug(int fd_sysfs_dev)
+static void device_unplug(int fd_sysfs_dev, const char *prefix)
{
+ igt_debug("%sunplugging the device\n", prefix);
+
failure = "Device unplug timeout!";
igt_set_timeout(60, failure);
igt_sysfs_set(fd_sysfs_dev, "device/remove", "1");
@@ -128,6 +135,8 @@ static void device_unplug(int fd_sysfs_dev)
/* Re-discover the device by rescanning its bus */
static void bus_rescan(int fd_sysfs_bus)
{
+ igt_debug("recovering the device\n");
+
failure = "Bus rescan timeout!";
igt_set_timeout(60, failure);
igt_sysfs_set(fd_sysfs_bus, "rescan", "1");
@@ -184,10 +193,8 @@ static void unbind_rebind(void)
igt_debug("closing the device\n");
close(priv.fd.drm);
- igt_debug("unbinding the driver from the device\n");
- driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr);
+ driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr, "");
- igt_debug("rebinding the driver to the device\n");
driver_bind(priv.fd.sysfs_drv, priv.dev_bus_addr);
healthcheck();
@@ -202,10 +209,8 @@ static void unplug_rescan(void)
igt_debug("closing the device\n");
close(priv.fd.drm);
- igt_debug("unplugging the device\n");
- device_unplug(priv.fd.sysfs_dev);
+ device_unplug(priv.fd.sysfs_dev, "");
- igt_debug("recovering the device\n");
bus_rescan(priv.fd.sysfs_bus);
healthcheck();
@@ -218,10 +223,8 @@ static void hotunbind_lateclose(void)
prepare(&priv, buf, sizeof(buf));
- igt_debug("hot unbinding the driver from the device\n");
- driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr);
+ driver_unbind(priv.fd.sysfs_drv, priv.dev_bus_addr, "hot ");
- igt_debug("rebinding the driver to the device\n");
driver_bind(priv.fd.sysfs_drv, priv.dev_bus_addr);
igt_debug("late closing the unbound device instance\n");
@@ -236,10 +239,8 @@ static void hotunplug_lateclose(void)
prepare(&priv, NULL, 0);
- igt_debug("hot unplugging the device\n");
- device_unplug(priv.fd.sysfs_dev);
+ device_unplug(priv.fd.sysfs_dev, "hot ");
- igt_debug("recovering the device\n");
bus_rescan(priv.fd.sysfs_bus);
igt_debug("late closing the removed device instance\n");