Date: Wed, 1 Oct 2014 11:58:38 -0700 From: Adrian Chadd <adrian@freebsd.org> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-current <freebsd-current@freebsd.org> Subject: Re: [PATCH] Fix OACTIVE for an(4) Message-ID: <CAJ-VmomwiRRfHAGMn6onqQMXBEze40Nmyqya-5v8wMgZFC7iBg@mail.gmail.com> In-Reply-To: <2113392.UOaBFTpimf@ralph.baldwin.cx> References: <2113392.UOaBFTpimf@ralph.baldwin.cx>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, On 1 October 2014 07:14, John Baldwin <jhb@freebsd.org> wrote: > This small patch correctly sets OACTIVE when an(4) gets backed up. Right now > I believe it will never set the flag. It is only an optimization, it should > not affect correctness. > > Index: an/if_an.c > =================================================================== > --- an/if_an.c (revision 270968) > +++ an/if_an.c (working copy) > @@ -2906,11 +2906,11 @@ > CSR_WRITE_2(sc, AN_INT_EN(sc->mpi350), AN_INTRS(sc->mpi350)); > } > > - if (m0 != NULL) > + if (sc->an_rdata.an_tx_prod != idx) { > ifp->if_drv_flags |= IFF_DRV_OACTIVE; > + sc->an_rdata.an_tx_prod = idx; > + } > > - sc->an_rdata.an_tx_prod = idx; > - > return; > } I haven't looked at the rest of the driver; is everything else around OACTIVE locked correctly and consistently? There's no single-entry into if_start(). It can be called from multiple paths at the same time. -a
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmomwiRRfHAGMn6onqQMXBEze40Nmyqya-5v8wMgZFC7iBg>