linux_dsm_epyc7002/drivers/net/ethernet/intel/ixgbe
Firo Yang e7ba676c61 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 f3213d9321 ("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: f3213d9321 ("ixgbe: Update driver to make use of DMA attributes in Rx path")
Signed-off-by: Firo Yang <firo.yang@suse.com>
Reviewed-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2019-09-09 11:37:02 -07:00
..
ixgbe_82598.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_82599.c ixgbe: remove magic constant in ixgbe_reset_hw_82599() 2019-02-05 16:08:54 -08:00
ixgbe_common.c ixgbe: remove redundant function ixgbe_fw_recovery_mode() 2018-10-03 12:28:04 -07:00
ixgbe_common.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82598.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82598.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82599.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_82599.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb_nl.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_dcb.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_debugfs.c ixgbe: no need to check return value of debugfs_create functions 2019-08-10 15:25:48 -07:00
ixgbe_ethtool.c ixgbe: Check DDM existence in transceiver before access 2019-06-26 09:18:54 -07:00
ixgbe_fcoe.c ixgbe: Replace GFP_ATOMIC with GFP_KERNEL 2018-08-24 08:52:35 -07:00
ixgbe_fcoe.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_ipsec.c ixgbe: Use kzfree() rather than its implementation. 2019-09-05 12:06:04 +02:00
ixgbe_ipsec.h ixgbe: add VF IPsec management 2018-08-28 14:33:03 -07:00
ixgbe_lib.c ixgbe: Use struct_size() helper 2019-02-08 23:03:48 -08:00
ixgbe_main.c ixgbe: sync the first fragment unconditionally 2019-09-09 11:37:02 -07:00
ixgbe_mbx.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_mbx.h ixgbe: add VF IPsec offload request message handling 2018-08-28 14:33:14 -07:00
ixgbe_model.h ixgbe: cleanup sparse warnings 2018-05-17 08:24:30 -07:00
ixgbe_phy.c ixgbe: fix mdio bus registration 2019-03-26 16:14:24 -07:00
ixgbe_phy.h ixgbe: Check DDM existence in transceiver before access 2019-06-26 09:18:54 -07:00
ixgbe_ptp.c ixgbe: fix potential u32 overflow on shift 2019-06-28 15:59:38 -07:00
ixgbe_sriov.c ixgbe: Use LLDP ethertype define ETH_P_LLDP 2019-06-05 13:04:29 -07:00
ixgbe_sriov.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_sysfs.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_txrx_common.h xsk: replace ndo_xsk_async_xmit with ndo_xsk_wakeup 2019-08-17 23:07:31 +02:00
ixgbe_type.h ixgbe: implement support for SDP/PPS output on X550 hardware 2019-06-05 13:04:30 -07:00
ixgbe_x540.c net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_x540.h net: intel: Cleanup the copyright/license headers 2018-04-27 14:00:04 -04:00
ixgbe_x550.c ixgbe: recognize 1000BaseLX SFP modules as 1Gbps 2018-11-28 08:29:49 -08:00
ixgbe_xsk.c ixgbe: fix xdp handle calculations 2019-09-05 13:53:43 +02:00
ixgbe.h ixgbe: Use LLDP ethertype define ETH_P_LLDP 2019-06-05 13:04:29 -07:00
Makefile ixgbe/ixgbevf: fix XFRM_ALGO dependency 2018-10-31 10:53:15 -07:00