Commit 71eef7d1e3d9df760897fdd2cad6949a8bcf1620

Authored by Ian Campbell
Committed by Konrad Rzeszutek Wilk
1 parent ca1d8fe952

xen: events: remove dom0 specific xen_create_msi_irq

The function name does not distinguish it from xen_allocate_pirq_msi
(which operates on domU and pvhvm domains rather than dom0).

Hoist domain 0 specific functionality up into the only caller leaving
functionality common to all guest types in xen_bind_pirq_msi_to_irq.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

Showing 3 changed files with 40 additions and 47 deletions Side-by-side Diff

... ... @@ -185,15 +185,50 @@
185 185 #ifdef CONFIG_XEN_DOM0
186 186 static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
187 187 {
188   - int irq;
  188 + int ret = 0;
189 189 struct msi_desc *msidesc;
190 190  
191 191 list_for_each_entry(msidesc, &dev->msi_list, list) {
192   - irq = xen_create_msi_irq(dev, msidesc, type);
193   - if (irq < 0)
194   - return -1;
  192 + struct physdev_map_pirq map_irq;
  193 +
  194 + memset(&map_irq, 0, sizeof(map_irq));
  195 + map_irq.domid = DOMID_SELF;
  196 + map_irq.type = MAP_PIRQ_TYPE_MSI;
  197 + map_irq.index = -1;
  198 + map_irq.pirq = -1;
  199 + map_irq.bus = dev->bus->number;
  200 + map_irq.devfn = dev->devfn;
  201 +
  202 + if (type == PCI_CAP_ID_MSIX) {
  203 + int pos;
  204 + u32 table_offset, bir;
  205 +
  206 + pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
  207 +
  208 + pci_read_config_dword(dev, pos + PCI_MSIX_TABLE,
  209 + &table_offset);
  210 + bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK);
  211 +
  212 + map_irq.table_base = pci_resource_start(dev, bir);
  213 + map_irq.entry_nr = msidesc->msi_attrib.entry_nr;
  214 + }
  215 +
  216 + ret = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
  217 + if (ret) {
  218 + dev_warn(&dev->dev, "xen map irq failed %d\n", ret);
  219 + goto out;
  220 + }
  221 +
  222 + ret = xen_bind_pirq_msi_to_irq(dev, msidesc,
  223 + map_irq.pirq, map_irq.index,
  224 + (type == PCI_CAP_ID_MSIX) ?
  225 + "msi-x" : "msi");
  226 + if (ret < 0)
  227 + goto out;
195 228 }
196   - return 0;
  229 + ret = 0;
  230 +out:
  231 + return ret;
197 232 }
198 233 #endif
199 234 #endif
drivers/xen/events.c
... ... @@ -644,9 +644,6 @@
644 644 }
645 645  
646 646 #ifdef CONFIG_PCI_MSI
647   -#include <linux/msi.h>
648   -#include "../pci/msi.h"
649   -
650 647 int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc)
651 648 {
652 649 int rc;
... ... @@ -687,44 +684,6 @@
687 684 spin_unlock(&irq_mapping_update_lock);
688 685 xen_free_irq(irq);
689 686 return -1;
690   -}
691   -
692   -int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type)
693   -{
694   - struct physdev_map_pirq map_irq;
695   - int rc;
696   - int pos;
697   - u32 table_offset, bir;
698   -
699   - memset(&map_irq, 0, sizeof(map_irq));
700   - map_irq.domid = DOMID_SELF;
701   - map_irq.type = MAP_PIRQ_TYPE_MSI;
702   - map_irq.index = -1;
703   - map_irq.pirq = -1;
704   - map_irq.bus = dev->bus->number;
705   - map_irq.devfn = dev->devfn;
706   -
707   - if (type == PCI_CAP_ID_MSIX) {
708   - pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
709   -
710   - pci_read_config_dword(dev, msix_table_offset_reg(pos),
711   - &table_offset);
712   - bir = (u8)(table_offset & PCI_MSIX_FLAGS_BIRMASK);
713   -
714   - map_irq.table_base = pci_resource_start(dev, bir);
715   - map_irq.entry_nr = msidesc->msi_attrib.entry_nr;
716   - }
717   -
718   - rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);
719   - if (rc) {
720   - dev_warn(&dev->dev, "xen map irq failed %d\n", rc);
721   - return -1;
722   - }
723   -
724   - return xen_bind_pirq_msi_to_irq(dev, msidesc,
725   - map_irq.pirq, map_irq.index,
726   - (type == PCI_CAP_ID_MSIX) ?
727   - "msi-x" : "msi");
728 687 }
729 688 #endif
730 689  
include/xen/events.h
... ... @@ -78,7 +78,6 @@
78 78 int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc);
79 79 int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
80 80 int pirq, int vector, const char *name);
81   -int xen_create_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int type);
82 81 #endif
83 82  
84 83 /* De-allocates the above mentioned physical interrupt. */