From: "Steve Wise" <swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
To: 'Jason Gunthorpe'
<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>,
linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: RE: [PATCH rdma-core 02/14] Provide new names for the CPU barriers related to DMA
Date: Thu, 16 Feb 2017 16:07:54 -0600 [thread overview]
Message-ID: <067401d288a1$1f90c820$5eb25860$@opengridcomputing.com> (raw)
In-Reply-To: <1487272989-8215-3-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
>
> Broadly speaking, providers are not using the existing macros
> consistently and the existing macros are very poorly defined.
>
> Due to this poor definition we struggled to implement a sensible
> barrier for ARM64 and just went with the strongest barriers instead.
>
> Split wmb/wmb_wc into several cases:
> udma_to_device_barrier - Think dma_map(TO_DEVICE) in kernel terms
> udma_ordering_write_barrier - Weaker than wmb() in the kernel
> mmio_flush_writes - Special to help work with WC memory
> mmio_wc_start - Special to help work with WC memory
I think you left out the mmio_wc_start() implementation?
> mmio_ordered_writes_hack - Stand in for lack an ordered writel()
>
> rmb becomes:
> udma_from_device_barrier - Think dmap_unamp(FROM_DEVICE) in kernel terms
>
> The split forces provider authors to think about what they are doing more
> carefully and the comments provide a solid explanation for when the barrier
> is actually supposed to be used and when to use it with the common idioms
> all drivers seem to have.
>
> NOTE: do not assume that the existing asm optimally implements the defined
> semantics. The required semantics were derived primarily from what the
> existing providers do.
>
> Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
> ---
> util/udma_barrier.h | 107
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 107 insertions(+)
>
> diff --git a/util/udma_barrier.h b/util/udma_barrier.h
> index 57ab0f76cbe33e..f9b8291db20210 100644
> --- a/util/udma_barrier.h
> +++ b/util/udma_barrier.h
> @@ -122,4 +122,111 @@
>
> #endif
>
> +/* Barriers for DMA.
> +
> + These barriers are expliclty only for use with user DMA operations. If you
> + are looking for barriers to use with cache-coherent multi-threaded
> + consitency then look in stdatomic.h. If you need both kinds of
synchronicity
> + for the same address then use an atomic operation followed by one
> + of these barriers.
> +
> + When reasoning about these barriers there are two objects:
> + - CPU attached address space (the CPU memory could be a range of things:
> + cached/uncached/non-temporal CPU DRAM, uncached MMIO space in
> another
> + device, pMEM). Generally speaking the ordering is only relative
> + to the local CPU's view of the system. Eg if the local CPU
> + is not guarenteed to see a write from another CPU then it is also
> + OK for the DMA device to also not see the write after the barrier.
> + - A DMA initiator on a bus. For instance a PCI-E device issuing
> + MemRd/MemWr TLPs.
> +
> + The ordering guarentee is always stated between those two streams. Eg what
> + happens if a MemRd TLP is sent in via PCI-E relative to a CPU WRITE to the
> + same memory location.
> +*/
> +
> +/* Ensure that the device's view of memory matches the CPU's view of memory.
> + This should be placed before any MMIO store that could trigger the device
> + to begin doing DMA, such as a device doorbell ring.
> +
> + eg
> + *dma_buf = 1;
> + udma_to_device_barrier();
> + mmio_write(DO_DMA_REG, dma_buf);
> + Must ensure that the device sees the '1'.
> +
> + This is required to fence writes created by the libibverbs user. Those
> + writes could be to any CPU mapped memory object with any cachability mode.
> +
> + NOTE: x86 has historically used a weaker semantic for this barrier, and
> + only fenced normal stores to normal memory. libibverbs users using other
> + memory types or non-temporal stores are required to use SFENCE in their
own
> + code prior to calling verbs to start a DMA.
> +*/
> +#define udma_to_device_barrier() wmb()
> +
> +/* Ensure that all ordered stores from the device are observable from the
> + CPU. This only makes sense after something that observes an ordered store
> + from the device - eg by reading a MMIO register or seeing that CPU memory
is
> + updated.
> +
> + This guarentees that all reads that follow the barrier see the ordered
> + stores that preceded the observation.
> +
> + For instance, this would be used after testing a valid bit in a memory
> + that is a DMA target, to ensure that the following reads see the
> + data written before the MemWr TLP that set the valid bit.
> +*/
> +#define udma_from_device_barrier() rmb()
> +
> +/* Order writes to CPU memory so that a DMA device cannot view writes after
> + the barrier without also seeing all writes before the barrier. This does
> + not guarentee any writes are visible to DMA.
> +
> + This would be used in cases where a DMA buffer might have a valid bit and
> + data, this barrier is placed after writing the data but before writing the
> + valid bit to ensure the DMA device cannot observe a set valid bit with
> + unwritten data.
> +
> + Compared to udma_to_device_barrier() this barrier is not required to fence
> + anything but normal stores to normal malloc memory. Usage should be:
> +
> + write_wqe
> + udma_to_device_barrier(); // Get user memory ready for DMA
> + wqe->addr = ...;
> + wqe->flags = ...;
> + udma_ordering_write_barrier(); // Guarantee WQE written in order
> + wqe->valid = 1;
> +*/
> +#define udma_ordering_write_barrier() wmb()
> +
> +/* Promptly flush writes, possibly in a write buffer, to MMIO backed memory.
> + This is not required to have any effect on CPU memory. If done while
> + holding a lock then the ordering of MMIO writes across CPUs must be
> + guarenteed to follow the natural ordering implied by the lock.
> +
> + This must also act as a barrier that prevents write combining, eg
> + *wc_mem = 1;
> + mmio_flush_writes();
> + *wc_mem = 2;
> + Must always produce two MemWr TLPs, the '2' cannot be combined with and
> + supress the '1'.
> +
> + This is intended to be used in conjunction with write combining memory
> + to generate large PCI-E MemWr TLPs from the CPU.
> +*/
> +#define mmio_flush_writes() wc_wmb()
> +
> +/* Keep MMIO writes in order.
> + Currently we lack writel macros that universally guarentee MMIO
> + writes happen in order, like the kernel does. Even worse many
> + providers haphazardly open code writes to MMIO memory omitting even
> + volatile.
> +
> + Until this can be fixed with a proper writel macro, this barrier
> + is a stand in to indicate places where MMIO writes should be switched
> + to some future writel.
> +*/
> +#define mmio_ordered_writes_hack() mmio_flush_writes()
> +
> #endif
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-02-16 22:07 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-16 19:22 [PATCH rdma-core 00/14] Revise the DMA barrier macros in ibverbs Jason Gunthorpe
[not found] ` <1487272989-8215-1-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-16 19:22 ` [PATCH rdma-core 01/14] mlx5: Use stdatomic for the in_use barrier Jason Gunthorpe
2017-02-16 19:22 ` [PATCH rdma-core 02/14] Provide new names for the CPU barriers related to DMA Jason Gunthorpe
[not found] ` <1487272989-8215-3-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-16 22:07 ` Steve Wise [this message]
2017-02-17 16:37 ` Jason Gunthorpe
2017-02-16 19:22 ` [PATCH rdma-core 03/14] cxgb3: Update to use new udma write barriers Jason Gunthorpe
[not found] ` <1487272989-8215-4-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-16 21:20 ` Steve Wise
2017-02-16 21:45 ` Jason Gunthorpe
[not found] ` <20170216214527.GA13616-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-16 22:01 ` Steve Wise
2017-02-16 19:22 ` [PATCH rdma-core 04/14] cxgb4: " Jason Gunthorpe
[not found] ` <1487272989-8215-5-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-17 20:16 ` Steve Wise
2017-02-16 19:23 ` [PATCH rdma-core 05/14] hns: " Jason Gunthorpe
2017-02-16 19:23 ` [PATCH rdma-core 06/14] i40iw: Get rid of unique barrier macros Jason Gunthorpe
[not found] ` <1487272989-8215-7-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-01 17:29 ` Shiraz Saleem
[not found] ` <20170301172920.GA11340-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-01 17:55 ` Jason Gunthorpe
[not found] ` <20170301175521.GB14791-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-01 22:14 ` Shiraz Saleem
[not found] ` <20170301221420.GA18548-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-01 23:05 ` Jason Gunthorpe
[not found] ` <20170301230506.GB2820-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-03 21:45 ` Shiraz Saleem
[not found] ` <20170303214514.GA12996-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-03 22:22 ` Jason Gunthorpe
[not found] ` <20170303222244.GA678-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-06 19:16 ` Shiraz Saleem
[not found] ` <20170306191631.GB34252-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-06 19:40 ` Jason Gunthorpe
[not found] ` <20170306194052.GB31672-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-07 22:46 ` Shiraz Saleem
[not found] ` <20170307224622.GA45028-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-07 22:50 ` Jason Gunthorpe
[not found] ` <20170307225027.GA20858-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-07 23:01 ` Shiraz Saleem
[not found] ` <20170307230121.GA52428-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-07 23:11 ` Jason Gunthorpe
[not found] ` <20170307231145.GB20858-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-07 23:23 ` Shiraz Saleem
2017-03-06 18:18 ` Shiraz Saleem
[not found] ` <20170306181808.GA34252-GOXS9JX10wfOxmVO0tvppfooFf0ArEBIu+b9c/7xato@public.gmane.org>
2017-03-06 19:07 ` Jason Gunthorpe
[not found] ` <20170306190751.GA30663-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-07 23:16 ` Shiraz Saleem
2017-02-16 19:23 ` [PATCH rdma-core 07/14] mlx4: Update to use new udma write barriers Jason Gunthorpe
[not found] ` <1487272989-8215-8-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-20 17:46 ` Yishai Hadas
[not found] ` <206559e5-0488-f6d5-c4ec-bf560e0c3ba6-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-02-21 18:14 ` Jason Gunthorpe
[not found] ` <20170221181407.GA13138-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-06 14:57 ` Yishai Hadas
[not found] ` <45d2b7da-9ad6-6b37-d0b2-00f7807966b4-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-03-06 17:31 ` Jason Gunthorpe
[not found] ` <20170306173139.GA11805-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-07 16:44 ` Yishai Hadas
[not found] ` <55bcc87e-b059-65df-8079-100120865ffb-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-03-07 19:18 ` Jason Gunthorpe
[not found] ` <20170307191824.GD2228-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-08 21:27 ` Yishai Hadas
[not found] ` <6571cf34-63b9-7b83-ddb0-9279e7e20fa9-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-03-08 21:56 ` Jason Gunthorpe
[not found] ` <20170308215609.GB4109-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-09 15:42 ` Yishai Hadas
[not found] ` <4dcf0cea-3652-0df2-9d98-74e258e6170a-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-03-09 17:03 ` Jason Gunthorpe
[not found] ` <20170309170320.GA12694-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-13 15:17 ` Yishai Hadas
2017-02-16 19:23 ` [PATCH rdma-core 08/14] mlx5: " Jason Gunthorpe
[not found] ` <1487272989-8215-9-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-27 10:56 ` Yishai Hadas
[not found] ` <d5921636-1911-5588-8c59-620066bca01a-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-02-27 18:00 ` Jason Gunthorpe
[not found] ` <20170227180009.GL5891-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-28 16:02 ` Yishai Hadas
[not found] ` <2969cce4-8b51-8fcf-f099-2b42a6d40a9c-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-02-28 17:06 ` Jason Gunthorpe
[not found] ` <20170228170658.GA17995-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-02 9:34 ` Yishai Hadas
[not found] ` <24bf0e37-e032-0862-c5b9-b5a40fcfb343-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-03-02 17:12 ` Jason Gunthorpe
[not found] ` <20170302171210.GA8595-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-03-06 14:19 ` Yishai Hadas
2017-02-16 19:23 ` [PATCH rdma-core 09/14] nes: " Jason Gunthorpe
2017-02-16 19:23 ` [PATCH rdma-core 10/14] mthca: Update to use new mmio " Jason Gunthorpe
2017-02-16 19:23 ` [PATCH rdma-core 11/14] ocrdma: Update to use new udma " Jason Gunthorpe
[not found] ` <1487272989-8215-12-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-18 16:21 ` Devesh Sharma
2017-02-16 19:23 ` [PATCH rdma-core 12/14] qedr: " Jason Gunthorpe
[not found] ` <1487272989-8215-13-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-23 13:49 ` Amrani, Ram
[not found] ` <SN1PR07MB2207DE206738E6DD8511CEA1F8530-mikhvbZlbf8TSoR2DauN2+FPX92sqiQdvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-02-23 17:30 ` Jason Gunthorpe
[not found] ` <20170223173047.GC6688-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-24 10:01 ` Amrani, Ram
2017-02-16 19:23 ` [PATCH rdma-core 13/14] vmw_pvrdma: " Jason Gunthorpe
[not found] ` <1487272989-8215-14-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-17 18:05 ` Adit Ranadive
2017-02-16 19:23 ` [PATCH rdma-core 14/14] Remove the old barrier macros Jason Gunthorpe
[not found] ` <1487272989-8215-15-git-send-email-jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2017-02-23 13:33 ` Amrani, Ram
[not found] ` <SN1PR07MB22070A48ACD50848267A5AD8F8530-mikhvbZlbf8TSoR2DauN2+FPX92sqiQdvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-02-23 16:59 ` Jason Gunthorpe
2017-02-28 16:00 ` [PATCH rdma-core 00/14] Revise the DMA barrier macros in ibverbs Doug Ledford
[not found] ` <1488297611.86943.215.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-02-28 16:38 ` Majd Dibbiny
[not found] ` <C6384D48-FC47-4046-8025-462E1CB02A34-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-02-28 17:47 ` Doug Ledford
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='067401d288a1$1f90c820$5eb25860$@opengridcomputing.com' \
--to=swise-7bpotxp6k4+p2yhjcf5u+vpxobypeauw@public.gmane.org \
--cc=jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.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 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.