]> git.baikalelectronics.ru Git - kernel.git/commit
nvme: avoid cqe corruption when update at the same time as read
authorMarta Rybczynska <mrybczyn@kalray.eu>
Tue, 22 Mar 2016 15:02:06 +0000 (16:02 +0100)
committerJens Axboe <axboe@fb.com>
Tue, 22 Mar 2016 16:27:29 +0000 (10:27 -0600)
commita0c93ea925aa3acc8b85229e73da4d16b3b28c05
treebc2695af55c071b0f9b94027a2691b3e75dc24b0
parent07afc7f7eb414dafa6501fd5b7b7e002af4de292
nvme: avoid cqe corruption when update at the same time as read

Make sure the CQE phase (validity) is read before the rest of the
structure. The phase bit is the highest address and the CQE
read will happen on most platforms from lower to upper addresses
and will be done by multiple non-atomic loads. If the structure
is updated by PCI during the reads from the processor, the
processor may get a corrupted copy.

The addition of the new nvme_cqe_valid function that verifies
the validity bit also allows refactoring of the other CQE read
sequences.

Signed-off-by: Marta Rybczynska <marta.rybczynska@kalray.eu>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/nvme/host/pci.c