From 4924d0c18b2148400d16fcce4fa4daf4a922819b Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Tue, 15 Mar 2011 15:03:34 -0700 Subject: [PATCH] --- yaml --- r: 248905 b: refs/heads/master c: 52e5c1cec89879bd64eb4e681b4cb1525eabb472 h: refs/heads/master i: 248903: 3f7c0f44b31a20d454d3e395ce512ee3aedde13d v: v3 --- [refs] | 2 +- trunk/drivers/staging/hv/vmbus_drv.c | 28 +++++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index d58f2fb7f984..d59a3c384b1d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 800b6902fdc86f48f39c1db8fb2ec2116058a1c7 +refs/heads/master: 52e5c1cec89879bd64eb4e681b4cb1525eabb472 diff --git a/trunk/drivers/staging/hv/vmbus_drv.c b/trunk/drivers/staging/hv/vmbus_drv.c index 3d2789b4c8c8..239b91ce8d35 100644 --- a/trunk/drivers/staging/hv/vmbus_drv.c +++ b/trunk/drivers/staging/hv/vmbus_drv.c @@ -17,6 +17,8 @@ * Authors: * Haiyang Zhang * Hank Janssen + * + * 3/9/2011: K. Y. Srinivasan - Significant restructuring and cleanup */ #include #include @@ -36,10 +38,6 @@ #include "vmbus_private.h" -/* FIXME! We need to do this dynamically for PIC and APIC system */ -#define VMBUS_IRQ 0x5 -#define VMBUS_IRQ_VECTOR IRQ5_VECTOR - struct pci_dev *hv_pci_dev; /* Main vmbus driver data structure */ @@ -69,7 +67,6 @@ EXPORT_SYMBOL(vmbus_loglevel); /* (ALL_MODULES << 16 | DEBUG_LVL_ENTEREXIT); */ /* (((VMBUS | VMBUS_DRV)<<16) | DEBUG_LVL_ENTEREXIT); */ -static int vmbus_irq = VMBUS_IRQ; /* Set up per device attributes in /sys/bus/vmbus/devices/ */ static struct device_attribute vmbus_device_attrs[] = { @@ -369,7 +366,7 @@ static ssize_t vmbus_show_device_attr(struct device *dev, * - get the irq resource * - retrieve the channel offers */ -static int vmbus_bus_init(void) +static int vmbus_bus_init(struct pci_dev *pdev) { struct vmbus_driver_context *vmbus_drv_ctx = &vmbus_drv; int ret; @@ -412,21 +409,23 @@ static int vmbus_bus_init(void) } /* Get the interrupt resource */ - ret = request_irq(vmbus_irq, vmbus_isr, IRQF_SAMPLE_RANDOM, - driver_name, NULL); + ret = request_irq(pdev->irq, vmbus_isr, + IRQF_SHARED | IRQF_SAMPLE_RANDOM, + driver_name, pdev); if (ret != 0) { DPRINT_ERR(VMBUS_DRV, "ERROR - Unable to request IRQ %d", - vmbus_irq); + pdev->irq); bus_unregister(&vmbus_drv_ctx->bus); ret = -1; goto cleanup; } - vector = VMBUS_IRQ_VECTOR; - DPRINT_INFO(VMBUS_DRV, "irq 0x%x vector 0x%x", vmbus_irq, vector); + vector = IRQ0_VECTOR + pdev->irq; + DPRINT_INFO(VMBUS_DRV, "irq 0x%x vector 0x%x", pdev->irq, + vector); /* * Notify the hypervisor of our irq and @@ -435,7 +434,7 @@ static int vmbus_bus_init(void) on_each_cpu(hv_synic_init, (void *)&vector, 1); ret = vmbus_connect(); if (ret) { - free_irq(vmbus_irq, NULL); + free_irq(pdev->irq, pdev); bus_unregister(&vmbus_drv_ctx->bus); goto cleanup; } @@ -466,7 +465,7 @@ static void vmbus_bus_exit(void) bus_unregister(&vmbus_drv_ctx->bus); - free_irq(vmbus_irq, NULL); + free_irq(hv_pci_dev->irq, hv_pci_dev); tasklet_kill(&vmbus_drv_ctx->msg_dpc); tasklet_kill(&vmbus_drv_ctx->event_dpc); @@ -878,7 +877,7 @@ static int __devinit hv_pci_probe(struct pci_dev *pdev, if (err) return err; - err = vmbus_bus_init(); + err = vmbus_bus_init(pdev); if (err) pci_disable_device(pdev); @@ -918,7 +917,6 @@ static void __exit hv_pci_exit(void) MODULE_LICENSE("GPL"); MODULE_VERSION(HV_DRV_VERSION); -module_param(vmbus_irq, int, S_IRUGO); module_param(vmbus_loglevel, int, S_IRUGO); module_init(hv_pci_init);