From owner-p4-projects@FreeBSD.ORG Wed Aug 6 10:37:38 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1EC6137B405; Wed, 6 Aug 2003 10:37:38 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B1E2337B401 for ; Wed, 6 Aug 2003 10:37:36 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3EEF143F93 for ; Wed, 6 Aug 2003 10:37:36 -0700 (PDT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h76Hba0U061571 for ; Wed, 6 Aug 2003 10:37:36 -0700 (PDT) (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h76HbZvf061568 for perforce@freebsd.org; Wed, 6 Aug 2003 10:37:35 -0700 (PDT) Date: Wed, 6 Aug 2003 10:37:35 -0700 (PDT) Message-Id: <200308061737.h76HbZvf061568@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 35635 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Aug 2003 17:37:39 -0000 http://perforce.freebsd.org/chv.cgi?CH=35635 Change 35635 by sam@sam_ebb on 2003/08/06 10:37:15 Close a race where ath_intr is installed and may be called before the HAL is setup: use sc_invalid to discard such entries into ath_intr. This can easily happen if the device is assigned a shared IRQ. Affected files ... .. //depot/projects/netperf/sys/dev/ath/if_ath.c#4 edit .. //depot/projects/netperf/sys/dev/ath/if_ath_pci.c#2 edit Differences ... ==== //depot/projects/netperf/sys/dev/ath/if_ath.c#4 (text+ko) ==== @@ -199,6 +199,7 @@ goto bad; } sc->sc_ah = ah; + sc->sc_invalid = 0; /* ready to go, enable interrupt handling */ /* * Collect the channel list using the default country @@ -372,8 +373,8 @@ if (sc->sc_invalid) { /* - * The hardware is gone, don't touch anything. - * XXX can this happen? + * The hardware is not ready/present, don't touch anything. + * Note this can happen early on if the IRQ is shared. */ DPRINTF(("ath_intr: invalid; ignored\n")); return; ==== //depot/projects/netperf/sys/dev/ath/if_ath_pci.c#2 (text+ko) ==== @@ -152,6 +152,11 @@ } sc->sc_st = rman_get_bustag(psc->sc_sr); sc->sc_sh = rman_get_bushandle(psc->sc_sr); + /* + * Mark device invalid so any interrupts (shared or otherwise) + * that arrive before the HAL is setup are discarded. + */ + sc->sc_invalid = 1; /* * Arrange interrupt line.