PCI rerouting

Bjoern A. Zeeb bzeeb-lists at lists.zabbadoz.net
Fri Jan 16 12:30:14 PST 2004


Hi,

back last year I had trouble with some PCI rerouting:
http://lists.freebsd.org/pipermail/freebsd-current/2003-July/thread.html#7155

Noriyoshi Kawano came up with the attached patch but it hadn't been
committed because it was unknown why a kernel panic happens at boot
time.

Today I rebuilt a kernel from HEAD and still had trouble so the
tunable saved my weekend.

Can we somehow get this debugged and sorted out ?


--- compile-20040113-01/sys/dev/pci/pci.c.orig	Tue Jan 13 09:39:03 2004
+++ compile-20040113-01/sys/dev/pci/pci.c	Tue Jan 13 22:16:29 2004
@@ -173,6 +173,12 @@
 enable these bits correctly.  We'd like to do this all the time, but there\n\
 are some peripherals that this causes problems with.");

+static int pci_enable_rerouting = 1;
+TUNABLE_INT("hw.pci.enable_rerouting", (int *)&pci_enable_rerouting);
+SYSCTL_INT(_hw_pci, OID_AUTO, enable_rerouting, CTLFLAG_RW,
+    &pci_enable_rerouting, 1,
+    "Enable try to re-route interrupts.");
+
 /* Find a device_t by bus/slot/function */

 device_t
@@ -817,6 +823,9 @@

 	if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline)) {
 #if defined(__ia64__) || defined(__i386__) || defined(__amd64__)
+		if (!pci_enable_rerouting){
+			goto nottry;
+		}
 		/*
 		 * Try to re-route interrupts. Sometimes the BIOS or
 		 * firmware may leave bogus values in these registers.
@@ -828,6 +837,7 @@
 			pci_write_config(dev, PCIR_INTLINE, irq, 1);
 			cfg->intline = irq;
 		} else
+nottry:
 #endif
 			irq = cfg->intline;
 		resource_list_add(rl, SYS_RES_IRQ, 0, irq, irq, 1);

-- 
Bjoern A. Zeeb				bzeeb at Zabbadoz dot NeT
56 69 73 69 74				http://www.zabbadoz.net/


More information about the freebsd-current mailing list