diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2011-02-18 11:43:36 -0500 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-03-10 14:44:44 -0500 |
commit | ca1d8fe9521fb67c95cfa736c08f4bbbc282b5bd (patch) | |
tree | 48b7664b99186bdd29399a5818d348df4f78221d /drivers/xen/events.c | |
parent | f420e010edd84eb2c237fc87b7451e69740fed46 (diff) |
xen: events: use xen_bind_pirq_msi_to_irq from xen_create_msi_irq
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 77ede77a9ee9..34469489087b 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -662,7 +662,7 @@ int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc) | |||
662 | } | 662 | } |
663 | 663 | ||
664 | int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, | 664 | int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, |
665 | int pirq, const char *name) | 665 | int pirq, int vector, const char *name) |
666 | { | 666 | { |
667 | int irq, ret; | 667 | int irq, ret; |
668 | 668 | ||
@@ -675,7 +675,7 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, | |||
675 | set_irq_chip_and_handler_name(irq, &xen_pirq_chip, | 675 | set_irq_chip_and_handler_name(irq, &xen_pirq_chip, |
676 | handle_level_irq, name); | 676 | handle_level_irq, name); |
677 | 677 | ||
678 | irq_info[irq] = mk_pirq_info(0, pirq, 0, 0); | 678 | irq_info[irq] = mk_pirq_info(0, pirq, 0, vector); |
679 | pirq_to_irq[pirq] = irq; | 679 | pirq_to_irq[pirq] = irq; |
680 | ret = set_irq_msi(irq, msidesc); | 680 | ret = set_irq_msi(irq, msidesc); |
681 | if (ret < 0) | 681 | if (ret < 0) |
@@ -691,7 +691,6 @@ error_irq: | |||
691 | 691 | ||
692 | int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type) | 692 | int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type) |
693 | { | 693 | { |
694 | int ret, irq = -1; | ||
695 | struct physdev_map_pirq map_irq; | 694 | struct physdev_map_pirq map_irq; |
696 | int rc; | 695 | int rc; |
697 | int pos; | 696 | int pos; |
@@ -719,34 +718,13 @@ int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type) | |||
719 | rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq); | 718 | rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq); |
720 | if (rc) { | 719 | if (rc) { |
721 | dev_warn(&dev->dev, "xen map irq failed %d\n", rc); | 720 | dev_warn(&dev->dev, "xen map irq failed %d\n", rc); |
722 | goto out; | 721 | return -1; |
723 | } | 722 | } |
724 | 723 | ||
725 | spin_lock(&irq_mapping_update_lock); | 724 | return xen_bind_pirq_msi_to_irq(dev, msidesc, |
726 | 725 | map_irq.pirq, map_irq.index, | |
727 | irq = xen_allocate_irq_dynamic(); | 726 | (type == PCI_CAP_ID_MSIX) ? |
728 | 727 | "msi-x" : "msi"); | |
729 | if (irq == -1) | ||
730 | goto out; | ||
731 | |||
732 | irq_info[irq] = mk_pirq_info(0, map_irq.pirq, 0, map_irq.index); | ||
733 | pirq_to_irq[map_irq.pirq] = irq; | ||
734 | |||
735 | set_irq_chip_and_handler_name(irq, &xen_pirq_chip, | ||
736 | handle_level_irq, | ||
737 | (type == PCI_CAP_ID_MSIX) ? "msi-x":"msi"); | ||
738 | |||
739 | ret = set_irq_msi(irq, msidesc); | ||
740 | if (ret) | ||
741 | goto out_irq; | ||
742 | |||
743 | out: | ||
744 | spin_unlock(&irq_mapping_update_lock); | ||
745 | return irq; | ||
746 | out_irq: | ||
747 | spin_unlock(&irq_mapping_update_lock); | ||
748 | xen_free_irq(irq); | ||
749 | return -1; | ||
750 | } | 728 | } |
751 | #endif | 729 | #endif |
752 | 730 | ||