* retrieve the initialized message and event pages.  Otherwise, we create and
  * initialize the message and event pages.
  */
-void hv_synic_init(void *irqarg)
+void hv_synic_init(void *arg)
 {
        u64 version;
        union hv_synic_simp simp;
        union hv_synic_scontrol sctrl;
        u64 vp_index;
 
-       u32 irq_vector = *((u32 *)(irqarg));
        int cpu = smp_processor_id();
 
        if (!hv_context.hypercall_page)
        rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
        shared_sint.as_uint64 = 0;
-       shared_sint.vector = irq_vector; /* HV_SHARED_SINT_IDT_VECTOR + 0x20; */
+       shared_sint.vector = HYPERVISOR_CALLBACK_VECTOR;
        shared_sint.masked = false;
        shared_sint.auto_eoi = true;
 
 
 #include <linux/kernel_stat.h>
 #include <asm/hyperv.h>
 #include <asm/hypervisor.h>
+#include <asm/mshyperv.h>
 #include "hyperv_vmbus.h"
 
 
 static int vmbus_bus_init(int irq)
 {
        int ret;
-       unsigned int vector;
 
        /* Hypervisor initialization...setup hypercall page..etc */
        ret = hv_init();
         */
        irq_set_handler(irq, vmbus_flow_handler);
 
-       vector = IRQ0_VECTOR + irq;
+       /*
+        * Register our interrupt handler.
+        */
+       hv_register_vmbus_handler(irq, vmbus_isr);
 
        /*
-        * Notify the hypervisor of our irq and
+        * Initialize the per-cpu interrupt state and
         * connect to the host.
         */
-       on_each_cpu(hv_synic_init, (void *)&vector, 1);
+       on_each_cpu(hv_synic_init, NULL, 1);
        ret = vmbus_connect();
        if (ret)
                goto err_irq;