Author: hselasky
Date: Mon Dec 19 15:35:05 2011
New Revision: 228711
URL: http://svn.freebsd.org/changeset/base/228711

Log:
  Add code to wait for USB shutdown to be executed at system shutdown.
  Add sysctl which can be used to skip this waiting.
  
  MFC after:    3 days

Modified:
  head/sys/dev/usb/controller/usb_controller.c

Modified: head/sys/dev/usb/controller/usb_controller.c
==============================================================================
--- head/sys/dev/usb/controller/usb_controller.c        Mon Dec 19 14:55:14 
2011        (r228710)
+++ head/sys/dev/usb/controller/usb_controller.c        Mon Dec 19 15:35:05 
2011        (r228711)
@@ -87,7 +87,12 @@ SYSCTL_INT(_hw_usb_ctrl, OID_AUTO, debug
 static int usb_no_boot_wait = 0;
 TUNABLE_INT("hw.usb.no_boot_wait", &usb_no_boot_wait);
 SYSCTL_INT(_hw_usb, OID_AUTO, no_boot_wait, CTLFLAG_RDTUN, &usb_no_boot_wait, 
0,
-    "No device enumerate waiting at boot.");
+    "No USB device enumerate waiting at boot.");
+
+static int usb_no_shutdown_wait = 0;
+TUNABLE_INT("hw.usb.no_shutdown_wait", &usb_no_shutdown_wait);
+SYSCTL_INT(_hw_usb, OID_AUTO, no_shutdown_wait, CTLFLAG_RDTUN, 
&usb_no_shutdown_wait, 0,
+    "No USB device waiting at system shutdown.");
 
 static devclass_t usb_devclass;
 
@@ -277,11 +282,20 @@ usb_shutdown(device_t dev)
                return (0);
        }
 
+       device_printf(bus->bdev, "Controller shutdown\n");
+
        USB_BUS_LOCK(bus);
        usb_proc_msignal(&bus->explore_proc,
            &bus->shutdown_msg[0], &bus->shutdown_msg[1]);
+       if (usb_no_shutdown_wait == 0) {
+               /* wait for shutdown callback to be executed */
+               usb_proc_mwait(&bus->explore_proc,
+                   &bus->shutdown_msg[0], &bus->shutdown_msg[1]);
+       }
        USB_BUS_UNLOCK(bus);
 
+       device_printf(bus->bdev, "Controller shutdown complete\n");
+
        return (0);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to