Commit 27eddbf3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from Paolo Abeni:
 "Smaller than usual with no fixes from any subtree.

  Current release - regressions:

   - core: fix race of rtnl_net_lock(dev_net(dev))

  Previous releases - regressions:

   - core: remove the single page frag cache for good

   - flow_dissector: fix handling of mixed port and port-range keys

   - sched: cls_api: fix error handling causing NULL dereference

   - tcp:
       - adjust rcvq_space after updating scaling ratio
       - drop secpath at the same time as we currently drop dst

   - eth: gtp: suppress list corruption splat in gtp_net_exit_batch_rtnl().

  Previous releases - always broken:

   - vsock:
       - fix variables initialization during resuming
       - for connectible sockets allow only connected

   - eth:
       - geneve: fix use-after-free in geneve_find_dev()
       - ibmvnic: don't reference skb after sending to VIOS"

* tag 'net-6.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (34 commits)
  Revert "net: skb: introduce and use a single page frag cache"
  net: allow small head cache usage with large MAX_SKB_FRAGS values
  nfp: bpf: Add check for nfp_app_ctrl_msg_alloc()
  tcp: drop secpath at the same time as we currently drop dst
  net: axienet: Set mac_managed_pm
  arp: switch to dev_getbyhwaddr() in arp_req_set_public()
  net: Add non-RCU dev_getbyhwaddr() helper
  sctp: Fix undefined behavior in left shift operation
  selftests/bpf: Add a specific dst port matching
  flow_dissector: Fix port range key handling in BPF conversion
  selftests/net/forwarding: Add a test case for tc-flower of mixed port and port-range
  flow_dissector: Fix handling of mixed port and port-range keys
  geneve: Suppress list corruption splat in geneve_destroy_tunnels().
  gtp: Suppress list corruption splat in gtp_net_exit_batch_rtnl().
  dev: Use rtnl_net_dev_lock() in unregister_netdev().
  net: Fix dev_net(dev) race in unregister_netdevice_notifier_dev_net().
  net: Add net_passive_inc() and net_passive_dec().
  net: pse-pd: pd692x0: Fix power limit retrieval
  MAINTAINERS: trim the GVE entry
  gve: set xdp redirect target only when it is available
  ...
parents e9a8cac0 dd3188dd
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -9829,8 +9829,7 @@ F: drivers/input/touchscreen/goodix*
GOOGLE ETHERNET DRIVERS
M:	Jeroen de Borst <jeroendb@google.com>
M:	Praveen Kaligineedi <pkaligineedi@google.com>
R:	Shailend Chand <shailend@google.com>
M:	Harshitha Ramamurthy <hramamurthy@google.com>
L:	netdev@vger.kernel.org
S:	Maintained
F:	Documentation/networking/device_drivers/ethernet/google/gve.rst
@@ -16472,6 +16471,12 @@ F: net/ethtool/cabletest.c
F:	tools/testing/selftests/drivers/net/*/ethtool*
K:	cable_test
NETWORKING [ETHTOOL MAC MERGE]
M:	Vladimir Oltean <vladimir.oltean@nxp.com>
F:	net/ethtool/mm.c
F:	tools/testing/selftests/drivers/net/hw/ethtool_mm.sh
K:	ethtool_mm
NETWORKING [GENERAL]
M:	"David S. Miller" <davem@davemloft.net>
M:	Eric Dumazet <edumazet@google.com>
+10 −0
Original line number Diff line number Diff line
@@ -1116,6 +1116,16 @@ static inline u32 gve_xdp_tx_start_queue_id(struct gve_priv *priv)
	return gve_xdp_tx_queue_id(priv, 0);
}

static inline bool gve_supports_xdp_xmit(struct gve_priv *priv)
{
	switch (priv->queue_format) {
	case GVE_GQI_QPL_FORMAT:
		return true;
	default:
		return false;
	}
}

/* gqi napi handler defined in gve_main.c */
int gve_napi_poll(struct napi_struct *napi, int budget);

+5 −1
Original line number Diff line number Diff line
@@ -1903,6 +1903,8 @@ static void gve_turndown(struct gve_priv *priv)
	/* Stop tx queues */
	netif_tx_disable(priv->dev);

	xdp_features_clear_redirect_target(priv->dev);

	gve_clear_napi_enabled(priv);
	gve_clear_report_stats(priv);

@@ -1972,6 +1974,9 @@ static void gve_turnup(struct gve_priv *priv)
		napi_schedule(&block->napi);
	}

	if (priv->num_xdp_queues && gve_supports_xdp_xmit(priv))
		xdp_features_set_redirect_target(priv->dev, false);

	gve_set_napi_enabled(priv);
}

@@ -2246,7 +2251,6 @@ static void gve_set_netdev_xdp_features(struct gve_priv *priv)
	if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
		xdp_features = NETDEV_XDP_ACT_BASIC;
		xdp_features |= NETDEV_XDP_ACT_REDIRECT;
		xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
		xdp_features |= NETDEV_XDP_ACT_XSK_ZEROCOPY;
	} else {
		xdp_features = 0;
+3 −1
Original line number Diff line number Diff line
@@ -2408,6 +2408,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
	dma_addr_t data_dma_addr;
	struct netdev_queue *txq;
	unsigned long lpar_rc;
	unsigned int skblen;
	union sub_crq tx_crq;
	unsigned int offset;
	bool use_scrq_send_direct = false;
@@ -2522,6 +2523,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
	tx_buff->skb = skb;
	tx_buff->index = bufidx;
	tx_buff->pool_index = queue_num;
	skblen = skb->len;

	memset(&tx_crq, 0, sizeof(tx_crq));
	tx_crq.v1.first = IBMVNIC_CRQ_CMD;
@@ -2614,7 +2616,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
		netif_stop_subqueue(netdev, queue_num);
	}

	tx_bytes += skb->len;
	tx_bytes += skblen;
	txq_trans_cond_update(txq);
	ret = NETDEV_TX_OK;
	goto out;
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ nfp_bpf_cmsg_alloc(struct nfp_app_bpf *bpf, unsigned int size)
	struct sk_buff *skb;

	skb = nfp_app_ctrl_msg_alloc(bpf->app, size, GFP_KERNEL);
	if (!skb)
		return NULL;
	skb_put(skb, size);

	return skb;
Loading