Commit 51b35d4f authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files
Merge in late fixes to prepare for the 6.11 net-next PR.

Conflicts:
  93c3a96c ("net: pse-pd: Do not return EOPNOSUPP if config is null")
  4cddb0f1 ("net: ethtool: pse-pd: Fix possible null-deref")
  30d7b672 ("net: ethtool: Add new power limit get and set features")
https://lore.kernel.org/20240715123204.623520bb@canb.auug.org.au/



Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents af58de31 0a1868b9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -973,6 +973,7 @@ static int netconsole_netdev_event(struct notifier_block *this,
				/* rtnl_lock already held
				 * we might sleep in __netpoll_cleanup()
				 */
				nt->enabled = false;
				spin_unlock_irqrestore(&target_list_lock, flags);

				__netpoll_cleanup(&nt->np);
@@ -980,7 +981,6 @@ static int netconsole_netdev_event(struct notifier_block *this,
				spin_lock_irqsave(&target_list_lock, flags);
				netdev_put(nt->np.dev, &nt->np.dev_tracker);
				nt->np.dev = NULL;
				nt->enabled = false;
				stopped = true;
				netconsole_target_put(nt);
				goto restart;
+2 −2
Original line number Diff line number Diff line
@@ -832,13 +832,13 @@ int pse_ethtool_set_config(struct pse_control *psec,
{
	int err = 0;

	if (pse_has_c33(psec)) {
	if (pse_has_c33(psec) && config->c33_admin_control) {
		err = pse_ethtool_c33_set_config(psec, config);
		if (err)
			return err;
	}

	if (pse_has_podl(psec))
	if (pse_has_podl(psec) && config->podl_admin_control)
		err = pse_ethtool_podl_set_config(psec, config);

	return err;
+14 −6
Original line number Diff line number Diff line
@@ -127,18 +127,26 @@ void rt6_age_exceptions(struct fib6_info *f6i, struct fib6_gc_args *gc_args,

static inline int ip6_route_get_saddr(struct net *net, struct fib6_info *f6i,
				      const struct in6_addr *daddr,
				      unsigned int prefs,
				      unsigned int prefs, int l3mdev_index,
				      struct in6_addr *saddr)
{
	struct net_device *l3mdev;
	struct net_device *dev;
	bool same_vrf;
	int err = 0;

	if (f6i && f6i->fib6_prefsrc.plen) {
	rcu_read_lock();

	l3mdev = dev_get_by_index_rcu(net, l3mdev_index);
	if (!f6i || !f6i->fib6_prefsrc.plen || l3mdev)
		dev = f6i ? fib6_info_nh_dev(f6i) : NULL;
	same_vrf = !l3mdev || l3mdev_master_dev_rcu(dev) == l3mdev;
	if (f6i && f6i->fib6_prefsrc.plen && same_vrf)
		*saddr = f6i->fib6_prefsrc.addr;
	} else {
		struct net_device *dev = f6i ? fib6_info_nh_dev(f6i) : NULL;
	else
		err = ipv6_dev_get_saddr(net, same_vrf ? dev : l3mdev, daddr, prefs, saddr);

		err = ipv6_dev_get_saddr(net, dev, daddr, prefs, saddr);
	}
	rcu_read_unlock();

	return err;
}
+10 −26
Original line number Diff line number Diff line
@@ -178,7 +178,10 @@ struct xfrm_state {
		struct hlist_node	gclist;
		struct hlist_node	bydst;
	};
	union {
		struct hlist_node	dev_gclist;
		struct hlist_node	bysrc;
	};
	struct hlist_node	byspi;
	struct hlist_node	byseq;

@@ -1592,7 +1595,7 @@ void xfrm_state_update_stats(struct net *net);
static inline void xfrm_dev_state_update_stats(struct xfrm_state *x)
{
	struct xfrm_dev_offload *xdo = &x->xso;
	struct net_device *dev = xdo->dev;
	struct net_device *dev = READ_ONCE(xdo->dev);

	if (dev && dev->xfrmdev_ops &&
	    dev->xfrmdev_ops->xdo_dev_state_update_stats)
@@ -1950,13 +1953,16 @@ int xfrm_dev_policy_add(struct net *net, struct xfrm_policy *xp,
			struct xfrm_user_offload *xuo, u8 dir,
			struct netlink_ext_ack *extack);
bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x);
void xfrm_dev_state_delete(struct xfrm_state *x);
void xfrm_dev_state_free(struct xfrm_state *x);

static inline void xfrm_dev_state_advance_esn(struct xfrm_state *x)
{
	struct xfrm_dev_offload *xso = &x->xso;
	struct net_device *dev = READ_ONCE(xso->dev);

	if (xso->dev && xso->dev->xfrmdev_ops->xdo_dev_state_advance_esn)
		xso->dev->xfrmdev_ops->xdo_dev_state_advance_esn(x);
	if (dev && dev->xfrmdev_ops->xdo_dev_state_advance_esn)
		dev->xfrmdev_ops->xdo_dev_state_advance_esn(x);
}

static inline bool xfrm_dst_offload_ok(struct dst_entry *dst)
@@ -1977,28 +1983,6 @@ static inline bool xfrm_dst_offload_ok(struct dst_entry *dst)
	return false;
}

static inline void xfrm_dev_state_delete(struct xfrm_state *x)
{
	struct xfrm_dev_offload *xso = &x->xso;

	if (xso->dev)
		xso->dev->xfrmdev_ops->xdo_dev_state_delete(x);
}

static inline void xfrm_dev_state_free(struct xfrm_state *x)
{
	struct xfrm_dev_offload *xso = &x->xso;
	struct net_device *dev = xso->dev;

	if (dev && dev->xfrmdev_ops) {
		if (dev->xfrmdev_ops->xdo_dev_state_free)
			dev->xfrmdev_ops->xdo_dev_state_free(x);
		xso->dev = NULL;
		xso->type = XFRM_DEV_OFFLOAD_UNSPECIFIED;
		netdev_put(dev, &xso->dev_tracker);
	}
}

static inline void xfrm_dev_policy_delete(struct xfrm_policy *x)
{
	struct xfrm_dev_offload *xdo = &x->xdo;
+2 −2
Original line number Diff line number Diff line
@@ -25,8 +25,8 @@ static inline int should_deliver(const struct net_bridge_port *p,

	vg = nbp_vlan_group_rcu(p);
	return ((p->flags & BR_HAIRPIN_MODE) || skb->dev != p->dev) &&
		p->state == BR_STATE_FORWARDING && br_allowed_egress(vg, skb) &&
		nbp_switchdev_allowed_egress(p, skb) &&
		(br_mst_is_enabled(p->br) || p->state == BR_STATE_FORWARDING) &&
		br_allowed_egress(vg, skb) && nbp_switchdev_allowed_egress(p, skb) &&
		!br_skb_isolated(p, skb);
}

Loading