]> git.baikalelectronics.ru Git - kernel.git/commit
IB/mlx4: Fix data corruption triggered by wrong headroom marking order
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Wed, 19 Sep 2007 16:52:25 +0000 (09:52 -0700)
committerRoland Dreier <rolandd@cisco.com>
Sun, 23 Sep 2007 20:03:22 +0000 (13:03 -0700)
commit1894b3d04beaf2907b25876e6bfc18a98ffbc565
tree82325240b222299766b5cfa53e59306cb607878a
parent8b527ef7510e51b1a619c45b89b7c5e8282452bc
IB/mlx4: Fix data corruption triggered by wrong headroom marking order

This is an addendum to commit 7abe919c ("IB/mlx4: Handle new FW
requirement for send request prefetching").  We also need to handle
prefetch marking properly for S/G segments, or else the HCA may end up
processing S/G segments that are not fully written and end up sending
the wrong data.  This can actually cause data corruption in practice,
especially on systems with relatively slow CPUs (where the HCA is more
likely to prefetch while the CPU is in the middle of writing a work
request into memory).

We write S/G segments in reverse order into the WQE, in order to
guarantee that the first dword of all cachelines containing S/G
segments is written last (overwriting the headroom invalidation
pattern).  The entire cacheline will thus contain valid data when the
invalidation pattern is overwritten.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/mlx4/qp.c