|
@@ -47,7 +47,6 @@ struct hv_bus {
|
|
|
struct tasklet_struct event_dpc;
|
|
|
};
|
|
|
|
|
|
-static void vmbus_shutdown(struct device *device);
|
|
|
|
|
|
static irqreturn_t vmbus_isr(int irq, void *dev_id);
|
|
|
|
|
@@ -276,6 +275,28 @@ static int vmbus_remove(struct device *child_device)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+/*
|
|
|
+ * vmbus_shutdown - Shutdown a vmbus device
|
|
|
+ */
|
|
|
+static void vmbus_shutdown(struct device *child_device)
|
|
|
+{
|
|
|
+ struct hv_driver *drv;
|
|
|
+
|
|
|
+
|
|
|
+ /* The device may not be attached yet */
|
|
|
+ if (!child_device->driver)
|
|
|
+ return;
|
|
|
+
|
|
|
+ drv = drv_to_hv_drv(child_device->driver);
|
|
|
+
|
|
|
+ /* Let the specific open-source driver handles the removal if it can */
|
|
|
+ if (drv->driver.shutdown)
|
|
|
+ drv->driver.shutdown(child_device);
|
|
|
+
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
/* The one and only one */
|
|
|
static struct hv_bus hv_bus = {
|
|
|
.bus.name = "vmbus",
|
|
@@ -804,27 +825,6 @@ void vmbus_child_device_unregister(struct hv_device *device_obj)
|
|
|
&device_obj->device);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * vmbus_shutdown - Shutdown a vmbus device
|
|
|
- */
|
|
|
-static void vmbus_shutdown(struct device *child_device)
|
|
|
-{
|
|
|
- struct hv_driver *drv;
|
|
|
-
|
|
|
-
|
|
|
- /* The device may not be attached yet */
|
|
|
- if (!child_device->driver)
|
|
|
- return;
|
|
|
-
|
|
|
- drv = drv_to_hv_drv(child_device->driver);
|
|
|
-
|
|
|
- /* Let the specific open-source driver handles the removal if it can */
|
|
|
- if (drv->driver.shutdown)
|
|
|
- drv->driver.shutdown(child_device);
|
|
|
-
|
|
|
- return;
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
/*
|
|
|
* vmbus_device_release - Final callback release of the vmbus child device
|