> -----Original Message----- > From: Intel-wired-lan [mailto:intel-wired-lan-boun...@osuosl.org] On > Behalf Of Firo Yang > Sent: Wednesday, August 7, 2019 9:04 PM > To: net...@vger.kernel.org > Cc: maciejromanfijalkow...@gmail.com; Firo Yang <firo.y...@suse.com>; > linux-kernel@vger.kernel.org; intel-wired-...@lists.osuosl.org; > jian.w....@oracle.com; alexander.h.du...@linux.intel.com; > da...@davemloft.net > Subject: [Intel-wired-lan] [PATCH v3 1/1] ixgbe: sync the first fragment > unconditionally > > In Xen environment, if Xen-swiotlb is enabled, ixgbe driver could possibly > allocate a page, DMA memory buffer, for the first fragment which is not > suitable for Xen-swiotlb to do DMA operations. > Xen-swiotlb have to internally allocate another page for doing DMA > operations. This mechanism requires syncing the data from the internal page > to the page which ixgbe sends to upper network stack. However, since > commit f3213d932173 ("ixgbe: Update driver to make use of DMA attributes > in Rx path"), the unmap operation is performed with > DMA_ATTR_SKIP_CPU_SYNC. As a result, the sync is not performed. > Since the sync isn't performed, the upper network stack could receive a > incomplete network packet. By incomplete, it means the linear data on the > first fragment(between skb->head and skb->end) is invalid. So we have to > copy the data from the internal xen-swiotlb page to the page which ixgbe > sends to upper network stack through the sync operation. > > More details from Alexander Duyck: > Specifically since we are mapping the frame with > DMA_ATTR_SKIP_CPU_SYNC we have to unmap with that as well. As a result > a sync is not performed on an unmap and must be done manually as we > skipped it for the first frag. As such we need to always sync before possibly > performing a page unmap operation. > > Fixes: f3213d932173 ("ixgbe: Update driver to make use of DMA attributes in > Rx path") > Reviewed-by: Alexander Duyck <alexander.h.du...@linux.intel.com> > Signed-off-by: Firo Yang <firo.y...@suse.com> > --- > Changes from v2: > * Added details on the problem caused by skipping the sync. > * Added more explanation from Alexander Duyck. > > Changes from v1: > * Imporved the patch description. > * Added Reviewed-by: and Fixes: as suggested by Alexander Duyck. > > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-)
Tested-by: Andrew Bowers <andrewx.bow...@intel.com>