From owner-freebsd-bugs Tue Aug 21 9:40: 7 2001 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id EC89037B408 for ; Tue, 21 Aug 2001 09:40:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.4/8.11.4) id f7LGe1E82143; Tue, 21 Aug 2001 09:40:01 -0700 (PDT) (envelope-from gnats) Date: Tue, 21 Aug 2001 09:40:01 -0700 (PDT) Message-Id: <200108211640.f7LGe1E82143@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org Cc: From: Warner Losh Subject: Re: kern/29845: 4.4-PRERELEASE crashes under heavy net I/O Reply-To: Warner Losh Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org The following reply was made to PR kern/29845; it has been noted by GNATS. From: Warner Losh To: Ian Dowse Cc: Andre Albsmeier , freebsd-gnats-submit@FreeBSD.org Subject: Re: kern/29845: 4.4-PRERELEASE crashes under heavy net I/O Date: Tue, 21 Aug 2001 10:33:13 -0600 In message <200108211713.aa61585@salmon.maths.tcd.ie> Ian Dowse writes: : No, I was confused when I suggested this to you :-) It is too late : when pcic_pci_intr() is called, because at that point a critical : section of some network code has already been interrupted. Once a : NIC has registered a net interrupt on IRQ X, splimp() should mask : IRQ X, but here the pcic code never changes the interrupt mask when : a NIC registers its interrupt. Lightbulb. I completely understand now. NEWCARD has exactly the same problem. : When the pccard NIC sets up its interrupt, it needs to go through : all the mask adjustment behind bus_generic_setup_intr() to ensure : that the first splimp() call above actually blocks the pcic interrupts : too. That's why I'm suggesting using bus_generic_setup_intr() either : within or instead of pcic_pci_setup_intr(). I think we need to use it within pcic_pci_setup_intr so our own function gets called and we only call the ISR if the card is in place. My splhigh() changes have 0 chance of working. Warner To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message