linux/drivers/net/ethernet/intel/i40evf
Alexander Duyck 2d37490b82 i40e/i40evf: Rewrite logic for 8 descriptor per packet check
This patch is meant to rewrite the logic for how we determine if we can
transmit the frame or if it needs to be linearized.

The previous code for this function was using a mix of division and modulus
division as a part of computing if we need to take the slow path.  Instead
I have replaced this by simply working with a sliding window which will
tell us if the frame would be capable of causing a single packet to span
several descriptors.

The logic for the scan is fairly simple.  If any given group of 6 fragments
is less than gso_size - 1 then it is possible for us to have one byte
coming out of the first fragment, 6 fragments, and one or more bytes coming
out of the last fragment.  This gives us a total of 8 fragments
which exceeds what we can allow so we send such frames to be linearized.

Arguably the use of modulus might be more exact as the approach I propose
may generate some false positives.  However the likelihood of us taking much
of a hit for those false positives is fairly low, and I would rather not
add more overhead in the case where we are receiving a frame composed of 4K
pages.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2016-02-18 23:27:05 -08:00
..
i40e_adminq_cmd.h i40e: When in promisc mode apply promisc mode to Tx Traffic as well 2016-02-17 23:45:18 -08:00
i40e_adminq.c i40e: clean event descriptor before use 2016-02-17 23:39:58 -08:00
i40e_adminq.h i40e/i40evf: fix a potential type compare issue 2015-10-07 13:38:11 -07:00
i40e_alloc.h i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00
i40e_common.c i40e: remove forever unused ID 2016-01-08 01:33:42 -08:00
i40e_devids.h i40e: remove forever unused ID 2016-01-08 01:33:42 -08:00
i40e_hmc.h i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_lan_hmc.h i40e/i40evf: Big endian fixes for handling HMC 2014-06-26 04:44:57 -07:00
i40e_osdep.h move io-64-nonatomic*.h out of asm-generic 2015-10-15 00:21:07 +02:00
i40e_prototype.h i40e/i40evf: Add a workaround to drop all flow control frames 2015-10-23 04:17:55 -07:00
i40e_register.h i40evf: Remove PF specific register definitions from the VF 2015-08-26 15:05:17 -07:00
i40e_status.h i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00
i40e_txrx.c i40e/i40evf: Rewrite logic for 8 descriptor per packet check 2016-02-18 23:27:05 -08:00
i40e_txrx.h i40e/i40evf: Rewrite logic for 8 descriptor per packet check 2016-02-18 23:27:05 -08:00
i40e_type.h i40e/i40evf: Fix an accidental error with BIT_ULL replacement 2015-10-19 15:35:45 -07:00
i40e_virtchnl.h i40e/i40evf: Add a new offload for RSS PCTYPE V2 for X722 2015-12-12 21:08:42 -08:00
i40evf_ethtool.c i40evf: support packet split receive 2016-02-17 22:22:58 -08:00
i40evf_main.c i40evf: Update feature flags to reflect newly enabled features 2016-02-18 15:30:55 -08:00
i40evf_virtchnl.c i40evf: support packet split receive 2016-02-17 22:22:58 -08:00
i40evf.h i40evf: support packet split receive 2016-02-17 22:22:58 -08:00
Makefile i40evf: Fix the headers and update copyright year. 2014-05-21 01:54:43 -07:00