From: "Köry Maincent" <kory.maincent@bootlin.com>
To: Serge Semin <fancer.lancer@gmail.com>
Cc: Cai Huoqing <cai.huoqing@linux.dev>,
Manivannan Sadhasivam <mani@kernel.org>,
Vinod Koul <vkoul@kernel.org>,
Gustavo Pimentel <Gustavo.Pimentel@synopsys.com>,
dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Herve Codina <herve.codina@bootlin.com>
Subject: Re: [PATCH 4/9] dmaengine: dw-edma: HDMA: Add memory barrier before starting the DMA transfer in remote setup
Date: Mon, 19 Jun 2023 20:32:07 +0200 [thread overview]
Message-ID: <20230619203207.694bfac6@kmaincent-XPS-13-7390> (raw)
In-Reply-To: <20230619170201.5hbgte2optjlbx55@mobilestation.baikal.int>
On Mon, 19 Jun 2023 20:02:01 +0300
Serge Semin <fancer.lancer@gmail.com> wrote:
> On Fri, Jun 09, 2023 at 10:16:49AM +0200, Köry Maincent wrote:
> > From: Kory Maincent <kory.maincent@bootlin.com>
> >
>
> > The Linked list element and pointer are not stored in the same memory as
> > the HDMA controller register. If the doorbell register is toggled before
> > the full write of the linked list a race condition error can appears.
> > In remote setup we can only use a readl to the memory to assured the full
> > write has occurred.
> >
> > Fixes: e74c39573d35 ("dmaengine: dw-edma: Add support for native HDMA")
> > Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
>
> Is this a hypothetical bug? Have you actually experienced the
> described problem? If so are you sure that it's supposed to be fixed
> as you suggest?
I do experienced this problem and this patch fixed it.
>
> I am asking because based on the kernel doc
> (Documentation/memory-barriers.txt):
>
> * 1. All readX() and writeX() accesses to the same peripheral are ordered
> * with respect to each other. This ensures that MMIO register accesses
> * by the same CPU thread to a particular device will arrive in program
> * order.
> * ...
> * The ordering properties of __iomem pointers obtained with non-default
> * attributes (e.g. those returned by ioremap_wc()) are specific to the
> * underlying architecture and therefore the guarantees listed above cannot
> * generally be relied upon for accesses to these types of mappings.
>
> the IOs performed by the accessors are supposed to arrive in the
> program order. Thus SET_CH_32(..., HDMA_V0_DOORBELL_START) performed
> after all the previous SET_CH_32(...) are finished looks correct with
> no need in additional barriers. The results of the later operations
> are supposed to be seen by the device (in our case it's a remote DW
> eDMA controller) before the doorbell update from scratch. From that
> perspective your problem looks as if the IO operations preceding the
> doorbell CSR update aren't finished yet. So you are sure that the LL
> memory is mapped with no additional flags like Write-Combine or some
> caching optimizations? Are you sure that the PCIe IOs are correctly
> implemented in your platform?
No, I don't know if there is extra flags or optimizations.
>
> I do understand that the eDMA CSRs and the LL memory are mapped by
> different BARs in the remote eDMA setup. But they still belong to the
> same device. So the IO accessors semantic described in the kernel doc
> implies no need in additional barrier.
Even if they are on the same device it is two type of memory.
I am not an PCIe expert but I suppose the PCIe controller of the board is
sending to both memory and if one of them (LL memory here) is slower in the
write process then we faced this race issue. We can not find out that the write
to LL memory has finished before the CSRs even if the write command has been
sent earlier.
Köry,
next prev parent reply other threads:[~2023-06-19 18:32 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-09 8:16 [PATCH 0/9] Fix support of dw-edma HDMA NATIVE IP in remote setup Köry Maincent
2023-06-09 8:16 ` [PATCH 1/9] dmaengine: dw-edma: Fix the ch_count hdma callback Köry Maincent
2023-06-18 21:07 ` Serge Semin
2023-06-19 18:07 ` Köry Maincent
2023-06-09 8:16 ` [PATCH 2/9] dmaengine: dw-edma: Typos fixes Köry Maincent
2023-06-18 21:15 ` Serge Semin
2023-06-09 8:16 ` [PATCH 3/9] dmaengine: dw-edma: Add HDMA remote interrupt configuration Köry Maincent
2023-06-18 21:48 ` Serge Semin
2023-06-19 18:16 ` Köry Maincent
2023-06-20 9:32 ` Serge Semin
2023-06-09 8:16 ` [PATCH 4/9] dmaengine: dw-edma: HDMA: Add memory barrier before starting the DMA transfer in remote setup Köry Maincent
2023-06-19 17:02 ` Serge Semin
2023-06-19 18:32 ` Köry Maincent [this message]
2023-06-20 11:45 ` Serge Semin
2023-06-20 13:30 ` Köry Maincent
2023-06-21 9:45 ` Serge Semin
2023-06-21 13:19 ` Köry Maincent
2023-06-21 15:56 ` Serge Semin
2023-06-22 15:12 ` Köry Maincent
2023-06-22 16:22 ` Serge Semin
2023-09-12 8:52 ` Köry Maincent
2023-09-25 16:06 ` Serge Semin
2023-06-09 8:16 ` [PATCH 5/9] dmaengine: dw-edma: HDMA: Fix possible race condition " Köry Maincent
2023-06-19 17:15 ` Serge Semin
2023-06-19 18:41 ` Köry Maincent
2023-06-20 12:07 ` Serge Semin
2023-06-20 13:35 ` Köry Maincent
2023-06-09 8:16 ` [PATCH 6/9] dmaengine: dw-edma: HDMA: Fix possible race condition in local setup Köry Maincent
2023-06-09 8:16 ` [PATCH 7/9] dmaengine: dw-edma: eDMA: Add memory barrier before starting the DMA transfer in remote setup Köry Maincent
2023-06-09 8:16 ` [PATCH 8/9] dmaengine: dw-edma: eDMA: Fix possible race condition " Köry Maincent
2023-06-09 8:16 ` [PATCH 9/9] dmaengine: dw-edma: eDMA: Fix possible race condition in local setup Köry Maincent
2023-06-12 8:59 ` [PATCH 0/9] Fix support of dw-edma HDMA NATIVE IP in remote setup Köry Maincent
2023-06-12 16:48 ` Serge Semin
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=20230619203207.694bfac6@kmaincent-XPS-13-7390 \
--to=kory.maincent@bootlin.com \
--cc=Gustavo.Pimentel@synopsys.com \
--cc=cai.huoqing@linux.dev \
--cc=dmaengine@vger.kernel.org \
--cc=fancer.lancer@gmail.com \
--cc=herve.codina@bootlin.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mani@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=vkoul@kernel.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