From: Sepherosa Ziehau Date: Sun, 25 Dec 2011 10:38:25 +0000 (+0800) Subject: msi/pci: Pass cpuid to pcib_map_msi method X-Git-Tag: v3.0.0~261 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/0af900e14c83e113e920bae4181c63def9297a35 msi/pci: Pass cpuid to pcib_map_msi method --- diff --git a/sys/bus/pci/pci.c b/sys/bus/pci/pci.c index 360534bdd7..573951838f 100644 --- a/sys/bus/pci/pci.c +++ b/sys/bus/pci/pci.c @@ -1957,7 +1957,7 @@ pci_remap_msi_irq(device_t dev, u_int irq) i + 1); if (rle->start == irq) { error = PCIB_MAP_MSI(device_get_parent(bus), - dev, irq, &addr, &data); + dev, irq, &addr, &data, -1 /* XXX */); if (error) return (error); pci_disable_msi(dev); @@ -1980,7 +1980,7 @@ pci_remap_msi_irq(device_t dev, u_int irq) mv = &cfg->msix.msix_vectors[i]; if (mv->mv_irq == irq) { error = PCIB_MAP_MSI(device_get_parent(bus), - dev, irq, &addr, &data); + dev, irq, &addr, &data, -1 /* XXX */); if (error) return (error); mv->mv_address = addr; @@ -3199,7 +3199,8 @@ pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, KASSERT(dinfo->cfg.msi.msi_handlers == 0, ("MSI has handlers, but vectors not mapped")); error = PCIB_MAP_MSI(device_get_parent(dev), - child, rman_get_start(irq), &addr, &data); + child, rman_get_start(irq), &addr, &data, + rman_get_cpuid(irq)); if (error) goto bad; dinfo->cfg.msi.msi_addr = addr; @@ -3221,7 +3222,8 @@ pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, KASSERT(mte->mte_handlers == 0, ("MSI-X table entry has handlers, but vector not mapped")); error = PCIB_MAP_MSI(device_get_parent(dev), - child, rman_get_start(irq), &addr, &data); + child, rman_get_start(irq), &addr, &data, + rman_get_cpuid(irq)); if (error) goto bad; mv->mv_address = addr; diff --git a/sys/bus/pci/pci_pci.c b/sys/bus/pci/pci_pci.c index a10baa8a8d..b3fbfda50b 100644 --- a/sys/bus/pci/pci_pci.c +++ b/sys/bus/pci/pci_pci.c @@ -644,13 +644,14 @@ pcib_release_msix(device_t pcib, device_t dev, int irq) /* Pass request to map MSI/MSI-X message up to parent bridge. */ int pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, - uint32_t *data) + uint32_t *data, int cpuid) { device_t bus; int error; bus = device_get_parent(pcib); - error = PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data); + error = PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data, + cpuid); if (error) return (error); diff --git a/sys/bus/pci/pcib_if.m b/sys/bus/pci/pcib_if.m index f2e1e208ab..1c653ee24d 100644 --- a/sys/bus/pci/pcib_if.m +++ b/sys/bus/pci/pcib_if.m @@ -145,4 +145,5 @@ METHOD int map_msi { int irq; uint64_t *addr; uint32_t *data; + int cpuid; }; diff --git a/sys/bus/pci/pcib_private.h b/sys/bus/pci/pcib_private.h index aab5807928..f996c91778 100644 --- a/sys/bus/pci/pcib_private.h +++ b/sys/bus/pci/pcib_private.h @@ -81,6 +81,6 @@ int pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *i int pcib_release_msi(device_t pcib, device_t dev, int count, int *irqs, int cpuid); int pcib_alloc_msix(device_t pcib, device_t dev, int *irq); int pcib_release_msix(device_t pcib, device_t dev, int irq); -int pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data); +int pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data, int cpuid); #endif diff --git a/sys/bus/pci/x86_64/mptable_pci.c b/sys/bus/pci/x86_64/mptable_pci.c index c24f8ffc8a..d8cbd0d16f 100644 --- a/sys/bus/pci/x86_64/mptable_pci.c +++ b/sys/bus/pci/x86_64/mptable_pci.c @@ -124,12 +124,13 @@ mptable_hostb_alloc_msix(device_t pcib, device_t dev, int *irq) static int mptable_hostb_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, - uint32_t *data) + uint32_t *data, int cpuid) { device_t bus; bus = device_get_parent(pcib); - return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data)); + return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data, + cpuid)); } static device_method_t mptable_hostb_methods[] = { diff --git a/sys/bus/pci/x86_64/pci_bus.c b/sys/bus/pci/x86_64/pci_bus.c index 88279e3365..906dd9740a 100644 --- a/sys/bus/pci/x86_64/pci_bus.c +++ b/sys/bus/pci/x86_64/pci_bus.c @@ -98,12 +98,13 @@ legacy_pcib_alloc_msix(device_t pcib, device_t dev, int *irq) static int legacy_pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, - uint32_t *data) + uint32_t *data, int cpuid) { device_t bus; bus = device_get_parent(pcib); - return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data)); + return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data, + cpuid)); } static const char * diff --git a/sys/dev/acpica5/acpi_pcib_acpi.c b/sys/dev/acpica5/acpi_pcib_acpi.c index f9a1e58cb1..bfb37b9ca6 100644 --- a/sys/dev/acpica5/acpi_pcib_acpi.c +++ b/sys/dev/acpica5/acpi_pcib_acpi.c @@ -76,7 +76,7 @@ static int acpi_pcib_acpi_route_interrupt(device_t pcib, static int acpi_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs, int cpuid); static int acpi_pcib_map_msi(device_t pcib, device_t dev, - int irq, uint64_t *addr, uint32_t *data); + int irq, uint64_t *addr, uint32_t *data, int cpuid); static int acpi_pcib_alloc_msix(device_t pcib, device_t dev, int *irq); static struct resource *acpi_pcib_acpi_alloc_resource(device_t dev, @@ -349,12 +349,13 @@ acpi_pcib_alloc_msix(device_t pcib, device_t dev, int *irq) static int acpi_pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, - uint32_t *data) + uint32_t *data, int cpuid) { device_t bus; bus = device_get_parent(pcib); - return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data)); + return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data, + cpuid)); } static u_long acpi_host_mem_start = 0x80000000;