Index: kern/subr_bus.c =================================================================== --- kern/subr_bus.c (revision 196841) +++ kern/subr_bus.c (working copy) @@ -2625,16 +2625,10 @@ { int error; - if (dev->state >= DS_ATTACHING) - return (0); device_sysctl_init(dev); if (!device_is_quiet(dev)) device_print_child(dev->parent, dev); - dev->state = DS_ATTACHING; if ((error = DEVICE_ATTACH(dev)) != 0) { - KASSERT(dev->state == DS_ATTACHING, - ("%s: %p device state must not been changing", __func__, - dev)); printf("device_attach: %s%d attach returned %d\n", dev->driver->name, dev->unit, error); /* Unset the class; set in device_probe_child */ @@ -2645,8 +2639,6 @@ dev->state = DS_NOTPRESENT; return (error); } - KASSERT(dev->state == DS_ATTACHING, - ("%s: %p device state must not been changing", __func__, dev)); device_sysctl_update(dev); dev->state = DS_ATTACHED; devadded(dev); @@ -2682,16 +2674,10 @@ if (dev->state != DS_ATTACHED) return (0); - dev->state = DS_DETACHING; if ((error = DEVICE_DETACH(dev)) != 0) { - KASSERT(dev->state == DS_DETACHING, - ("%s: %p device state must not been changing", __func__, - dev)); dev->state = DS_ATTACHED; return (error); } - KASSERT(dev->state == DS_DETACHING, - ("%s: %p device state must not been changing", __func__, dev)); devremoved(dev); if (!device_is_quiet(dev)) device_printf(dev, "detached\n"); @@ -2746,7 +2732,7 @@ int device_shutdown(device_t dev) { - if (dev->state < DS_ATTACHED || dev->state == DS_DETACHING) + if (dev->state < DS_ATTACHED) return (0); return (DEVICE_SHUTDOWN(dev)); } Index: sys/bus.h =================================================================== --- sys/bus.h (revision 196841) +++ sys/bus.h (working copy) @@ -50,13 +50,11 @@ * @brief State of the device. */ typedef enum device_state { - DS_NOTPRESENT, /**< @brief not probed or probe failed */ - DS_ALIVE, /**< @brief probe succeeded */ - DS_ATTACHING, /**< @brief attaching is in progress */ - DS_ATTACHED, /**< @brief attach method called */ - DS_BUSY, /**< @brief device is open */ - DS_DETACHING /**< @brief detaching is in progress */ - + DS_NOTPRESENT = 0, /**< @brief not probed or probe failed */ + DS_ALIVE = 10, /**< @brief probe succeeded */ + DS_TRANSITION = 20, /**< @brief de/attaching in progress */ + DS_ATTACHED = 30, /**< @brief attach method called */ + DS_BUSY = 40, /**< @brief device is open */ } device_state_t; /**