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 | |
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>
-rw-r--r-- | arch/x86/pci/xen.c | 4 | ||||
-rw-r--r-- | drivers/xen/events.c | 36 | ||||
-rw-r--r-- | include/xen/events.h | 2 |
3 files changed, 10 insertions, 32 deletions
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 15fd981d35f1..ffd8c7a2cdbb 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -106,7 +106,7 @@ static int xen_hvm_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
106 | dev_dbg(&dev->dev, | 106 | dev_dbg(&dev->dev, |
107 | "xen: msi already bound to pirq=%d\n", pirq); | 107 | "xen: msi already bound to pirq=%d\n", pirq); |
108 | } | 108 | } |
109 | irq = xen_bind_pirq_msi_to_irq(dev, msidesc, pirq, | 109 | irq = xen_bind_pirq_msi_to_irq(dev, msidesc, pirq, 0, |
110 | (type == PCI_CAP_ID_MSIX) ? | 110 | (type == PCI_CAP_ID_MSIX) ? |
111 | "msi-x" : "msi"); | 111 | "msi-x" : "msi"); |
112 | if (irq < 0) | 112 | if (irq < 0) |
@@ -145,7 +145,7 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
145 | goto error; | 145 | goto error; |
146 | i = 0; | 146 | i = 0; |
147 | list_for_each_entry(msidesc, &dev->msi_list, list) { | 147 | list_for_each_entry(msidesc, &dev->msi_list, list) { |
148 | irq = xen_bind_pirq_msi_to_irq(dev, msidesc, v[i], | 148 | irq = xen_bind_pirq_msi_to_irq(dev, msidesc, v[i], 0, |
149 | (type == PCI_CAP_ID_MSIX) ? | 149 | (type == PCI_CAP_ID_MSIX) ? |
150 | "pcifront-msi-x" : | 150 | "pcifront-msi-x" : |
151 | "pcifront-msi"); | 151 | "pcifront-msi"); |
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 | ||
diff --git a/include/xen/events.h b/include/xen/events.h index 18bf825bac66..45c08a0d580a 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
@@ -77,7 +77,7 @@ int xen_map_pirq_gsi(unsigned pirq, unsigned gsi, int shareable, char *name); | |||
77 | #ifdef CONFIG_PCI_MSI | 77 | #ifdef CONFIG_PCI_MSI |
78 | int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc); | 78 | int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc); |
79 | int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, | 79 | int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, |
80 | int pirq, const char *name); | 80 | int pirq, int vector, const char *name); |
81 | int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type); | 81 | int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type); |
82 | #endif | 82 | #endif |
83 | 83 | ||