nvme: Always invalidate whole cqes[] array
authorAndre Przywara <andre.przywara@arm.com>
Mon, 8 Feb 2021 13:31:54 +0000 (13:31 +0000)
committerTom Rini <trini@konsulko.com>
Fri, 19 Mar 2021 14:36:53 +0000 (10:36 -0400)
commitd0c04926cd054cf7360ec15913ac17a465f32603
tree945a7aa01c9a7cd5d27f6566780e0b02771cb12f
parentd32211ee95a2fd4a322599346e572fc91c1ba9b5
nvme: Always invalidate whole cqes[] array

At the moment nvme_read_completion_status() tries to invalidate a single
member of the cqes[] array, which is shady as just a single entry is
not cache line aligned.
The structure is dictated by hardware, and with 16 bytes is smaller than
any cache line we usually deal with. Also multiple entries need to be
consecutive in memory, so we can't pad them to cover a whole cache line.

As a consequence we can only always invalidate all of them - U-Boot just
uses two of them anyway. This is fine, as they are only ever read by the
CPU (apart from the initial zeroing), so they can't become dirty.

Make this obvious by always invalidating the whole array, regardless of
the entry number we are about to read.
Also blow up the allocation size to cover whole cache lines, to avoid
other heap allocations to sneak in.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
Tested-by: Neil Armstrong <narmstrong@baylibre.com>
drivers/nvme/nvme.c