fxp0: device timeout | SCB already complete.
Doug Ambrisko
ambrisko at ambrisko.com
Mon Jun 9 17:00:10 PDT 2003
Palle Girgensohn writes:
| Hi!
|
| When I run network backups, one of our FreeBSD machines (backup client) get
| NIC timeouts and warnings from the scsi driver:
|
| Jun 3 14:50:12 melon /kernel: fxp0: device timeout
| Jun 3 14:50:36 melon /kernel: fxp0: device timeout
| Jun 3 14:51:03 melon /kernel: fxp0: device timeout
| Jun 3 14:51:38 melon /kernel: fxp0: device timeout
| Jun 3 14:52:41 melon /kernel: ahc0: Timedout SCB already complete.
| Interrupts may not be functioning.
| Jun 3 14:53:12 melon /kernel: fxp0: device timeout
|
| Both machines are on a hubbed 100 Mbit/s half duplex network. Looking at
| the traffic with netstat -d 1, I see that as soon as the traffic increases,
| there is a timeout and traffic stops, after with the net is reachable
| again. This goes on and on. It only happens when there is much traffic on
| both NIC and SCSI, it seems (alas when running backups...)
|
| Since there was a second NIC, it tried connecting it to the server using
| that NIC through a switch, on a private network, but then the machine
| nearly crashed, or at least came to a grinding halt. It seems, as soon as I
| pulled the ethernet cable it came back. This happened without any backup
| running...
|
| To me, this sounds like some odd interrupt problem? It is a PCI machine
| with an Intel ?x440 (if memory serves me right) and dual CPUs 400 Mhz,
| running freebsd-4.7p2.
|
| Any ideas where to look, how to debug or what to do?
Try this:
diff -c -r1.1.1.2 -r1.3
*** if_fxp.c 28 May 2003 23:39:32 -0000 1.1.1.2
--- if_fxp.c 5 Jun 2003 02:10:23 -0000 1.3
***************
*** 574,579 ****
--- 579,610 ----
}
}
+ if (i == 0x1039 || i == 0x103A) {
+ fxp_read_eeprom(sc, &data, 13, 1);
+ if ((data & 0x0f) == 4) {
+ u_int16_t cksum;
+ int i;
+
+ device_printf(dev,
+ "Fix Tyan bug in EEPROM\n");
+ data = (data & 0xf0) + 0xf;
+ fxp_write_eeprom(sc, &data, 13, 1);
+ device_printf(dev, "New EEPROM ID: 0x%x\n", data);
+ cksum = 0;
+ for (i = 0; i < (1 << sc->eeprom_size) - 1; i++) {
+ fxp_read_eeprom(sc, &data, i, 1);
+ cksum += data;
+ }
+ i = (1 << sc->eeprom_size) - 1;
+ cksum = 0xBABA - cksum;
+ fxp_read_eeprom(sc, &data, i, 1);
+ fxp_write_eeprom(sc, &cksum, i, 1);
+ device_printf(dev,
+ "EEPROM checksum @ 0x%x: 0x%x -> 0x%x\n",
+ i, data, cksum);
+ }
+ }
+
/*
* If we are not a 82557 chip, we can enable extended features.
*/
For kicks. We had to do this on our motherboard. Don't know why. Couldn't
get an answer. I figured this out via a binary search of a good eeprom
contents and bad.
Note you have to boot the kernel twice or power off.
Your mileage may vary. Your machine could blow up etc. This is on a
Tyan 2099GNN board.
Doug A.
More information about the freebsd-net
mailing list