In preparation for modifying the util driver to fully conform to the
Linux Driver Model, perform some service specific de-initialization in
util_remove() as opposed to in exit_hyperv_utils() as is currently done.


Signed-off-by: K. Y. Srinivasan <[email protected]>
Signed-off-by: Haiyang Zhang <[email protected]>
---
 drivers/staging/hv/hv_util.c |   29 ++++++++++++++++++++++++-----
 1 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/hv/hv_util.c b/drivers/staging/hv/hv_util.c
index b86128a..2475ab2 100644
--- a/drivers/staging/hv/hv_util.c
+++ b/drivers/staging/hv/hv_util.c
@@ -291,6 +291,30 @@ error:
 static int util_remove(struct hv_device *dev,
                        const struct hv_vmbus_device_id *dev_id)
 {
+       int service = dev_id->driver_data;
+
+       switch (service) {
+       case HV_SHUTDOWN:
+               kfree(shut_txf_buf);
+               break;
+
+       case HV_TIMESYNC:
+               kfree(time_txf_buf);
+               break;
+
+       case HV_HEARTBEAT:
+               kfree(hbeat_txf_buf);
+               break;
+
+       case HV_KVP:
+               hv_kvp_deinit();
+               break;
+
+       default:
+               pr_err("unknown util service\n");
+               return -ENODEV;
+       }
+
        return 0;
 }
 
@@ -370,11 +394,6 @@ static void exit_hyperv_utils(void)
                        &chn_cb_negotiate;
        hv_cb_utils[HV_KVP_MSG].callback = NULL;
 
-       hv_kvp_deinit();
-
-       kfree(shut_txf_buf);
-       kfree(time_txf_buf);
-       kfree(hbeat_txf_buf);
        vmbus_driver_unregister(&util_drv);
 }
 
-- 
1.7.4.1

_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization

Reply via email to