From owner-freebsd-net@FreeBSD.ORG Thu Oct 13 21:02:59 2011 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B2D22106564A for ; Thu, 13 Oct 2011 21:02:59 +0000 (UTC) (envelope-from lacombar@gmail.com) Received: from mail-wy0-f182.google.com (mail-wy0-f182.google.com [74.125.82.182]) by mx1.freebsd.org (Postfix) with ESMTP id 487C88FC18 for ; Thu, 13 Oct 2011 21:02:58 +0000 (UTC) Received: by wyj26 with SMTP id 26so3318766wyj.13 for ; Thu, 13 Oct 2011 14:02:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=SgSaRNBvp/857XTjjABXSKxdBr9nvGN8/nOJA6VTUn4=; b=LFAS0Pum9djFl4KFksIWXqjTNNtHJ56lQBs3PbB/miDtSGr2XZ8ylJoUqg4JlW01wC 64tRizVemx74374jA8hGvRJuz2OZM7M6pruvfeXmo7HYY6rZltvFaTIbQpQzT+6De+o7 leZqEan4aOi0mgvz10JpKnzzhkucVmVoZWDus= MIME-Version: 1.0 Received: by 10.227.166.69 with SMTP id l5mr1807424wby.34.1318539778068; Thu, 13 Oct 2011 14:02:58 -0700 (PDT) Received: by 10.180.103.198 with HTTP; Thu, 13 Oct 2011 14:02:58 -0700 (PDT) In-Reply-To: <20111013204747.GA13219@michelle.cdnetworks.com> References: <4E94637A.5090607@gmail.com> <20111011171029.GA5661@michelle.cdnetworks.com> <4E959F06.6040906@gmail.com> <20111012170347.GA9138@michelle.cdnetworks.com> <4e969a67.YJyWMt0xI7pFL+xJ%perryh@pluto.rain.com> <20111013204747.GA13219@michelle.cdnetworks.com> Date: Thu, 13 Oct 2011 17:02:58 -0400 Message-ID: From: Arnaud Lacombe To: pyunyh@gmail.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: fodillemlinkarim@gmail.com, freebsd-net@freebsd.org, perryh@pluto.rain.com, kob6558@gmail.com Subject: Re: if_msk.c link negotiation / packet drops X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Oct 2011 21:02:59 -0000 Hi, On Thu, Oct 13, 2011 at 4:47 PM, YongHyeon PYUN wrote: > On Thu, Oct 13, 2011 at 12:59:35AM -0700, perryh@pluto.rain.com wrote: >> YongHyeon PYUN wrote: >> > On Wed, Oct 12, 2011 at 10:07:02AM -0400, Karim wrote: >> > > ... why are we ORing the same call twice isn't the same thing >> > > as calling it once: >> > > >> > > bmsr =3D PHY_READ(sc, E1000_SR) | PHY_READ(sc, E1000_SR); >> > >> > The E1000_SR_LINK_STATUS bit is latched low so it should be read >> > twice. >> >> It might not be a bad idea to check the generated code to be sure >> that the read _is_ being done twice. =A0An optimizer might well come >> to the same conclusion as Karim, and discard the "redundant" second >> instance (unless there's a "volatile" declaration somewhere in the >> expansion of PHY_READ, to explicitly indicate that it has side >> effects). > > Last time I checked it, compiler generated correct code. > Tried again on amd64 and I can still see the code is there. > What about other architecture (especially i386) ? which optimization level did you use ? which compiler version ? About the last question, I know for sure that there has been change in FreeBSD's gcc between 7-STABLE, and FreeBSD -CURRENT. I agree with perryh@ than such hardware requirement _requires_ being explicit in the code, ie proper `volatile' marking. - Arnaud