sfc: Properly sync RX DMA buffer when it is not the last in the page
authorBen Hutchings <bhutchings@solarflare.com>
Thu, 20 Dec 2012 18:48:20 +0000 (18:48 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Mar 2013 19:11:56 +0000 (12:11 -0700)
commit56bed2f8e6061b65ce3f9f27df92ac2e1cc2e7e0
tree26d2908359f31e8d1422e49a44702e9838d913d0
parent41ade8ee0d52f9e02d05cb1b1c376445d5ec3689
sfc: Properly sync RX DMA buffer when it is not the last in the page

[ Upstream commit 3a68f19d7afb80f548d016effbc6ed52643a8085 ]

We may currently allocate two RX DMA buffers to a page, and only unmap
the page when the second is completed.  We do not sync the first RX
buffer to be completed; this can result in packet loss or corruption
if the last RX buffer completed in a NAPI poll is the first in a page
and is not DMA-coherent.  (In the middle of a NAPI poll, we will
handle the following RX completion and unmap the page *before* looking
at the content of the first buffer.)

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
[bwh: Backported to 3.4: adjust context]
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/sfc/rx.c