提交 686c0940 编写于 作者: L Linus Torvalds

Merge tag 'char-misc-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc patch from Greg Kroah-Hartman:
 "Here is one remaining patch for 3.9-rc1.  It is for the hyper-v
  drivers, and had to wait until some other patches went in through the
  x86 tree."
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>

* tag 'char-misc-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  Drivers: hv: vmbus: Use the new infrastructure for delivering VMBUS interrupts
...@@ -318,7 +318,7 @@ static u32 get_vp_index(uuid_le *type_guid) ...@@ -318,7 +318,7 @@ static u32 get_vp_index(uuid_le *type_guid)
return 0; return 0;
} }
cur_cpu = (++next_vp % max_cpus); cur_cpu = (++next_vp % max_cpus);
return 0; return cur_cpu;
} }
/* /*
......
...@@ -272,7 +272,7 @@ u16 hv_signal_event(void *con_id) ...@@ -272,7 +272,7 @@ u16 hv_signal_event(void *con_id)
* retrieve the initialized message and event pages. Otherwise, we create and * retrieve the initialized message and event pages. Otherwise, we create and
* initialize the message and event pages. * initialize the message and event pages.
*/ */
void hv_synic_init(void *irqarg) void hv_synic_init(void *arg)
{ {
u64 version; u64 version;
union hv_synic_simp simp; union hv_synic_simp simp;
...@@ -281,7 +281,6 @@ void hv_synic_init(void *irqarg) ...@@ -281,7 +281,6 @@ void hv_synic_init(void *irqarg)
union hv_synic_scontrol sctrl; union hv_synic_scontrol sctrl;
u64 vp_index; u64 vp_index;
u32 irq_vector = *((u32 *)(irqarg));
int cpu = smp_processor_id(); int cpu = smp_processor_id();
if (!hv_context.hypercall_page) if (!hv_context.hypercall_page)
...@@ -335,7 +334,7 @@ void hv_synic_init(void *irqarg) ...@@ -335,7 +334,7 @@ void hv_synic_init(void *irqarg)
rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64); rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
shared_sint.as_uint64 = 0; 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.masked = false;
shared_sint.auto_eoi = true; shared_sint.auto_eoi = true;
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <asm/hyperv.h> #include <asm/hyperv.h>
#include <asm/hypervisor.h> #include <asm/hypervisor.h>
#include <asm/mshyperv.h>
#include "hyperv_vmbus.h" #include "hyperv_vmbus.h"
...@@ -528,7 +529,6 @@ static void vmbus_flow_handler(unsigned int irq, struct irq_desc *desc) ...@@ -528,7 +529,6 @@ static void vmbus_flow_handler(unsigned int irq, struct irq_desc *desc)
static int vmbus_bus_init(int irq) static int vmbus_bus_init(int irq)
{ {
int ret; int ret;
unsigned int vector;
/* Hypervisor initialization...setup hypercall page..etc */ /* Hypervisor initialization...setup hypercall page..etc */
ret = hv_init(); ret = hv_init();
...@@ -558,13 +558,16 @@ static int vmbus_bus_init(int irq) ...@@ -558,13 +558,16 @@ static int vmbus_bus_init(int irq)
*/ */
irq_set_handler(irq, vmbus_flow_handler); 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. * connect to the host.
*/ */
on_each_cpu(hv_synic_init, (void *)&vector, 1); on_each_cpu(hv_synic_init, NULL, 1);
ret = vmbus_connect(); ret = vmbus_connect();
if (ret) if (ret)
goto err_irq; goto err_irq;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册