nvme: Invalidate dcache before submitting admin cmd
authorJagan Teki <jagan@amarulasolutions.com>
Wed, 10 Jun 2020 19:18:23 +0000 (21:18 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 23 Jun 2020 18:43:23 +0000 (14:43 -0400)
commit1a027a90aaa65ea429a55035f0316eadd0d83180
treebf08642f32a7a5f6aed5c72a8ffca869f55d7125
parentccbda9e68093b0c6019b95596366faec2b19442d
nvme: Invalidate dcache before submitting admin cmd

This patch try to avoids eviction of dirty lines during DMA
transfer. The code right now execute the following step:

- allocate the buffer
- start a dma operation using the non-coherent dma buffer
- invalidate cache lines associated with the buffer
- read the buffer

This can lead to reading back not valid information, because the cache
controller could evict dirty cache lines belonging to the buffer *after*
the DMA operation has started to fill the DRAM.
In order to avoid this, a new invalidation is required *before* starting
the DMA operation. The patch just adds an invalidation before submitting
the DMA command.

Example below shows the nvme disk scan result without the following
patch

=> nvme scan
nvme_get_info_from_identify: nn = 544502629, vwc = 100,
sn = dev_0T, mn = `�\�, fr = t_part, mdts = 105

So, invalidating the cache before submitting the admin command,
fix the cpu read.

Cc: André Przywara <andre.przywara@arm.com>
Reported-by: Suniel Mahesh <sunil@amarulasolutions.com>
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Tested-by: Suniel Mahesh <sunil@amarulasolutions.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
drivers/nvme/nvme.c