diff options
author | wpaul <wpaul@FreeBSD.org> | 1998-05-26 23:42:24 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 1998-05-26 23:42:24 +0000 |
commit | 39799063ce80a883cdb50c7f24b92ec7d2f13cd6 (patch) | |
tree | 175876d20f45e014d8f66b50a10d87752a59f58e /sys | |
parent | bc60c8025eefe519b725f9a4d278ec3e887f7e00 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/pci/if_tl.c | 14 |
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; |