vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| If you have a system running the amd64 bsd.mp kernel could you please try out the diff below. Please provide me with a dmesg. ----- Forwarded message from Brad <brad@comstyle.com> ----- Date: Sat, 14 Jan 2006 18:05:18 -0500 From: Brad <brad@comstyle.com> To: hackers@openbsd.org Subject: amd64 ioapic interrupt routing diff User-Agent: Mutt/1.4.2i Please test this diff out on systems running the amd64 MP kernel whether it is truely MP or just a UP box. I ran into a problem on one of krw's VIA systems, the following NetBSD PR was very similar to his situation, though a different VIA chipset and amd64 instead of i386. The interrupt code is shared between i386/amd64 on NetBSD so I expected the same behavior. This diff does not fully resolve the issue on krw's system but it does allow his USB mouse to work for a very short period of time before the system again freezes where as without this it does not work at all. http://www.netbsd.org/cgi-bin/query-...l?number=22728 I have other things I am working on but the changes are much too invasive for the release and will require more extensive testing. Fix for ioapic irq routing. From NetBSD Index: intr.c ================================================== ================= RCS file: /cvs/src/sys/arch/amd64/amd64/intr.c,v retrieving revision 1.11 diff -u -p -r1.11 intr.c --- intr.c 25 Sep 2005 20:48:18 -0000 1.11 +++ intr.c 11 Jan 2006 00:52:20 -0000 @@ -266,6 +264,14 @@ intr_allocate_slot(struct pic *pic, int */ if (legacy_irq != -1) { ci = &cpu_info_primary; + /* must check for duplicate pic + pin first */ + for (slot = 0 ; slot < MAX_INTR_SOURCES ; slot++) { + isp = ci->ci_isources[slot]; + if (isp != NULL && isp->is_pic == pic && + isp->is_pin == pin ) { + goto duplicate; + } + } slot = legacy_irq; isp = ci->ci_isources[slot]; if (isp == NULL) { @@ -292,7 +298,7 @@ intr_allocate_slot(struct pic *pic, int goto other; } } - +duplicate: if (pic == &i8259_pic) idtvec = ICU_OFFSET + legacy_irq; else { ----- End forwarded message ----- |