Unix Technical Forum

amd64 ioapic interrupt routing diff

This is a discussion on amd64 ioapic interrupt routing diff within the mailing.openbsd.tech forums, part of the OpenBSD category; --> If you have a system running the amd64 bsd.mp kernel could you please try out the diff below. Please ...


Go Back   Unix Technical Forum > Unix Operating Systems > OpenBSD > mailing.openbsd.tech

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 02-18-2008, 08:17 AM
Brad
 
Posts: n/a
Default amd64 ioapic interrupt routing diff

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 -----

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 12:26 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com