Received: by oss.sgi.com id ; Sun, 2 Apr 2000 04:44:23 -0700 Received: from smtprtp1.ntcom.nortel.net ([137.118.22.14]:60877 "EHLO smtprtp1.ntcom.nortel.net") by oss.sgi.com with ESMTP id ; Sun, 2 Apr 2000 04:44:01 -0700 Received: from zsngd101.asiapac.nortel.com (actually znsgd101) by smtprtp1.ntcom.nortel.net; Sun, 2 Apr 2000 07:43:34 -0400 Received: from zctwb003.asiapac.nortel.com ([47.152.32.111]) by zsngd101.asiapac.nortel.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) id 2BF0CDPW; Sun, 2 Apr 2000 19:43:30 +0800 Received: from pwold011.asiapac.nortel.com ([47.181.193.45]) by zctwb003.asiapac.nortel.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) id HNN1JNZ6; Sun, 2 Apr 2000 21:43:33 +1000 Received: from uow.edu.au (IDENT:akpm@[47.181.207.103]) by pwold011.asiapac.nortel.com (8.9.3/8.9.3) with ESMTP id VAA23399 for ; Sun, 2 Apr 2000 21:43:30 +1000 Message-ID: <38E73398.E1727365@uow.edu.au> Date: Sun, 02 Apr 2000 11:48:40 +0000 X-Sybari-Space: 00000000 00000000 00000000 From: Andrew Morton X-Mailer: Mozilla 4.61 [en] (X11; I; Linux 2.2.13-7mdk i586) X-Accept-Language: en MIME-Version: 1.0 To: netdev Subject: coverage Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-netdev@oss.sgi.com Precedence: bulk Return-Path: X-Orcpt: rfc822;netdev-outgoing How do you guys test things like: - max_interrupt_work exceeded - Tx stuck, invoke tx_timeout - All the possible error conditions like rxearly, receiver overrun, etc, etc. My approach to the first two was to put a 5 mSec delay in boomerang_rx(), decrease max_interrupt_work to 5 and ping flood it. This produces some pretty ugly results. Most of the time the packet dumping code: if ((status & (0x7fe - (UpComplete | DownComplete))) == 0) { /* Just ack these and return. */ outw(AckIntr | UpComplete | DownComplete, ioaddr + EL3_CMD); works just fine. But just occasionally this test doesn't return true and we fall into: printk(KERN_WARNING "%s: Too much work in interrupt, status " "%4.4x. Temporarily disabling functions (%4.4x).\n", dev->name, status, SetStatusEnb | ((~status) & 0x7FE)); /* Disable all pending interrupts. */ outw(SetStatusEnb | ((~status) & 0x7FE), ioaddr + EL3_CMD); outw(AckIntr | 0x7FF, ioaddr + EL3_CMD); /* The timer will reenable interrupts. */ break; and all hell breaks loose. Very occasionally the tx_timeout will do the right thing, but most of the time the ISR is invoked (possibly for Tx - I haven't checked). Within the ISR the following test: if (status & RxComplete) vortex_rx(dev); returns true. We enter vortex_rx()! But this is with 3c905B hardware. vortex_rx() doesn't talk to 3c905's and it loops infinitely. I don't want to blow more time on this corner case if there is a better way to exercise this code. Of course, my testing methods could be causing the above problems to occur... -- -akpm- "Excellent. If it will not panic here, your kernel will be destroyed secretly and fatally" - Alexey K