All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Bshara, Saeed" <saeedb@amazon.com>
To: Liran Alon <liran.alon@oracle.com>,
	"Machulsky, Zorik" <zorik@amazon.com>
Cc: "Belgazal, Netanel" <netanel@amazon.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"Jubran, Samih" <sameehj@amazon.com>,
	"Chauskin, Igor" <igorch@amazon.com>,
	"Kiyanovski, Arthur" <akiyano@amazon.com>,
	"Schmeilin, Evgeny" <evgenys@amazon.com>,
	"Tzalik, Guy" <gtzalik@amazon.com>,
	"Dagan, Noam" <ndagan@amazon.com>,
	"Matushevsky, Alexander" <matua@amazon.com>,
	"Pressman, Gal" <galpress@amazon.com>,
	"Håkon Bugge" <haakon.bugge@oracle.com>
Subject: Re: [PATCH 2/2] net: AWS ENA: Flush WCBs before writing new SQ tail to doorbell
Date: Sun, 5 Jan 2020 09:53:34 +0000	[thread overview]
Message-ID: <1578218014463.62861@amazon.com> (raw)
In-Reply-To: <2BB3E76D-CAF7-4539-A8E3-540CDB253742@amazon.com>


Thanks Liran,

I think we missed the payload visibility; The LLQ descriptor contains the header part of the packet, in theory we will need also to make sure that all cpu writes to the packet payload are visible to the device, I bet that in practice those stores will be visible without explicit barrier, but we better stick to the rules.
so we still need dma_wmb(), also, that means the first patch can't simply remove the wmb() as it actually may be taking care for the payload visibility.

saeed

From: Machulsky, Zorik
Sent: Saturday, January 4, 2020 6:55 AM
To: Liran Alon
Cc: Belgazal, Netanel; davem@davemloft.net; netdev@vger.kernel.org; Bshara, Saeed; Jubran, Samih; Chauskin, Igor; Kiyanovski, Arthur; Schmeilin, Evgeny; Tzalik, Guy; Dagan, Noam; Matushevsky, Alexander; Pressman, Gal; Håkon Bugge
Subject: Re: [PATCH 2/2] net: AWS ENA: Flush WCBs before writing new SQ tail to doorbell
    


On 1/3/20, 1:47 PM, "Liran Alon" <liran.alon@oracle.com> wrote:

    
    
    > On 2 Jan 2020, at 20:08, Liran Alon <liran.alon@oracle.com> wrote:
    > 
    > AWS ENA NIC supports Tx SQ in Low Latency Queue (LLQ) mode (Also
    > referred to as "push-mode"). In this mode, the driver pushes the
    > transmit descriptors and the first 128 bytes of the packet directly
    > to the ENA device memory space, while the rest of the packet payload
    > is fetched by the device from host memory. For this operation mode,
    > the driver uses a dedicated PCI BAR which is mapped as WC memory.
    > 
    > The function ena_com_write_bounce_buffer_to_dev() is responsible
    > to write to the above mentioned PCI BAR.
    > 
    > When the write of new SQ tail to doorbell is visible to device, device
    > expects to be able to read relevant transmit descriptors and packets
    > headers from device memory. Therefore, driver should ensure
    > write-combined buffers (WCBs) are flushed before the write to doorbell
    > is visible to the device.
    > 
    > For some CPUs, this will be taken care of by writel(). For example,
    > x86 Intel CPUs flushes write-combined buffers when a read or write
    > is done to UC memory (In our case, the doorbell). See Intel SDM section
    > 11.3 METHODS OF CACHING AVAILABLE:
    > "If the WC buffer is partially filled, the writes may be delayed until
    > the next occurrence of a serializing event; such as, an SFENCE or MFENCE
    > instruction, CPUID execution, a read or write to uncached memory, an
    > interrupt occurrence, or a LOCK instruction execution.”
    > 
    > However, other CPUs do not provide this guarantee. For example, x86
    > AMD CPUs flush write-combined buffers only on a read from UC memory.
    > Not a write to UC memory. See AMD Software Optimisation Guide for AMD
    > Family 17h Processors section 2.13.3 Write-Combining Operations.
    
    Actually... After re-reading AMD Optimization Guide SDM, I see it is guaranteed that:
    “Write-combining is closed if all 64 bytes of the write buffer are valid”.
    And this is indeed always the case for AWS ENA LLQ. Because as can be seen at
    ena_com_config_llq_info(), desc_list_entry_size is either 128, 192 or 256. i.e. Always
    a multiple of 64 bytes.
    
    So this patch in theory could maybe be dropped as for x86 Intel & AMD and ARM64 with
    current desc_list_entry_size, it isn’t strictly necessary to guarantee that WC buffers are flushed.
    
    I will let AWS folks to decide if they prefer to apply this patch anyway to make WC flush explicit
    and to avoid hard-to-debug issues in case of new non-64-multiply size appear in the future. Or
    to drop this patch and instead add a WARN_ON() to ena_com_config_llq_info() in case desc_list_entry_size
    is not a multiple of 64 bytes. To avoid taking perf hit for no real value.
  
Liran, thanks for this important info. If this is the case, I believe we should drop this patch as it introduces unnecessary branch
in data path. Agree with your WARN_ON() suggestion. 
  
    -Liran
    
    

    

  reply	other threads:[~2020-01-05  9:57 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-02 18:08 [PATCH 0/2] net: AWS ENA: Fix memory barrier usage when using LLQ Liran Alon
2020-01-02 18:08 ` [PATCH 1/2] net: AWS ENA: Remove unncessary wmb() to flush bounce buffer Liran Alon
2020-01-17 15:54   ` Liran Alon
2020-01-02 18:08 ` [PATCH 2/2] net: AWS ENA: Flush WCBs before writing new SQ tail to doorbell Liran Alon
2020-01-03 18:46   ` Liran Alon
2020-01-04  4:55     ` Machulsky, Zorik
2020-01-05  9:53       ` Bshara, Saeed [this message]
2020-01-05 10:22         ` Liran Alon
2020-01-05 11:49           ` Bshara, Saeed

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=1578218014463.62861@amazon.com \
    --to=saeedb@amazon.com \
    --cc=akiyano@amazon.com \
    --cc=davem@davemloft.net \
    --cc=evgenys@amazon.com \
    --cc=galpress@amazon.com \
    --cc=gtzalik@amazon.com \
    --cc=haakon.bugge@oracle.com \
    --cc=igorch@amazon.com \
    --cc=liran.alon@oracle.com \
    --cc=matua@amazon.com \
    --cc=ndagan@amazon.com \
    --cc=netanel@amazon.com \
    --cc=netdev@vger.kernel.org \
    --cc=sameehj@amazon.com \
    --cc=zorik@amazon.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.