summaryrefslogtreecommitdiffstats
path: root/sys/pci
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>1998-05-26 23:42:24 +0000
committerwpaul <wpaul@FreeBSD.org>1998-05-26 23:42:24 +0000
commit39799063ce80a883cdb50c7f24b92ec7d2f13cd6 (patch)
tree175876d20f45e014d8f66b50a10d87752a59f58e /sys/pci
parentbc60c8025eefe519b725f9a4d278ec3e887f7e00 (diff)
downloadFreeBSD-src-39799063ce80a883cdb50c7f24b92ec7d2f13cd6.zip
FreeBSD-src-39799063ce80a883cdb50c7f24b92ec7d2f13cd6.tar.gz
Ignore 'invalid' interrupts that occur while the interface is down.
These are probably generated by other PCI devices sharing the TLAN's interrupt. The programmer's guide says to simply re-enable interrupts and return if one of these is detected. Prompted by bug report from: Bill Fenner
Diffstat (limited to 'sys/pci')
-rw-r--r--sys/pci/if_tl.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/pci/if_tl.c b/sys/pci/if_tl.c
index 24f1df6..2e908ca 100644
--- a/sys/pci/if_tl.c
+++ b/sys/pci/if_tl.c
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: if_tl.c,v 1.4 1998/05/22 15:32:22 wpaul Exp $
+ * $Id: if_tl.c,v 1.5 1998/05/24 00:56:49 wpaul Exp $
*/
/*
@@ -240,7 +240,7 @@
#ifndef lint
static char rcsid[] =
- "$Id: if_tl.c,v 1.4 1998/05/22 15:32:22 wpaul Exp $";
+ "$Id: if_tl.c,v 1.5 1998/05/24 00:56:49 wpaul Exp $";
#endif
/*
@@ -1978,6 +1978,16 @@ static void tl_intr(xilist)
* doesn't actually belong to us.
*/
if (ilist->tl_active_phy == TL_PHYS_IDLE) {
+ /*
+ * Exception: if this is an invalid interrupt,
+ * just re-enable interrupts and ignore it. Probably
+ * what's happened is that we got an interrupt meant
+ * for another PCI device that's sharing our IRQ.
+ */
+ if (ints == TL_INTR_INVALID) {
+ csr->tl_host_cmd |= type;
+ return;
+ }
printf("tlc%d: interrupt type %x with all phys idle\n",
ilist->tlc_unit, ints);
return;
OpenPOWER on IntegriCloud