Skip to content

Commit

Permalink
net/e1000: fix max Rx packet size
Browse files Browse the repository at this point in the history
[ upstream commit ddbc8c1 ]

According to E1000_ETH_OVERHEAD definition, max_rx_pkt_len contains
one VLAN tag size. Therefore when config RLPML register, if dual VLAN
not enabled there is no need to add VLAN tag size to max_rx_pkt_len,
otherwise only one another VLAN tag size should be added to.

Fixes: e51abef ("igb: fix max RX packet size and support dual VLAN")

Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
Tested-by: Lingli Chen <linglix.chen@intel.com>
Acked-by: Haiyue Wang <haiyue.wang@intel.com>
  • Loading branch information
Alvin Zhang authored and cpaelzer committed May 17, 2021
1 parent 7ce3bce commit 9b54e27
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
5 changes: 2 additions & 3 deletions drivers/net/e1000/igb_ethdev.c
Expand Up @@ -2710,8 +2710,7 @@ igb_vlan_hw_extend_disable(struct rte_eth_dev *dev)
/* Update maximum packet length */
if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)
E1000_WRITE_REG(hw, E1000_RLPML,
dev->data->dev_conf.rxmode.max_rx_pkt_len +
VLAN_TAG_SIZE);
dev->data->dev_conf.rxmode.max_rx_pkt_len);
}

static void
Expand All @@ -2730,7 +2729,7 @@ igb_vlan_hw_extend_enable(struct rte_eth_dev *dev)
if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)
E1000_WRITE_REG(hw, E1000_RLPML,
dev->data->dev_conf.rxmode.max_rx_pkt_len +
2 * VLAN_TAG_SIZE);
VLAN_TAG_SIZE);
}

static int
Expand Down
9 changes: 6 additions & 3 deletions drivers/net/e1000/igb_rxtx.c
Expand Up @@ -2341,15 +2341,18 @@ eth_igb_rx_init(struct rte_eth_dev *dev)
* Configure support of jumbo frames, if any.
*/
if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
uint32_t max_len = dev->data->dev_conf.rxmode.max_rx_pkt_len;

rctl |= E1000_RCTL_LPE;

/*
* Set maximum packet length by default, and might be updated
* together with enabling/disabling dual VLAN.
*/
E1000_WRITE_REG(hw, E1000_RLPML,
dev->data->dev_conf.rxmode.max_rx_pkt_len +
VLAN_TAG_SIZE);
if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_EXTEND)
max_len += VLAN_TAG_SIZE;

E1000_WRITE_REG(hw, E1000_RLPML, max_len);
} else
rctl &= ~E1000_RCTL_LPE;

Expand Down

0 comments on commit 9b54e27

Please sign in to comment.