From: Sinan Kaya <okaya@codeaurora.org>
To: "Elior, Ariel" <Ariel.Elior@cavium.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"timur@codeaurora.org" <timur@codeaurora.org>,
"sulrich@codeaurora.org" <sulrich@codeaurora.org>
Cc: "linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Dept-Eng Everest Linux L2 <Dept-EngEverestLinuxL2@cavium.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v7 3/7] bnx2x: Replace doorbell barrier() with wmb()
Date: Thu, 29 Mar 2018 09:45:38 -0400 [thread overview]
Message-ID: <d3ef68c2-bf18-9bc8-76ce-8077f3987189@codeaurora.org> (raw)
In-Reply-To: <CY1PR0701MB133742146E2848330CA89FB290A20@CY1PR0701MB1337.namprd07.prod.outlook.com>
Hi Ariel,
On 3/29/2018 5:17 AM, Elior, Ariel wrote:
>> Subject: [PATCH v7 3/7] bnx2x: Replace doorbell barrier() with wmb()
>>
>> barrier() doesn't guarantee memory writes to be observed by the hardware on
>> all architectures. barrier() only tells compiler not to move this code
>> with respect to other read/writes.
>>
>> If memory write needs to be observed by the HW, wmb() is the right choice.
> The wmb() is there (a couple of lines above). Your modification adds an
> unnecessary fence which would hurt high pps scenarios. The memory
> writes which the HW needs to observe are the buffer descriptors, not the
> producer update message. The producer is written to the HW, and exists
> on the stack. The barrier() is there to prevent the compiler from mixing the
> order of the prod update message preparation and writing it to the host.
> A possible alternative would be to move the existing wmb() to where
> the barrier() is, achieving both goals, although in the existing design each
> barrier has a distinct purpose. The comment location is misleading, though.
I was told that barrier() is there to guarantee that HW is observing the memory
write before writel().
I reacted to this and changed barrier() to wmb() following the old directions.
You are saying that this not true.
Since then, Linus gave us direction not to have wmb() in front of writel() as
writel() already has memory-IO guarantee.
https://www.mail-archive.com/netdev@vger.kernel.org/msg225806.html
I'll be doing one more pass to remove wmb() before writel() soon. Please review
that carefully.
Intel drivers use wmb() as a substitute for smp_wmb(). So, we can't always assume
that you can remove all wmb() in front of writel() as the write barrier seems to
serve dual purpose.
Please help me getting this right on the next version.
Sinan
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
next prev parent reply other threads:[~2018-03-29 13:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-25 14:39 [PATCH v7 0/7] netdev: Eliminate duplicate barriers on weakly-ordered archs Sinan Kaya
2018-03-25 14:39 ` [PATCH v7 1/7] net: qla3xxx: " Sinan Kaya
2018-03-25 14:39 ` [PATCH v7 2/7] qlcnic: " Sinan Kaya
2018-03-25 14:39 ` [PATCH v7 3/7] bnx2x: Replace doorbell barrier() with wmb() Sinan Kaya
2018-03-29 9:17 ` Elior, Ariel
2018-03-29 13:45 ` Sinan Kaya [this message]
2018-03-25 14:39 ` [PATCH v7 4/7] bnx2x: Eliminate duplicate barriers on weakly-ordered archs Sinan Kaya
2018-03-25 14:39 ` [PATCH v7 5/7] net: qlge: " Sinan Kaya
2018-03-25 14:39 ` [PATCH v7 6/7] bnxt_en: " Sinan Kaya
2018-03-25 20:24 ` Michael Chan
2018-03-25 14:39 ` [PATCH v7 7/7] net: ena: " Sinan Kaya
2018-03-26 16:48 ` [PATCH v7 0/7] netdev: " David Miller
2018-03-27 12:40 ` Sinan Kaya
2018-03-27 14:00 ` David Miller
2018-03-27 14:02 ` Sinan Kaya
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d3ef68c2-bf18-9bc8-76ce-8077f3987189@codeaurora.org \
--to=okaya@codeaurora.org \
--cc=Ariel.Elior@cavium.com \
--cc=Dept-EngEverestLinuxL2@cavium.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=sulrich@codeaurora.org \
--cc=timur@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).