Commit 1db685e6 authored by Shannon Nelson's avatar Shannon Nelson Committed by Jeff Kirsher

ixgbe: no need for esp trailer if GSO

There is no need to calculate the trailer length if we're doing
a GSO/TSO, as there is no trailer added to the packet data.
Also, don't bother clearing the flags field as it was already
cleared earlier.
Signed-off-by: default avatarShannon Nelson <shannon.nelson@oracle.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 871dd09b
...@@ -774,11 +774,7 @@ int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring, ...@@ -774,11 +774,7 @@ int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring,
first->tx_flags |= IXGBE_TX_FLAGS_IPSEC | IXGBE_TX_FLAGS_CC; first->tx_flags |= IXGBE_TX_FLAGS_IPSEC | IXGBE_TX_FLAGS_CC;
itd->flags = 0;
if (xs->id.proto == IPPROTO_ESP) { if (xs->id.proto == IPPROTO_ESP) {
struct sk_buff *skb = first->skb;
int ret, authlen, trailerlen;
u8 padlen;
itd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_TYPE_ESP | itd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_TYPE_ESP |
IXGBE_ADVTXD_TUCMD_L4T_TCP; IXGBE_ADVTXD_TUCMD_L4T_TCP;
...@@ -790,19 +786,28 @@ int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring, ...@@ -790,19 +786,28 @@ int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring,
* padlen bytes of padding. This ends up not the same * padlen bytes of padding. This ends up not the same
* as the static value found in xs->props.trailer_len (21). * as the static value found in xs->props.trailer_len (21).
* *
* The "correct" way to get the auth length would be to use * ... but if we're doing GSO, don't bother as the stack
* authlen = crypto_aead_authsize(xs->data); * doesn't add a trailer for those.
* but since we know we only have one size to worry about
* we can let the compiler use the constant and save us a
* few CPU cycles.
*/ */
authlen = IXGBE_IPSEC_AUTH_BITS / 8; if (!skb_is_gso(first->skb)) {
/* The "correct" way to get the auth length would be
ret = skb_copy_bits(skb, skb->len - (authlen + 2), &padlen, 1); * to use
if (unlikely(ret)) * authlen = crypto_aead_authsize(xs->data);
return 0; * but since we know we only have one size to worry
trailerlen = authlen + 2 + padlen; * about * we can let the compiler use the constant
itd->trailer_len = trailerlen; * and save us a few CPU cycles.
*/
const int authlen = IXGBE_IPSEC_AUTH_BITS / 8;
struct sk_buff *skb = first->skb;
u8 padlen;
int ret;
ret = skb_copy_bits(skb, skb->len - (authlen + 2),
&padlen, 1);
if (unlikely(ret))
return 0;
itd->trailer_len = authlen + 2 + padlen;
}
} }
if (tsa->encrypt) if (tsa->encrypt)
itd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN; itd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment