Index: uspace/drv/bus/usb/xhci/bus.c
===================================================================
--- uspace/drv/bus/usb/xhci/bus.c	(revision 98689823c5474679b501bff9fd0ebf3c81fac00f)
+++ uspace/drv/bus/usb/xhci/bus.c	(revision a3044b414267e474d1d1d8154cf82ce42ea0d017)
@@ -188,4 +188,12 @@
 	xhci_device_t *xhci_dev = xhci_device_get(dev);
 
+	/* If the device is still attached, end DDF drivers gracefully. */
+	if (!xhci_dev->detached) {
+		if ((err = ddf_fun_offline(dev->fun))) {
+			usb_log_warning("Failed to offline DDF function of device '%s': %s",
+			    ddf_fun_get_name(dev->fun), str_error(err));
+		}
+	}
+
 	/* Block creation of new endpoints and transfers. */
 	usb_log_debug2("Device '%s' going offline.", ddf_fun_get_name(dev->fun));
@@ -215,5 +223,5 @@
 	/* Make DDF (and all drivers) forget about the device. */
 	if ((err = ddf_fun_unbind(dev->fun))) {
-		usb_log_warning("Failed to unbind DDF function of detached device '%s': %s",
+		usb_log_warning("Failed to unbind DDF function of device '%s': %s",
 		    ddf_fun_get_name(dev->fun), str_error(err));
 	}
@@ -222,5 +230,5 @@
 	if (!xhci_dev->detached) {
 		if ((err = hc_deconfigure_device(hc, xhci_dev->slot_id))) {
-			usb_log_warning("Failed to deconfigure detached device '%s': %s",
+			usb_log_warning("Failed to deconfigure device '%s': %s",
 			    ddf_fun_get_name(dev->fun), str_error(err));
 		}
