Date: Wed, 17 Feb 2010 21:19:11 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r204013 - in releng/7.3/sys: amd64/amd64 i386/i386 Message-ID: <201002172119.o1HLJB27059921@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jhb Date: Wed Feb 17 21:19:10 2010 New Revision: 204013 URL: http://svn.freebsd.org/changeset/base/204013 Log: Fix a bug where MSI interrupts on x86 were always routed to APIC ID 0 rather than the APIC ID of the boot CPU prior to SI_SUB_SMP. This resulted in some storage controllers not being able to enumerate attached devices when using MSI/MSI-X interrupts. This only affects <= 7.x, so it is a direct commit to 7.3 rather than an MFC. Approved by: re (kib) Modified: releng/7.3/sys/amd64/amd64/msi.c releng/7.3/sys/i386/i386/msi.c Modified: releng/7.3/sys/amd64/amd64/msi.c ============================================================================== --- releng/7.3/sys/amd64/amd64/msi.c Wed Feb 17 21:17:54 2010 (r204012) +++ releng/7.3/sys/amd64/amd64/msi.c Wed Feb 17 21:19:10 2010 (r204013) @@ -321,6 +321,7 @@ again: for (i = 0; i < count; i++) { msi = (struct msi_intsrc *)intr_lookup_source(irqs[i]); msi->msi_dev = dev; + msi->msi_cpu = PCPU_GET(apic_id); msi->msi_vector = vector + i; if (bootverbose) printf("msi: routing MSI IRQ %d to vector %u\n", @@ -477,6 +478,7 @@ again: /* Setup source. */ msi->msi_dev = dev; msi->msi_vector = vector; + msi->msi_cpu = PCPU_GET(apic_id); msi->msi_msix = 1; KASSERT(msi->msi_intsrc.is_handlers == 0, ("dead MSI-X has handlers")); Modified: releng/7.3/sys/i386/i386/msi.c ============================================================================== --- releng/7.3/sys/i386/i386/msi.c Wed Feb 17 21:17:54 2010 (r204012) +++ releng/7.3/sys/i386/i386/msi.c Wed Feb 17 21:19:10 2010 (r204013) @@ -321,6 +321,7 @@ again: for (i = 0; i < count; i++) { msi = (struct msi_intsrc *)intr_lookup_source(irqs[i]); msi->msi_dev = dev; + msi->msi_cpu = PCPU_GET(apic_id); msi->msi_vector = vector + i; if (bootverbose) printf("msi: routing MSI IRQ %d to vector %u\n", @@ -477,6 +478,7 @@ again: /* Setup source. */ msi->msi_dev = dev; msi->msi_vector = vector; + msi->msi_cpu = PCPU_GET(apic_id); msi->msi_msix = 1; KASSERT(msi->msi_intsrc.is_handlers == 0, ("dead MSI-X has handlers"));
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002172119.o1HLJB27059921>