i40e: simplify SSE packet length extraction code
authorBruce Richardson <bruce.richardson@intel.com>
Thu, 14 Apr 2016 16:02:37 +0000 (17:02 +0100)
committerBruce Richardson <bruce.richardson@intel.com>
Fri, 6 May 2016 13:51:22 +0000 (15:51 +0200)
commit35245e4438ebcd34643c2f09926339d4c498c4db
tree4ff931d4b6a8102580b381116e9e99d9f6eb2ccd
parent0b6493fbb0d9c4a368ee819ccf65601c0d03d515
i40e: simplify SSE packet length extraction code

In Table 8-16 of the "IntelĀ® Ethernet Controller XL710 Datasheet" it is
stated that when the whole packet is written to a single buffer, the
header length field in the descriptor will be 0. This means that when
extracting the packet/data_len field from the descriptor in the driver
we do not need to mask out the extra header-length bits.

Inside the vector driver, this reduces the need to pull all four pktlen
fields into a single register to work on. Instead of a shift and mask,
we now need to only do a shift. Therefore, we can work on each descriptor
independently, processing each using one shift intrinsic and a blend.

This change makes the code shorter and easier to read, so we can pull it
into the main descriptor processing loop instead of needing its own
function. This in turn makes the descriptor processing in the loop as a
whole slightly easier to read as it's more linear.

In terms of performance, in testing this change shows little effect, with
single-core perf tests showing a very slight improvement.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Zhe Tao <zhe.tao@intel.com>
drivers/net/i40e/i40e_rxtx_vec.c