Date: Thu, 19 Oct 2006 00:30:41 -0600 From: Scott Long <scottl@samsco.org> To: Bruce Evans <bde@zeta.org.au> Cc: Kip Macy <kip.macy@gmail.com>, freebsd-net <freebsd-net@FreeBSD.org>, Jack Vogel <jfvogel@gmail.com>, Kris Kennaway <kris@obsecurity.org> Subject: Re: em network issues Message-ID: <45371B91.5090507@samsco.org> In-Reply-To: <20061019141748.Y76352@delplex.bde.org> References: <2a41acea0610181046k822afd1qcec4187dc8514187@mail.gmail.com> <b1fa29170610181523t6d240839i887632d6d7576762@mail.gmail.com> <2a41acea0610181531y732cd5sa7bf733cc445491c@mail.gmail.com> <20061018224233.GA1632@xor.obsecurity.org> <20061019110950.X75878@delplex.bde.org> <4536EF19.2060201@samsco.org> <20061019141748.Y76352@delplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Bruce Evans wrote: > On Wed, 18 Oct 2006, Scott Long wrote: > > [too much quoted; much deleted] > >> Bruce Evans wrote: >>> On Wed, 18 Oct 2006, Kris Kennaway wrote: >>> >>>> I have been working with someone's system that has em shared with fxp, >>>> and a simple fetch over the em (e.g. of a 10 GB file of zeroes) is >>>> enough to produce watchdog timeouts after a few seconds. >>>> >>>> As previously mentioned, changing the INTR_FAST to INTR_MPSAFE in the >>>> driver avoids this problem. However, others are seeing sporadic >>>> watchdog timeouts at higher system load on non-shared em systems too. >>> >>> em_intr_fast() has no locking whatsoever. I would be very surprised >>> if it even seemed to work for SMP. For UP, masking of CPU interrupts >>> (as is automatic in fast interrupt handlers) might provide sufficient >>> locking, ... > > I barely noticed the point about it being shared. With sharing, and > probably especially with fast and normal interrupt handlers sharing an > IRQ, locking is more needed. There are many possibilities for races. > One likely one is: > - em interrupt task running. Device interrupts are disabled, so the > task thinks it won't be interfered with by the em interrupt handler. What interference are you talking about? em_intr_fast changes no state in the driver softc (aside from the silly bookkeeping). It only reads from one register, and writes to no registers or shared memory. > - shared fxp interrupt. The em interrupt handler is called. Without > any explicit synchonization, bad things may happen and apparently do. > In the UP case, there is some implicit synchronization which may help > but is hard to understand. Can you be more specific as to the 'bad things'? Scott
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45371B91.5090507>