diff options
author | mav <mav@FreeBSD.org> | 2009-06-15 13:47:49 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-06-15 13:47:49 +0000 |
commit | c4234dfc7eb9855be96c4fc7f7b6ab1dc5274b13 (patch) | |
tree | 18c6a630c0cb43a9a423e1fbb62a505e5c6dd323 /sys/i386 | |
parent | cf1afc177475da72b2247c2c7cdcd6f65e8f2ea7 (diff) | |
download | FreeBSD-src-c4234dfc7eb9855be96c4fc7f7b6ab1dc5274b13.zip FreeBSD-src-c4234dfc7eb9855be96c4fc7f7b6ab1dc5274b13.tar.gz |
Forbid multi-vector MSI interrupt vectors migration to another CPU once
allocated. MSI have strict vectors allocation requirements, which are not
satisfied now during reallocation. This is not the best possible solution,
but better then just broken, as it was.
No objections: current@, arch@, jhb@
Diffstat (limited to 'sys/i386')
-rw-r--r-- | sys/i386/i386/msi.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/i386/i386/msi.c b/sys/i386/i386/msi.c index 8b18a10..e42f3d1 100644 --- a/sys/i386/i386/msi.c +++ b/sys/i386/i386/msi.c @@ -210,6 +210,8 @@ msi_assign_cpu(struct intsrc *isrc, u_int apic_id) old_id = msi->msi_cpu; if (old_vector && old_id == apic_id) return; + if (old_vector && !msi->msi_msix && msi->msi_first->msi_count > 1) + return; /* Allocate IDT vector on this cpu. */ vector = apic_alloc_vector(apic_id, msi->msi_irq); if (vector == 0) |