Merge branch 'for-2.6.40/splice' of git://git.kernel.dk/linux-2.6-block
[firefly-linux-kernel-4.4.55.git] / drivers / staging / hv / hv_util.c
index 8038589e2c057e5defd54222f7a24f490770d127..c164b54b4cd774ee37b562315a91026088f62ff5 100644 (file)
 #include <linux/dmi.h>
 #include <linux/pci.h>
 
-#include "logging.h"
-#include "hv_api.h"
-#include "vmbus.h"
-#include "vmbus_packet_format.h"
-#include "vmbus_channel_interface.h"
-#include "version_info.h"
-#include "channel.h"
-#include "vmbus_private.h"
-#include "vmbus_api.h"
-#include "utils.h"
+#include "hyperv.h"
 #include "hv_kvp.h"
 
 static u8 *shut_txf_buf;
@@ -88,7 +79,7 @@ static void shutdown_onchannelcallback(void *context)
                                pr_info("Shutdown request received -"
                                            " Invalid request\n");
                                break;
-                       };
+                       }
                }
 
                icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION
@@ -265,22 +256,13 @@ static int __init init_hyperv_utils(void)
                return -ENOMEM;
        }
 
-       hv_cb_utils[HV_SHUTDOWN_MSG].channel->onchannel_callback =
-               &shutdown_onchannelcallback;
        hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback;
 
-       hv_cb_utils[HV_TIMESYNC_MSG].channel->onchannel_callback =
-               &timesync_onchannelcallback;
        hv_cb_utils[HV_TIMESYNC_MSG].callback = &timesync_onchannelcallback;
 
-       hv_cb_utils[HV_HEARTBEAT_MSG].channel->onchannel_callback =
-               &heartbeat_onchannelcallback;
        hv_cb_utils[HV_HEARTBEAT_MSG].callback = &heartbeat_onchannelcallback;
 
-       hv_cb_utils[HV_KVP_MSG].channel->onchannel_callback =
-               &hv_kvp_onchannelcallback;
-
-
+       hv_cb_utils[HV_KVP_MSG].callback = &hv_kvp_onchannelcallback;
 
        return 0;
 }
@@ -289,20 +271,26 @@ static void exit_hyperv_utils(void)
 {
        pr_info("De-Registered HyperV Utility Driver\n");
 
-       hv_cb_utils[HV_SHUTDOWN_MSG].channel->onchannel_callback =
-               &chn_cb_negotiate;
-       hv_cb_utils[HV_SHUTDOWN_MSG].callback = &chn_cb_negotiate;
+       if (hv_cb_utils[HV_SHUTDOWN_MSG].channel != NULL)
+               hv_cb_utils[HV_SHUTDOWN_MSG].channel->onchannel_callback =
+                       &chn_cb_negotiate;
+       hv_cb_utils[HV_SHUTDOWN_MSG].callback = NULL;
+
+       if (hv_cb_utils[HV_TIMESYNC_MSG].channel != NULL)
+               hv_cb_utils[HV_TIMESYNC_MSG].channel->onchannel_callback =
+                       &chn_cb_negotiate;
+       hv_cb_utils[HV_TIMESYNC_MSG].callback = NULL;
 
-       hv_cb_utils[HV_TIMESYNC_MSG].channel->onchannel_callback =
-               &chn_cb_negotiate;
-       hv_cb_utils[HV_TIMESYNC_MSG].callback = &chn_cb_negotiate;
+       if (hv_cb_utils[HV_HEARTBEAT_MSG].channel != NULL)
+               hv_cb_utils[HV_HEARTBEAT_MSG].channel->onchannel_callback =
+                       &chn_cb_negotiate;
+       hv_cb_utils[HV_HEARTBEAT_MSG].callback = NULL;
 
-       hv_cb_utils[HV_HEARTBEAT_MSG].channel->onchannel_callback =
-               &chn_cb_negotiate;
-       hv_cb_utils[HV_HEARTBEAT_MSG].callback = &chn_cb_negotiate;
+       if (hv_cb_utils[HV_KVP_MSG].channel != NULL)
+               hv_cb_utils[HV_KVP_MSG].channel->onchannel_callback =
+                       &chn_cb_negotiate;
+       hv_cb_utils[HV_KVP_MSG].callback = NULL;
 
-       hv_cb_utils[HV_KVP_MSG].channel->onchannel_callback =
-               &chn_cb_negotiate;
        hv_kvp_deinit();
 
        kfree(shut_txf_buf);