From: Robin Murphy <robin.murphy@arm.com>
To: JABLONSKY Jan <Jan.JABLONSKY@thalesgroup.com>,
Jaehoon Chung <jh80.chung@samsung.com>,
Shawn Lin <shawn.lin@rock-chips.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: dw_mmc: IDMAC Invalidate cache after read
Date: Fri, 23 Nov 2018 15:29:25 +0000 [thread overview]
Message-ID: <a45eca28-fd89-e595-5b34-689bc3a09b9c@arm.com> (raw)
In-Reply-To: <1542786115.18775.83.camel@atviedlbe741.rss.d3s.at.thales>
Hi Jan,
[repeating some of the discussion from your other thread for the benefit
of the MMC audience]
On 21/11/2018 07:42, JABLONSKY Jan wrote:
> CPU may not see most up-to-date and correct copy of DMA buffer, when
> internal DMA controller is in use.
> Problem appears on The Altera SoC FPGA (uses integrated DMA controller),
> during higher CPU and system memory load
>
> Signed-off-by: Jan Jablonsky <jan.jablonsky@thalesgroup.com>
> ---
> drivers/mmc/host/dw_mmc.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 80dc2fd..63873d9 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -499,8 +499,7 @@ static void dw_mci_dmac_complete_dma(void *arg)
>
> dev_vdbg(host->dev, "DMA complete\n");
>
> - if ((host->use_dma == TRANS_MODE_EDMAC) &&
> - data && (data->flags & MMC_DATA_READ))
> + if (data && (data->flags & MMC_DATA_READ))
> /* Invalidate cache after read */
> dma_sync_sg_for_cpu(mmc_dev(host->slot->mmc),
> data->sg,
It looks very dubious whether this is actually the right thing to do.
Just considering this driver, edma has an complementary sync_sg call in
its .start method, so if idma needed this one, logically shouldn't it
also need the other one as well?
However, from a DMA API point of view, these syncs make no sense either
way - the very next thing we do here is call host->dma_ops->cleanup(),
which calls dma_unmap_sg(), which will perform the appropriate cache
maintenance anyway. Thus I can't see why this code is even here to begin
with. Similarly on the request path - the sg list really shouldn't have
been touched since being mapped in dw_mci_pre_dma_transfer(), so that
sync should also be an effective no-op unless it's papering over some
race condition elsewhere.
Shawn - do you remember why these syncs were added in 3fc7eaef44dbc?
Were you seeing actual coherency issues on RK31xx SoCs, or was it
perhaps just some leftover or misunderstanding which missed getting
cleaned up?
Robin.
next prev parent reply other threads:[~2018-11-23 15:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-21 7:42 dw_mmc: IDMAC Invalidate cache after read JABLONSKY Jan
2018-11-23 15:29 ` Robin Murphy [this message]
2018-11-27 0:43 ` Shawn Lin
2018-12-01 13:56 ` JABLONSKY Jan
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=a45eca28-fd89-e595-5b34-689bc3a09b9c@arm.com \
--to=robin.murphy@arm.com \
--cc=Jan.JABLONSKY@thalesgroup.com \
--cc=jh80.chung@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=shawn.lin@rock-chips.com \
--cc=ulf.hansson@linaro.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