Commit e7ce9fc9 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'nfp-tso'



Merge branch 'nfp-tso'

Simon Horman says:

====================
nfp: enable TSO by default

this short series enables TSO by default on all NICs supported by the NFP
driver.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 7e40e16e 7de8b691
Loading
Loading
Loading
Loading
+0 −17
Original line number Diff line number Diff line
@@ -56,17 +56,6 @@ nfp_nfdk_tx_tso(struct nfp_net_r_vector *r_vec, struct nfp_nfdk_tx_buf *txbuf,
	segs = skb_shinfo(skb)->gso_segs;
	mss = skb_shinfo(skb)->gso_size & NFDK_DESC_TX_MSS_MASK;

	/* Note: TSO of the packet with metadata prepended to skb is not
	 * supported yet, in which case l3/l4_offset and lso_hdrlen need
	 * be correctly handled here.
	 * Concern:
	 * The driver doesn't have md_bytes easily available at this point.
	 * The PCI.IN PD ME won't have md_bytes bytes to add to lso_hdrlen,
	 * so it needs the full length there.  The app MEs might prefer
	 * l3_offset and l4_offset relative to the start of packet data,
	 * but could probably cope with it being relative to the CTM buf
	 * data offset.
	 */
	txd.l3_offset = l3_offset;
	txd.l4_offset = l4_offset;
	txd.lso_meta_res = 0;
@@ -190,12 +179,6 @@ static int nfp_nfdk_prep_port_id(struct sk_buff *skb)
	if (unlikely(md_dst->type != METADATA_HW_PORT_MUX))
		return 0;

	/* Note: Unsupported case when TSO a skb with metedata prepended.
	 * See the comments in `nfp_nfdk_tx_tso` for details.
	 */
	if (unlikely(md_dst && skb_is_gso(skb)))
		return -EOPNOTSUPP;

	if (unlikely(skb_cow_head(skb, sizeof(md_dst->u.port_info.port_id))))
		return -ENOMEM;

+3 −4
Original line number Diff line number Diff line
@@ -2420,12 +2420,11 @@ static void nfp_net_netdev_init(struct nfp_net *nn)
	if (nfp_app_has_tc(nn->app) && nn->port)
		netdev->hw_features |= NETIF_F_HW_TC;

	/* Advertise but disable TSO by default.
	 * C-Tag strip and S-Tag strip can't be supported simultaneously,
	/* C-Tag strip and S-Tag strip can't be supported simultaneously,
	 * so enable C-Tag strip and disable S-Tag strip by default.
	 */
	netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_HW_VLAN_STAG_RX);
	nn->dp.ctrl &= ~(NFP_NET_CFG_CTRL_LSO_ANY | NFP_NET_CFG_CTRL_RXQINQ);
	netdev->features &= ~NETIF_F_HW_VLAN_STAG_RX;
	nn->dp.ctrl &= ~NFP_NET_CFG_CTRL_RXQINQ;

	/* Finalise the netdev setup */
	switch (nn->dp.ops->version) {
+2 −3
Original line number Diff line number Diff line
@@ -380,11 +380,10 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,

	netdev->features = netdev->hw_features;

	/* Advertise but disable TSO by default.
	 * C-Tag strip and S-Tag strip can't be supported simultaneously,
	/* C-Tag strip and S-Tag strip can't be supported simultaneously,
	 * so enable C-Tag strip and disable S-Tag strip by default.
	 */
	netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_HW_VLAN_STAG_RX);
	netdev->features &= ~NETIF_F_HW_VLAN_STAG_RX;
	netif_set_tso_max_segs(netdev, NFP_NET_LSO_MAX_SEGS);

	netdev->priv_flags |= IFF_NO_QUEUE | IFF_DISABLE_NETPOLL;