]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop a bunch of networking devlink patches as they are too much
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Jun 2023 19:41:13 +0000 (21:41 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Jun 2023 19:41:13 +0000 (21:41 +0200)
Too many unfixed later patches do not apply.

queue-6.1/net-add-gso_ipv4_max_size-and-gro_ipv4_max_size-per-.patch [deleted file]
queue-6.1/net-devlink-convert-devlink-port-type-specific-point.patch [deleted file]
queue-6.1/net-devlink-move-port_type_netdev_checks-call-to-__d.patch [deleted file]
queue-6.1/net-devlink-move-port_type_warn_schedule-call-to-__d.patch [deleted file]
queue-6.1/net-devlink-take-rtnl-in-port_fill-function-only-if-.patch [deleted file]
queue-6.1/net-devlink-track-netdev-with-devlink_port-assigned.patch [deleted file]
queue-6.1/net-expose-devlink-port-over-rtnetlink.patch [deleted file]
queue-6.1/rtnetlink-add-the-missing-ifla_gro_-tb-check-in-vali.patch [deleted file]
queue-6.1/rtnetlink-call-validate_linkmsg-in-rtnl_create_link.patch
queue-6.1/rtnetlink-move-ifla_gso_-tb-check-to-validate_linkms.patch [deleted file]
queue-6.1/series

diff --git a/queue-6.1/net-add-gso_ipv4_max_size-and-gro_ipv4_max_size-per-.patch b/queue-6.1/net-add-gso_ipv4_max_size-and-gro_ipv4_max_size-per-.patch
deleted file mode 100644 (file)
index 2914588..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-From 1b6476dd699424b28a16a280bb327df8cdc65580 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sat, 28 Jan 2023 10:58:38 -0500
-Subject: net: add gso_ipv4_max_size and gro_ipv4_max_size per device
-
-From: Xin Long <lucien.xin@gmail.com>
-
-[ Upstream commit 9eefedd58ae1daece2ba907849a44db2941fb4b0 ]
-
-This patch introduces gso_ipv4_max_size and gro_ipv4_max_size
-per device and adds netlink attributes for them, so that IPV4
-BIG TCP can be guarded by a separate tunable in the next patch.
-
-To not break the old application using "gso/gro_max_size" for
-IPv4 GSO packets, this patch updates "gso/gro_ipv4_max_size"
-in netif_set_gso/gro_max_size() if the new size isn't greater
-than GSO_LEGACY_MAX_SIZE, so that nothing will change even if
-userspace doesn't realize the new netlink attributes.
-
-Signed-off-by: Xin Long <lucien.xin@gmail.com>
-Reviewed-by: David Ahern <dsahern@kernel.org>
-Reviewed-by: Eric Dumazet <edumazet@google.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- include/linux/netdevice.h    |  6 ++++++
- include/uapi/linux/if_link.h |  3 +++
- net/core/dev.c               |  4 ++++
- net/core/dev.h               | 18 ++++++++++++++++++
- net/core/rtnetlink.c         | 33 +++++++++++++++++++++++++++++++++
- 5 files changed, 64 insertions(+)
-
-diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 1f8e1cff035da..6d6ae5b1b681d 100644
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -1960,6 +1960,8 @@ enum netdev_ml_priv_type {
-  *    @gso_max_segs:  Maximum number of segments that can be passed to the
-  *                    NIC for GSO
-  *    @tso_max_segs:  Device (as in HW) limit on the max TSO segment count
-+ *    @gso_ipv4_max_size:     Maximum size of generic segmentation offload,
-+ *                            for IPv4.
-  *
-  *    @dcbnl_ops:     Data Center Bridging netlink ops
-  *    @num_tc:        Number of traffic classes in the net device
-@@ -2000,6 +2002,8 @@ enum netdev_ml_priv_type {
-  *                    keep a list of interfaces to be deleted.
-  *    @gro_max_size:  Maximum size of aggregated packet in generic
-  *                    receive offload (GRO)
-+ *    @gro_ipv4_max_size:     Maximum size of aggregated packet in generic
-+ *                            receive offload (GRO), for IPv4.
-  *
-  *    @dev_addr_shadow:       Copy of @dev_addr to catch direct writes.
-  *    @linkwatch_dev_tracker: refcount tracker used by linkwatch.
-@@ -2202,6 +2206,7 @@ struct net_device {
-  */
- #define GRO_MAX_SIZE          (8 * 65535u)
-       unsigned int            gro_max_size;
-+      unsigned int            gro_ipv4_max_size;
-       rx_handler_func_t __rcu *rx_handler;
-       void __rcu              *rx_handler_data;
-@@ -2325,6 +2330,7 @@ struct net_device {
-       u16                     gso_max_segs;
- #define TSO_MAX_SEGS          U16_MAX
-       u16                     tso_max_segs;
-+      unsigned int            gso_ipv4_max_size;
- #ifdef CONFIG_DCB
-       const struct dcbnl_rtnl_ops *dcbnl_ops;
-diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
-index 9af9da1db4e84..134b86568087c 100644
---- a/include/uapi/linux/if_link.h
-+++ b/include/uapi/linux/if_link.h
-@@ -374,6 +374,9 @@ enum {
-       IFLA_DEVLINK_PORT,
-+      IFLA_GSO_IPV4_MAX_SIZE,
-+      IFLA_GRO_IPV4_MAX_SIZE,
-+
-       __IFLA_MAX
- };
-diff --git a/net/core/dev.c b/net/core/dev.c
-index ba9a0c1a4c505..a633a9bf9329f 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -3010,6 +3010,8 @@ void netif_set_tso_max_size(struct net_device *dev, unsigned int size)
-       dev->tso_max_size = min(GSO_MAX_SIZE, size);
-       if (size < READ_ONCE(dev->gso_max_size))
-               netif_set_gso_max_size(dev, size);
-+      if (size < READ_ONCE(dev->gso_ipv4_max_size))
-+              netif_set_gso_ipv4_max_size(dev, size);
- }
- EXPORT_SYMBOL(netif_set_tso_max_size);
-@@ -10612,6 +10614,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
-       dev->gso_max_size = GSO_LEGACY_MAX_SIZE;
-       dev->gso_max_segs = GSO_MAX_SEGS;
-       dev->gro_max_size = GRO_LEGACY_MAX_SIZE;
-+      dev->gso_ipv4_max_size = GSO_LEGACY_MAX_SIZE;
-+      dev->gro_ipv4_max_size = GRO_LEGACY_MAX_SIZE;
-       dev->tso_max_size = TSO_LEGACY_MAX_SIZE;
-       dev->tso_max_segs = TSO_MAX_SEGS;
-       dev->upper_level = 1;
-diff --git a/net/core/dev.h b/net/core/dev.h
-index cbb8a925175a2..bd6584fcaf524 100644
---- a/net/core/dev.h
-+++ b/net/core/dev.h
-@@ -93,6 +93,8 @@ static inline void netif_set_gso_max_size(struct net_device *dev,
- {
-       /* dev->gso_max_size is read locklessly from sk_setup_caps() */
-       WRITE_ONCE(dev->gso_max_size, size);
-+      if (size <= GSO_LEGACY_MAX_SIZE)
-+              WRITE_ONCE(dev->gso_ipv4_max_size, size);
- }
- static inline void netif_set_gso_max_segs(struct net_device *dev,
-@@ -107,6 +109,22 @@ static inline void netif_set_gro_max_size(struct net_device *dev,
- {
-       /* This pairs with the READ_ONCE() in skb_gro_receive() */
-       WRITE_ONCE(dev->gro_max_size, size);
-+      if (size <= GRO_LEGACY_MAX_SIZE)
-+              WRITE_ONCE(dev->gro_ipv4_max_size, size);
-+}
-+
-+static inline void netif_set_gso_ipv4_max_size(struct net_device *dev,
-+                                             unsigned int size)
-+{
-+      /* dev->gso_ipv4_max_size is read locklessly from sk_setup_caps() */
-+      WRITE_ONCE(dev->gso_ipv4_max_size, size);
-+}
-+
-+static inline void netif_set_gro_ipv4_max_size(struct net_device *dev,
-+                                             unsigned int size)
-+{
-+      /* This pairs with the READ_ONCE() in skb_gro_receive() */
-+      WRITE_ONCE(dev->gro_ipv4_max_size, size);
- }
- #endif
-diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index d3727d9151c2a..027275235858b 100644
---- a/net/core/rtnetlink.c
-+++ b/net/core/rtnetlink.c
-@@ -1074,6 +1074,8 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
-              + nla_total_size(4) /* IFLA_GSO_MAX_SEGS */
-              + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */
-              + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */
-+             + nla_total_size(4) /* IFLA_GSO_IPV4_MAX_SIZE */
-+             + nla_total_size(4) /* IFLA_GRO_IPV4_MAX_SIZE */
-              + nla_total_size(4) /* IFLA_TSO_MAX_SIZE */
-              + nla_total_size(4) /* IFLA_TSO_MAX_SEGS */
-              + nla_total_size(1) /* IFLA_OPERSTATE */
-@@ -1807,6 +1809,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
-           nla_put_u32(skb, IFLA_GSO_MAX_SEGS, dev->gso_max_segs) ||
-           nla_put_u32(skb, IFLA_GSO_MAX_SIZE, dev->gso_max_size) ||
-           nla_put_u32(skb, IFLA_GRO_MAX_SIZE, dev->gro_max_size) ||
-+          nla_put_u32(skb, IFLA_GSO_IPV4_MAX_SIZE, dev->gso_ipv4_max_size) ||
-+          nla_put_u32(skb, IFLA_GRO_IPV4_MAX_SIZE, dev->gro_ipv4_max_size) ||
-           nla_put_u32(skb, IFLA_TSO_MAX_SIZE, dev->tso_max_size) ||
-           nla_put_u32(skb, IFLA_TSO_MAX_SEGS, dev->tso_max_segs) ||
- #ifdef CONFIG_RPS
-@@ -1968,6 +1972,8 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
-       [IFLA_TSO_MAX_SIZE]     = { .type = NLA_REJECT },
-       [IFLA_TSO_MAX_SEGS]     = { .type = NLA_REJECT },
-       [IFLA_ALLMULTI]         = { .type = NLA_REJECT },
-+      [IFLA_GSO_IPV4_MAX_SIZE]        = { .type = NLA_U32 },
-+      [IFLA_GRO_IPV4_MAX_SIZE]        = { .type = NLA_U32 },
- };
- static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
-@@ -2883,6 +2889,29 @@ static int do_setlink(const struct sk_buff *skb,
-               }
-       }
-+      if (tb[IFLA_GSO_IPV4_MAX_SIZE]) {
-+              u32 max_size = nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]);
-+
-+              if (max_size > dev->tso_max_size) {
-+                      err = -EINVAL;
-+                      goto errout;
-+              }
-+
-+              if (dev->gso_ipv4_max_size ^ max_size) {
-+                      netif_set_gso_ipv4_max_size(dev, max_size);
-+                      status |= DO_SETLINK_MODIFIED;
-+              }
-+      }
-+
-+      if (tb[IFLA_GRO_IPV4_MAX_SIZE]) {
-+              u32 gro_max_size = nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]);
-+
-+              if (dev->gro_ipv4_max_size ^ gro_max_size) {
-+                      netif_set_gro_ipv4_max_size(dev, gro_max_size);
-+                      status |= DO_SETLINK_MODIFIED;
-+              }
-+      }
-+
-       if (tb[IFLA_OPERSTATE])
-               set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
-@@ -3329,6 +3358,10 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname,
-               netif_set_gso_max_segs(dev, nla_get_u32(tb[IFLA_GSO_MAX_SEGS]));
-       if (tb[IFLA_GRO_MAX_SIZE])
-               netif_set_gro_max_size(dev, nla_get_u32(tb[IFLA_GRO_MAX_SIZE]));
-+      if (tb[IFLA_GSO_IPV4_MAX_SIZE])
-+              netif_set_gso_ipv4_max_size(dev, nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]));
-+      if (tb[IFLA_GRO_IPV4_MAX_SIZE])
-+              netif_set_gro_ipv4_max_size(dev, nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]));
-       return dev;
- }
--- 
-2.39.2
-
diff --git a/queue-6.1/net-devlink-convert-devlink-port-type-specific-point.patch b/queue-6.1/net-devlink-convert-devlink-port-type-specific-point.patch
deleted file mode 100644 (file)
index 33bf358..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-From a3f6c7f0c515b5aedcd5e76921eb427033780600 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 2 Nov 2022 17:01:59 +0100
-Subject: net: devlink: convert devlink port type-specific pointers to union
-
-From: Jiri Pirko <jiri@nvidia.com>
-
-[ Upstream commit 3830c5719af66fac9849cf5fb04b03d4e4bb46ff ]
-
-Instead of storing type_dev as a void pointer, convert it to union and
-use it to store either struct net_device or struct ib_device pointer.
-
-Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- include/net/devlink.h | 13 ++++++++++---
- net/core/devlink.c    | 17 +++++++++++++----
- 2 files changed, 23 insertions(+), 7 deletions(-)
-
-diff --git a/include/net/devlink.h b/include/net/devlink.h
-index ba6b8b0949432..6c55aabaedf19 100644
---- a/include/net/devlink.h
-+++ b/include/net/devlink.h
-@@ -121,12 +121,19 @@ struct devlink_port {
-       struct list_head region_list;
-       struct devlink *devlink;
-       unsigned int index;
--      spinlock_t type_lock; /* Protects type and type_dev
--                             * pointer consistency.
-+      spinlock_t type_lock; /* Protects type and type_eth/ib
-+                             * structures consistency.
-                              */
-       enum devlink_port_type type;
-       enum devlink_port_type desired_type;
--      void *type_dev;
-+      union {
-+              struct {
-+                      struct net_device *netdev;
-+              } type_eth;
-+              struct {
-+                      struct ib_device *ibdev;
-+              } type_ib;
-+      };
-       struct devlink_port_attrs attrs;
-       u8 attrs_set:1,
-          switch_port:1,
-diff --git a/net/core/devlink.c b/net/core/devlink.c
-index 2aa77d4b80d0a..4f95987e02234 100644
---- a/net/core/devlink.c
-+++ b/net/core/devlink.c
-@@ -1303,7 +1303,7 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
-               goto nla_put_failure_type_locked;
-       if (devlink_port->type == DEVLINK_PORT_TYPE_ETH) {
-               struct net *net = devlink_net(devlink_port->devlink);
--              struct net_device *netdev = devlink_port->type_dev;
-+              struct net_device *netdev = devlink_port->type_eth.netdev;
-               if (netdev && net_eq(net, dev_net(netdev)) &&
-                   (nla_put_u32(msg, DEVLINK_ATTR_PORT_NETDEV_IFINDEX,
-@@ -1313,7 +1313,7 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
-                       goto nla_put_failure_type_locked;
-       }
-       if (devlink_port->type == DEVLINK_PORT_TYPE_IB) {
--              struct ib_device *ibdev = devlink_port->type_dev;
-+              struct ib_device *ibdev = devlink_port->type_ib.ibdev;
-               if (ibdev &&
-                   nla_put_string(msg, DEVLINK_ATTR_PORT_IBDEV_NAME,
-@@ -10006,7 +10006,16 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
-       devlink_port_type_warn_cancel(devlink_port);
-       spin_lock_bh(&devlink_port->type_lock);
-       devlink_port->type = type;
--      devlink_port->type_dev = type_dev;
-+      switch (type) {
-+      case DEVLINK_PORT_TYPE_ETH:
-+              devlink_port->type_eth.netdev = type_dev;
-+              break;
-+      case DEVLINK_PORT_TYPE_IB:
-+              devlink_port->type_ib.ibdev = type_dev;
-+              break;
-+      default:
-+              break;
-+      }
-       spin_unlock_bh(&devlink_port->type_lock);
-       devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
- }
-@@ -12021,7 +12030,7 @@ devlink_trap_report_metadata_set(struct devlink_trap_metadata *metadata,
-       spin_lock(&in_devlink_port->type_lock);
-       if (in_devlink_port->type == DEVLINK_PORT_TYPE_ETH)
--              metadata->input_dev = in_devlink_port->type_dev;
-+              metadata->input_dev = in_devlink_port->type_eth.netdev;
-       spin_unlock(&in_devlink_port->type_lock);
- }
--- 
-2.39.2
-
diff --git a/queue-6.1/net-devlink-move-port_type_netdev_checks-call-to-__d.patch b/queue-6.1/net-devlink-move-port_type_netdev_checks-call-to-__d.patch
deleted file mode 100644 (file)
index 04f17e3..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-From 6c123dd21384cb6ba0ea718cdc92231237ad2624 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 2 Nov 2022 17:02:01 +0100
-Subject: net: devlink: move port_type_netdev_checks() call to
- __devlink_port_type_set()
-
-From: Jiri Pirko <jiri@nvidia.com>
-
-[ Upstream commit 45791e0d00c445936bb19535fe847083b1edd26d ]
-
-As __devlink_port_type_set() is going to be called directly from netdevice
-notifier event handle in one of the follow-up patches, move the
-port_type_netdev_checks() call there.
-
-Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/core/devlink.c | 63 ++++++++++++++++++++++++----------------------
- 1 file changed, 33 insertions(+), 30 deletions(-)
-
-diff --git a/net/core/devlink.c b/net/core/devlink.c
-index 8a8d838c53cfa..7d7fc61a62553 100644
---- a/net/core/devlink.c
-+++ b/net/core/devlink.c
-@@ -9997,33 +9997,6 @@ void devlink_port_unregister(struct devlink_port *devlink_port)
- }
- EXPORT_SYMBOL_GPL(devlink_port_unregister);
--static void __devlink_port_type_set(struct devlink_port *devlink_port,
--                                  enum devlink_port_type type,
--                                  void *type_dev)
--{
--      ASSERT_DEVLINK_PORT_REGISTERED(devlink_port);
--
--      if (type == DEVLINK_PORT_TYPE_NOTSET)
--              devlink_port_type_warn_schedule(devlink_port);
--      else
--              devlink_port_type_warn_cancel(devlink_port);
--
--      spin_lock_bh(&devlink_port->type_lock);
--      devlink_port->type = type;
--      switch (type) {
--      case DEVLINK_PORT_TYPE_ETH:
--              devlink_port->type_eth.netdev = type_dev;
--              break;
--      case DEVLINK_PORT_TYPE_IB:
--              devlink_port->type_ib.ibdev = type_dev;
--              break;
--      default:
--              break;
--      }
--      spin_unlock_bh(&devlink_port->type_lock);
--      devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
--}
--
- static void devlink_port_type_netdev_checks(struct devlink_port *devlink_port,
-                                           struct net_device *netdev)
- {
-@@ -10061,6 +10034,38 @@ static void devlink_port_type_netdev_checks(struct devlink_port *devlink_port,
-       }
- }
-+static void __devlink_port_type_set(struct devlink_port *devlink_port,
-+                                  enum devlink_port_type type,
-+                                  void *type_dev)
-+{
-+      struct net_device *netdev = type_dev;
-+
-+      ASSERT_DEVLINK_PORT_REGISTERED(devlink_port);
-+
-+      if (type == DEVLINK_PORT_TYPE_NOTSET) {
-+              devlink_port_type_warn_schedule(devlink_port);
-+      } else {
-+              devlink_port_type_warn_cancel(devlink_port);
-+              if (type == DEVLINK_PORT_TYPE_ETH && netdev)
-+                      devlink_port_type_netdev_checks(devlink_port, netdev);
-+      }
-+
-+      spin_lock_bh(&devlink_port->type_lock);
-+      devlink_port->type = type;
-+      switch (type) {
-+      case DEVLINK_PORT_TYPE_ETH:
-+              devlink_port->type_eth.netdev = netdev;
-+              break;
-+      case DEVLINK_PORT_TYPE_IB:
-+              devlink_port->type_ib.ibdev = type_dev;
-+              break;
-+      default:
-+              break;
-+      }
-+      spin_unlock_bh(&devlink_port->type_lock);
-+      devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
-+}
-+
- /**
-  *    devlink_port_type_eth_set - Set port type to Ethernet
-  *
-@@ -10070,9 +10075,7 @@ static void devlink_port_type_netdev_checks(struct devlink_port *devlink_port,
- void devlink_port_type_eth_set(struct devlink_port *devlink_port,
-                              struct net_device *netdev)
- {
--      if (netdev)
--              devlink_port_type_netdev_checks(devlink_port, netdev);
--      else
-+      if (!netdev)
-               dev_warn(devlink_port->devlink->dev,
-                        "devlink port type for port %d set to Ethernet without a software interface reference, device type not supported by the kernel?\n",
-                        devlink_port->index);
--- 
-2.39.2
-
diff --git a/queue-6.1/net-devlink-move-port_type_warn_schedule-call-to-__d.patch b/queue-6.1/net-devlink-move-port_type_warn_schedule-call-to-__d.patch
deleted file mode 100644 (file)
index 3c01601..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From 30acfeed998f4bfd42d905c2d63c335a6c098697 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 2 Nov 2022 17:02:00 +0100
-Subject: net: devlink: move port_type_warn_schedule() call to
- __devlink_port_type_set()
-
-From: Jiri Pirko <jiri@nvidia.com>
-
-[ Upstream commit 8573a04404ddacb2d966eef09bf38b2ad6dbe86f ]
-
-As __devlink_port_type_set() is going to be called directly from netdevice
-notifier event handle in one of the follow-up patches, move the
-port_type_warn_schedule() call there.
-
-Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/core/devlink.c | 7 +++++--
- 1 file changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/net/core/devlink.c b/net/core/devlink.c
-index 4f95987e02234..8a8d838c53cfa 100644
---- a/net/core/devlink.c
-+++ b/net/core/devlink.c
-@@ -10003,7 +10003,11 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
- {
-       ASSERT_DEVLINK_PORT_REGISTERED(devlink_port);
--      devlink_port_type_warn_cancel(devlink_port);
-+      if (type == DEVLINK_PORT_TYPE_NOTSET)
-+              devlink_port_type_warn_schedule(devlink_port);
-+      else
-+              devlink_port_type_warn_cancel(devlink_port);
-+
-       spin_lock_bh(&devlink_port->type_lock);
-       devlink_port->type = type;
-       switch (type) {
-@@ -10098,7 +10102,6 @@ EXPORT_SYMBOL_GPL(devlink_port_type_ib_set);
- void devlink_port_type_clear(struct devlink_port *devlink_port)
- {
-       __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_NOTSET, NULL);
--      devlink_port_type_warn_schedule(devlink_port);
- }
- EXPORT_SYMBOL_GPL(devlink_port_type_clear);
--- 
-2.39.2
-
diff --git a/queue-6.1/net-devlink-take-rtnl-in-port_fill-function-only-if-.patch b/queue-6.1/net-devlink-take-rtnl-in-port_fill-function-only-if-.patch
deleted file mode 100644 (file)
index 81b91fb..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-From 68d81614aec1851d3e794c9cc8a5ad703d0234ad Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 2 Nov 2022 17:02:02 +0100
-Subject: net: devlink: take RTNL in port_fill() function only if it is not
- held
-
-From: Jiri Pirko <jiri@nvidia.com>
-
-[ Upstream commit d41c9dbd12745cfc1cb2946cd99016d83c2c5364 ]
-
-Follow-up patch is going to introduce a netdevice notifier event
-processing which is called with RTNL mutex held. Processing of this will
-eventually lead to call to port_notity() and port_fill() which currently
-takes RTNL mutex internally. So as a temporary solution, propagate a
-bool indicating if the mutex is already held. This will go away in one
-of the follow-up patches.
-
-Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/core/devlink.c | 46 +++++++++++++++++++++++++++++++---------------
- 1 file changed, 31 insertions(+), 15 deletions(-)
-
-diff --git a/net/core/devlink.c b/net/core/devlink.c
-index 7d7fc61a62553..79cfba316438c 100644
---- a/net/core/devlink.c
-+++ b/net/core/devlink.c
-@@ -1278,7 +1278,8 @@ devlink_nl_port_function_attrs_put(struct sk_buff *msg, struct devlink_port *por
- static int devlink_nl_port_fill(struct sk_buff *msg,
-                               struct devlink_port *devlink_port,
-                               enum devlink_command cmd, u32 portid, u32 seq,
--                              int flags, struct netlink_ext_ack *extack)
-+                              int flags, struct netlink_ext_ack *extack,
-+                              bool rtnl_held)
- {
-       struct devlink *devlink = devlink_port->devlink;
-       void *hdr;
-@@ -1293,7 +1294,8 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
-               goto nla_put_failure;
-       /* Hold rtnl lock while accessing port's netdev attributes. */
--      rtnl_lock();
-+      if (!rtnl_held)
-+              rtnl_lock();
-       spin_lock_bh(&devlink_port->type_lock);
-       if (nla_put_u16(msg, DEVLINK_ATTR_PORT_TYPE, devlink_port->type))
-               goto nla_put_failure_type_locked;
-@@ -1321,7 +1323,8 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
-                       goto nla_put_failure_type_locked;
-       }
-       spin_unlock_bh(&devlink_port->type_lock);
--      rtnl_unlock();
-+      if (!rtnl_held)
-+              rtnl_unlock();
-       if (devlink_nl_port_attrs_put(msg, devlink_port))
-               goto nla_put_failure;
-       if (devlink_nl_port_function_attrs_put(msg, devlink_port, extack))
-@@ -1336,14 +1339,15 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
- nla_put_failure_type_locked:
-       spin_unlock_bh(&devlink_port->type_lock);
--      rtnl_unlock();
-+      if (!rtnl_held)
-+              rtnl_unlock();
- nla_put_failure:
-       genlmsg_cancel(msg, hdr);
-       return -EMSGSIZE;
- }
--static void devlink_port_notify(struct devlink_port *devlink_port,
--                              enum devlink_command cmd)
-+static void __devlink_port_notify(struct devlink_port *devlink_port,
-+                                enum devlink_command cmd, bool rtnl_held)
- {
-       struct devlink *devlink = devlink_port->devlink;
-       struct sk_buff *msg;
-@@ -1358,7 +1362,8 @@ static void devlink_port_notify(struct devlink_port *devlink_port,
-       if (!msg)
-               return;
--      err = devlink_nl_port_fill(msg, devlink_port, cmd, 0, 0, 0, NULL);
-+      err = devlink_nl_port_fill(msg, devlink_port, cmd, 0, 0, 0, NULL,
-+                                 rtnl_held);
-       if (err) {
-               nlmsg_free(msg);
-               return;
-@@ -1368,6 +1373,12 @@ static void devlink_port_notify(struct devlink_port *devlink_port,
-                               0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL);
- }
-+static void devlink_port_notify(struct devlink_port *devlink_port,
-+                              enum devlink_command cmd)
-+{
-+      __devlink_port_notify(devlink_port, cmd, false);
-+}
-+
- static void devlink_rate_notify(struct devlink_rate *devlink_rate,
-                               enum devlink_command cmd)
- {
-@@ -1534,7 +1545,7 @@ static int devlink_nl_cmd_port_get_doit(struct sk_buff *skb,
-       err = devlink_nl_port_fill(msg, devlink_port, DEVLINK_CMD_PORT_NEW,
-                                  info->snd_portid, info->snd_seq, 0,
--                                 info->extack);
-+                                 info->extack, false);
-       if (err) {
-               nlmsg_free(msg);
-               return err;
-@@ -1564,7 +1575,8 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
-                                                  DEVLINK_CMD_NEW,
-                                                  NETLINK_CB(cb->skb).portid,
-                                                  cb->nlh->nlmsg_seq,
--                                                 NLM_F_MULTI, cb->extack);
-+                                                 NLM_F_MULTI, cb->extack,
-+                                                 false);
-                       if (err) {
-                               devl_unlock(devlink);
-                               devlink_put(devlink);
-@@ -1776,7 +1788,8 @@ static int devlink_port_new_notify(struct devlink *devlink,
-       }
-       err = devlink_nl_port_fill(msg, devlink_port, DEVLINK_CMD_NEW,
--                                 info->snd_portid, info->snd_seq, 0, NULL);
-+                                 info->snd_portid, info->snd_seq, 0, NULL,
-+                                 false);
-       if (err)
-               goto out;
-@@ -10036,7 +10049,7 @@ static void devlink_port_type_netdev_checks(struct devlink_port *devlink_port,
- static void __devlink_port_type_set(struct devlink_port *devlink_port,
-                                   enum devlink_port_type type,
--                                  void *type_dev)
-+                                  void *type_dev, bool rtnl_held)
- {
-       struct net_device *netdev = type_dev;
-@@ -10063,7 +10076,7 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
-               break;
-       }
-       spin_unlock_bh(&devlink_port->type_lock);
--      devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
-+      __devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW, rtnl_held);
- }
- /**
-@@ -10080,7 +10093,8 @@ void devlink_port_type_eth_set(struct devlink_port *devlink_port,
-                        "devlink port type for port %d set to Ethernet without a software interface reference, device type not supported by the kernel?\n",
-                        devlink_port->index);
--      __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev);
-+      __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev,
-+                              false);
- }
- EXPORT_SYMBOL_GPL(devlink_port_type_eth_set);
-@@ -10093,7 +10107,8 @@ EXPORT_SYMBOL_GPL(devlink_port_type_eth_set);
- void devlink_port_type_ib_set(struct devlink_port *devlink_port,
-                             struct ib_device *ibdev)
- {
--      __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_IB, ibdev);
-+      __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_IB, ibdev,
-+                              false);
- }
- EXPORT_SYMBOL_GPL(devlink_port_type_ib_set);
-@@ -10104,7 +10119,8 @@ EXPORT_SYMBOL_GPL(devlink_port_type_ib_set);
-  */
- void devlink_port_type_clear(struct devlink_port *devlink_port)
- {
--      __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_NOTSET, NULL);
-+      __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_NOTSET, NULL,
-+                              false);
- }
- EXPORT_SYMBOL_GPL(devlink_port_type_clear);
--- 
-2.39.2
-
diff --git a/queue-6.1/net-devlink-track-netdev-with-devlink_port-assigned.patch b/queue-6.1/net-devlink-track-netdev-with-devlink_port-assigned.patch
deleted file mode 100644 (file)
index b3ea1de..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-From 71fe4bb7e1513846e9be4229e11c805d991d4768 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 2 Nov 2022 17:02:03 +0100
-Subject: net: devlink: track netdev with devlink_port assigned
-
-From: Jiri Pirko <jiri@nvidia.com>
-
-[ Upstream commit 02a68a47eadedf95748facfca6ced31fb0181d52 ]
-
-Currently, ethernet drivers are using devlink_port_type_eth_set() and
-devlink_port_type_clear() to set devlink port type and link to related
-netdev.
-
-Instead of calling them directly, let the driver use
-SET_NETDEV_DEVLINK_PORT macro to assign devlink_port pointer and let
-devlink to track it. Note the devlink port pointer is static during
-the time netdevice is registered.
-
-In devlink code, use per-namespace netdev notifier to track
-the netdevices with devlink_port assigned and change the internal
-devlink_port type and related type pointer accordingly.
-
-Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- include/linux/netdevice.h | 19 ++++++++++
- net/core/dev.c            | 14 +++++---
- net/core/devlink.c        | 75 ++++++++++++++++++++++++++++++++++++---
- 3 files changed, 99 insertions(+), 9 deletions(-)
-
-diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index eac51e22a52a8..1f8e1cff035da 100644
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -2008,6 +2008,11 @@ enum netdev_ml_priv_type {
-  *                                    registered
-  *    @offload_xstats_l3:     L3 HW stats for this netdevice.
-  *
-+ *    @devlink_port:  Pointer to related devlink port structure.
-+ *                    Assigned by a driver before netdev registration using
-+ *                    SET_NETDEV_DEVLINK_PORT macro. This pointer is static
-+ *                    during the time netdevice is registered.
-+ *
-  *    FIXME: cleanup struct net_device such that network protocol info
-  *    moves out.
-  */
-@@ -2358,9 +2363,22 @@ struct net_device {
-       netdevice_tracker       watchdog_dev_tracker;
-       netdevice_tracker       dev_registered_tracker;
-       struct rtnl_hw_stats64  *offload_xstats_l3;
-+
-+      struct devlink_port     *devlink_port;
- };
- #define to_net_dev(d) container_of(d, struct net_device, dev)
-+/*
-+ * Driver should use this to assign devlink port instance to a netdevice
-+ * before it registers the netdevice. Therefore devlink_port is static
-+ * during the netdev lifetime after it is registered.
-+ */
-+#define SET_NETDEV_DEVLINK_PORT(dev, port)                    \
-+({                                                            \
-+      WARN_ON((dev)->reg_state != NETREG_UNINITIALIZED);      \
-+      ((dev)->devlink_port = (port));                         \
-+})
-+
- static inline bool netif_elide_gro(const struct net_device *dev)
- {
-       if (!(dev->features & NETIF_F_GRO) || dev->xdp_prog)
-@@ -2795,6 +2813,7 @@ enum netdev_cmd {
-       NETDEV_PRE_TYPE_CHANGE,
-       NETDEV_POST_TYPE_CHANGE,
-       NETDEV_POST_INIT,
-+      NETDEV_PRE_UNINIT,
-       NETDEV_RELEASE,
-       NETDEV_NOTIFY_PEERS,
-       NETDEV_JOIN,
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 93d430693ca0f..ba9a0c1a4c505 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -1621,10 +1621,10 @@ const char *netdev_cmd_to_name(enum netdev_cmd cmd)
-       N(UP) N(DOWN) N(REBOOT) N(CHANGE) N(REGISTER) N(UNREGISTER)
-       N(CHANGEMTU) N(CHANGEADDR) N(GOING_DOWN) N(CHANGENAME) N(FEAT_CHANGE)
-       N(BONDING_FAILOVER) N(PRE_UP) N(PRE_TYPE_CHANGE) N(POST_TYPE_CHANGE)
--      N(POST_INIT) N(RELEASE) N(NOTIFY_PEERS) N(JOIN) N(CHANGEUPPER)
--      N(RESEND_IGMP) N(PRECHANGEMTU) N(CHANGEINFODATA) N(BONDING_INFO)
--      N(PRECHANGEUPPER) N(CHANGELOWERSTATE) N(UDP_TUNNEL_PUSH_INFO)
--      N(UDP_TUNNEL_DROP_INFO) N(CHANGE_TX_QUEUE_LEN)
-+      N(POST_INIT) N(PRE_UNINIT) N(RELEASE) N(NOTIFY_PEERS) N(JOIN)
-+      N(CHANGEUPPER) N(RESEND_IGMP) N(PRECHANGEMTU) N(CHANGEINFODATA)
-+      N(BONDING_INFO) N(PRECHANGEUPPER) N(CHANGELOWERSTATE)
-+      N(UDP_TUNNEL_PUSH_INFO) N(UDP_TUNNEL_DROP_INFO) N(CHANGE_TX_QUEUE_LEN)
-       N(CVLAN_FILTER_PUSH_INFO) N(CVLAN_FILTER_DROP_INFO)
-       N(SVLAN_FILTER_PUSH_INFO) N(SVLAN_FILTER_DROP_INFO)
-       N(PRE_CHANGEADDR) N(OFFLOAD_XSTATS_ENABLE) N(OFFLOAD_XSTATS_DISABLE)
-@@ -10064,7 +10064,7 @@ int register_netdevice(struct net_device *dev)
-       dev->reg_state = ret ? NETREG_UNREGISTERED : NETREG_REGISTERED;
-       write_unlock(&dev_base_lock);
-       if (ret)
--              goto err_uninit;
-+              goto err_uninit_notify;
-       __netdev_update_features(dev);
-@@ -10111,6 +10111,8 @@ int register_netdevice(struct net_device *dev)
- out:
-       return ret;
-+err_uninit_notify:
-+      call_netdevice_notifiers(NETDEV_PRE_UNINIT, dev);
- err_uninit:
-       if (dev->netdev_ops->ndo_uninit)
-               dev->netdev_ops->ndo_uninit(dev);
-@@ -10857,6 +10859,8 @@ void unregister_netdevice_many(struct list_head *head)
-               netdev_name_node_alt_flush(dev);
-               netdev_name_node_free(dev->name_node);
-+              call_netdevice_notifiers(NETDEV_PRE_UNINIT, dev);
-+
-               if (dev->netdev_ops->ndo_uninit)
-                       dev->netdev_ops->ndo_uninit(dev);
-diff --git a/net/core/devlink.c b/net/core/devlink.c
-index 79cfba316438c..4d167d3e84c62 100644
---- a/net/core/devlink.c
-+++ b/net/core/devlink.c
-@@ -71,6 +71,7 @@ struct devlink {
-       refcount_t refcount;
-       struct completion comp;
-       struct rcu_head rcu;
-+      struct notifier_block netdevice_nb;
-       char priv[] __aligned(NETDEV_ALIGN);
- };
-@@ -9618,6 +9619,9 @@ void devlink_set_features(struct devlink *devlink, u64 features)
- }
- EXPORT_SYMBOL_GPL(devlink_set_features);
-+static int devlink_netdevice_event(struct notifier_block *nb,
-+                                 unsigned long event, void *ptr);
-+
- /**
-  *    devlink_alloc_ns - Allocate new devlink instance resources
-  *    in specific namespace
-@@ -9648,10 +9652,13 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
-       ret = xa_alloc_cyclic(&devlinks, &devlink->index, devlink, xa_limit_31b,
-                             &last_id, GFP_KERNEL);
--      if (ret < 0) {
--              kfree(devlink);
--              return NULL;
--      }
-+      if (ret < 0)
-+              goto err_xa_alloc;
-+
-+      devlink->netdevice_nb.notifier_call = devlink_netdevice_event;
-+      ret = register_netdevice_notifier_net(net, &devlink->netdevice_nb);
-+      if (ret)
-+              goto err_register_netdevice_notifier;
-       devlink->dev = dev;
-       devlink->ops = ops;
-@@ -9678,6 +9685,12 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
-       init_completion(&devlink->comp);
-       return devlink;
-+
-+err_register_netdevice_notifier:
-+      xa_erase(&devlinks, devlink->index);
-+err_xa_alloc:
-+      kfree(devlink);
-+      return NULL;
- }
- EXPORT_SYMBOL_GPL(devlink_alloc_ns);
-@@ -9831,6 +9844,10 @@ void devlink_free(struct devlink *devlink)
-       WARN_ON(!list_empty(&devlink->port_list));
-       xa_destroy(&devlink->snapshot_ids);
-+
-+      unregister_netdevice_notifier_net(devlink_net(devlink),
-+                                        &devlink->netdevice_nb);
-+
-       xa_erase(&devlinks, devlink->index);
-       kfree(devlink);
-@@ -10124,6 +10141,56 @@ void devlink_port_type_clear(struct devlink_port *devlink_port)
- }
- EXPORT_SYMBOL_GPL(devlink_port_type_clear);
-+static int devlink_netdevice_event(struct notifier_block *nb,
-+                                 unsigned long event, void *ptr)
-+{
-+      struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
-+      struct devlink_port *devlink_port = netdev->devlink_port;
-+      struct devlink *devlink;
-+
-+      devlink = container_of(nb, struct devlink, netdevice_nb);
-+
-+      if (!devlink_port || devlink_port->devlink != devlink)
-+              return NOTIFY_OK;
-+
-+      switch (event) {
-+      case NETDEV_POST_INIT:
-+              /* Set the type but not netdev pointer. It is going to be set
-+               * later on by NETDEV_REGISTER event. Happens once during
-+               * netdevice register
-+               */
-+              __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH,
-+                                      NULL, true);
-+              break;
-+      case NETDEV_REGISTER:
-+              /* Set the netdev on top of previously set type. Note this
-+               * event happens also during net namespace change so here
-+               * we take into account netdev pointer appearing in this
-+               * namespace.
-+               */
-+              __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH,
-+                                      netdev, true);
-+              break;
-+      case NETDEV_UNREGISTER:
-+              /* Clear netdev pointer, but not the type. This event happens
-+               * also during net namespace change so we need to clear
-+               * pointer to netdev that is going to another net namespace.
-+               */
-+              __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH,
-+                                      NULL, true);
-+              break;
-+      case NETDEV_PRE_UNINIT:
-+              /* Clear the type and the netdev pointer. Happens one during
-+               * netdevice unregister.
-+               */
-+              __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_NOTSET,
-+                                      NULL, true);
-+              break;
-+      }
-+
-+      return NOTIFY_OK;
-+}
-+
- static int __devlink_port_attrs_set(struct devlink_port *devlink_port,
-                                   enum devlink_port_flavour flavour)
- {
--- 
-2.39.2
-
diff --git a/queue-6.1/net-expose-devlink-port-over-rtnetlink.patch b/queue-6.1/net-expose-devlink-port-over-rtnetlink.patch
deleted file mode 100644 (file)
index 645b578..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-From 96d23a5586e52e38e77bfbb6a937696d0857a85f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 2 Nov 2022 17:02:11 +0100
-Subject: net: expose devlink port over rtnetlink
-
-From: Jiri Pirko <jiri@nvidia.com>
-
-[ Upstream commit dca56c3038c34a3e5acfe0aadb1f2bc9d724ae79 ]
-
-Expose devlink port handle related to netdev over rtnetlink. Introduce a
-new nested IFLA attribute to carry the info. Call into devlink code to
-fill-up the nest with existing devlink attributes that are used over
-devlink netlink.
-
-Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Stable-dep-of: fef5b228dd38 ("rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- include/net/devlink.h        | 14 +++++++++++++
- include/uapi/linux/if_link.h |  2 ++
- net/core/devlink.c           | 18 +++++++++++++++++
- net/core/rtnetlink.c         | 39 ++++++++++++++++++++++++++++++++++++
- 4 files changed, 73 insertions(+)
-
-diff --git a/include/net/devlink.h b/include/net/devlink.h
-index 6c55aabaedf19..ebd678ab5519e 100644
---- a/include/net/devlink.h
-+++ b/include/net/devlink.h
-@@ -1872,6 +1872,9 @@ int devlink_compat_phys_port_name_get(struct net_device *dev,
- int devlink_compat_switch_id_get(struct net_device *dev,
-                                struct netdev_phys_item_id *ppid);
-+int devlink_nl_port_handle_fill(struct sk_buff *msg, struct devlink_port *devlink_port);
-+size_t devlink_nl_port_handle_size(struct devlink_port *devlink_port);
-+
- #else
- static inline struct devlink *devlink_try_get(struct devlink *devlink)
-@@ -1908,6 +1911,17 @@ devlink_compat_switch_id_get(struct net_device *dev,
-       return -EOPNOTSUPP;
- }
-+static inline int
-+devlink_nl_port_handle_fill(struct sk_buff *msg, struct devlink_port *devlink_port)
-+{
-+      return 0;
-+}
-+
-+static inline size_t devlink_nl_port_handle_size(struct devlink_port *devlink_port)
-+{
-+      return 0;
-+}
-+
- #endif
- #endif /* _NET_DEVLINK_H_ */
-diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
-index 5e7a1041df3a4..9af9da1db4e84 100644
---- a/include/uapi/linux/if_link.h
-+++ b/include/uapi/linux/if_link.h
-@@ -372,6 +372,8 @@ enum {
-       IFLA_TSO_MAX_SEGS,
-       IFLA_ALLMULTI,          /* Allmulti count: > 0 means acts ALLMULTI */
-+      IFLA_DEVLINK_PORT,
-+
-       __IFLA_MAX
- };
-diff --git a/net/core/devlink.c b/net/core/devlink.c
-index 4d167d3e84c62..fedbea59b5d39 100644
---- a/net/core/devlink.c
-+++ b/net/core/devlink.c
-@@ -880,6 +880,24 @@ static int devlink_nl_put_nested_handle(struct sk_buff *msg, struct devlink *dev
-       return -EMSGSIZE;
- }
-+int devlink_nl_port_handle_fill(struct sk_buff *msg, struct devlink_port *devlink_port)
-+{
-+      if (devlink_nl_put_handle(msg, devlink_port->devlink))
-+              return -EMSGSIZE;
-+      if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, devlink_port->index))
-+              return -EMSGSIZE;
-+      return 0;
-+}
-+
-+size_t devlink_nl_port_handle_size(struct devlink_port *devlink_port)
-+{
-+      struct devlink *devlink = devlink_port->devlink;
-+
-+      return nla_total_size(strlen(devlink->dev->bus->name) + 1) /* DEVLINK_ATTR_BUS_NAME */
-+           + nla_total_size(strlen(dev_name(devlink->dev)) + 1) /* DEVLINK_ATTR_DEV_NAME */
-+           + nla_total_size(4); /* DEVLINK_ATTR_PORT_INDEX */
-+}
-+
- struct devlink_reload_combination {
-       enum devlink_reload_action action;
-       enum devlink_reload_limit limit;
-diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index b192c69f3936c..d3727d9151c2a 100644
---- a/net/core/rtnetlink.c
-+++ b/net/core/rtnetlink.c
-@@ -53,6 +53,7 @@
- #include <net/fib_rules.h>
- #include <net/rtnetlink.h>
- #include <net/net_namespace.h>
-+#include <net/devlink.h>
- #include "dev.h"
-@@ -1038,6 +1039,16 @@ static size_t rtnl_proto_down_size(const struct net_device *dev)
-       return size;
- }
-+static size_t rtnl_devlink_port_size(const struct net_device *dev)
-+{
-+      size_t size = nla_total_size(0); /* nest IFLA_DEVLINK_PORT */
-+
-+      if (dev->devlink_port)
-+              size += devlink_nl_port_handle_size(dev->devlink_port);
-+
-+      return size;
-+}
-+
- static noinline size_t if_nlmsg_size(const struct net_device *dev,
-                                    u32 ext_filter_mask)
- {
-@@ -1091,6 +1102,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
-              + nla_total_size(4)  /* IFLA_MAX_MTU */
-              + rtnl_prop_list_size(dev)
-              + nla_total_size(MAX_ADDR_LEN) /* IFLA_PERM_ADDRESS */
-+             + rtnl_devlink_port_size(dev)
-              + 0;
- }
-@@ -1728,6 +1740,30 @@ static int rtnl_fill_proto_down(struct sk_buff *skb,
-       return -EMSGSIZE;
- }
-+static int rtnl_fill_devlink_port(struct sk_buff *skb,
-+                                const struct net_device *dev)
-+{
-+      struct nlattr *devlink_port_nest;
-+      int ret;
-+
-+      devlink_port_nest = nla_nest_start(skb, IFLA_DEVLINK_PORT);
-+      if (!devlink_port_nest)
-+              return -EMSGSIZE;
-+
-+      if (dev->devlink_port) {
-+              ret = devlink_nl_port_handle_fill(skb, dev->devlink_port);
-+              if (ret < 0)
-+                      goto nest_cancel;
-+      }
-+
-+      nla_nest_end(skb, devlink_port_nest);
-+      return 0;
-+
-+nest_cancel:
-+      nla_nest_cancel(skb, devlink_port_nest);
-+      return ret;
-+}
-+
- static int rtnl_fill_ifinfo(struct sk_buff *skb,
-                           struct net_device *dev, struct net *src_net,
-                           int type, u32 pid, u32 seq, u32 change,
-@@ -1865,6 +1901,9 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
-                          dev->dev.parent->bus->name))
-               goto nla_put_failure;
-+      if (rtnl_fill_devlink_port(skb, dev))
-+              goto nla_put_failure;
-+
-       nlmsg_end(skb, nlh);
-       return 0;
--- 
-2.39.2
-
diff --git a/queue-6.1/rtnetlink-add-the-missing-ifla_gro_-tb-check-in-vali.patch b/queue-6.1/rtnetlink-add-the-missing-ifla_gro_-tb-check-in-vali.patch
deleted file mode 100644 (file)
index 3166ee9..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-From 4e69ce98b1501f833b1cde2381fdfd81a52fdadf Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 31 May 2023 12:01:44 -0400
-Subject: rtnetlink: add the missing IFLA_GRO_ tb check in validate_linkmsg
-
-From: Xin Long <lucien.xin@gmail.com>
-
-[ Upstream commit 65d6914e253f3d83b724a9bbfc889ae95711e512 ]
-
-This fixes the issue that dev gro_max_size and gso_ipv4_max_size
-can be set to a huge value:
-
-  # ip link add dummy1 type dummy
-  # ip link set dummy1 gro_max_size 4294967295
-  # ip -d link show dummy1
-    dummy addrgenmode eui64 ... gro_max_size 4294967295
-
-Fixes: 0fe79f28bfaf ("net: allow gro_max_size to exceed 65536")
-Fixes: 9eefedd58ae1 ("net: add gso_ipv4_max_size and gro_ipv4_max_size per device")
-Reported-by: Xiumei Mu <xmu@redhat.com>
-Signed-off-by: Xin Long <lucien.xin@gmail.com>
-Reviewed-by: Simon Horman <simon.horman@corigine.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/core/rtnetlink.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index 99c1430cde345..91b50bdd848fe 100644
---- a/net/core/rtnetlink.c
-+++ b/net/core/rtnetlink.c
-@@ -2396,11 +2396,23 @@ static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[],
-                       return -EINVAL;
-               }
-+              if (tb[IFLA_GRO_MAX_SIZE] &&
-+                  nla_get_u32(tb[IFLA_GRO_MAX_SIZE]) > GRO_MAX_SIZE) {
-+                      NL_SET_ERR_MSG(extack, "too big gro_max_size");
-+                      return -EINVAL;
-+              }
-+
-               if (tb[IFLA_GSO_IPV4_MAX_SIZE] &&
-                   nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]) > dev->tso_max_size) {
-                       NL_SET_ERR_MSG(extack, "too big gso_ipv4_max_size");
-                       return -EINVAL;
-               }
-+
-+              if (tb[IFLA_GRO_IPV4_MAX_SIZE] &&
-+                  nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]) > GRO_MAX_SIZE) {
-+                      NL_SET_ERR_MSG(extack, "too big gro_ipv4_max_size");
-+                      return -EINVAL;
-+              }
-       }
-       if (tb[IFLA_AF_SPEC]) {
--- 
-2.39.2
-
index 863cc1ba17f4910656c37ab8e9b22efc02f26fae..39ff3bf11ba31eacf4db26abba0959e40284db1b 100644 (file)
@@ -1,11 +1,11 @@
-From 2bad0d28d345a30d75037080916b13deaca88a3e Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
+From b0ad3c179059089d809b477a1d445c1183a7b8fe Mon Sep 17 00:00:00 2001
+From: Xin Long <lucien.xin@gmail.com>
 Date: Wed, 31 May 2023 12:01:42 -0400
 Subject: rtnetlink: call validate_linkmsg in rtnl_create_link
 
 From: Xin Long <lucien.xin@gmail.com>
 
-[ Upstream commit b0ad3c179059089d809b477a1d445c1183a7b8fe ]
+commit b0ad3c179059089d809b477a1d445c1183a7b8fe upstream.
 
 validate_linkmsg() was introduced by commit 1840bb13c22f5b ("[RTNL]:
 Validate hardware and broadcast address attribute for RTM_NEWLINK")
@@ -22,16 +22,14 @@ Fixes: 0e06877c6fdb ("[RTNETLINK]: rtnl_link: allow specifying initial device ad
 Signed-off-by: Xin Long <lucien.xin@gmail.com>
 Reviewed-by: Simon Horman <simon.horman@corigine.com>
 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 ---
- net/core/rtnetlink.c | 8 +++++++-
+ net/core/rtnetlink.c |    8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)
 
-diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index 74864dc46a7ef..b192c69f3936c 100644
 --- a/net/core/rtnetlink.c
 +++ b/net/core/rtnetlink.c
-@@ -3212,6 +3212,7 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname,
+@@ -3212,6 +3212,7 @@ struct net_device *rtnl_create_link(stru
        struct net_device *dev;
        unsigned int num_tx_queues = 1;
        unsigned int num_rx_queues = 1;
@@ -39,7 +37,7 @@ index 74864dc46a7ef..b192c69f3936c 100644
  
        if (tb[IFLA_NUM_TX_QUEUES])
                num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]);
-@@ -3247,13 +3248,18 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname,
+@@ -3247,13 +3248,18 @@ struct net_device *rtnl_create_link(stru
        if (!dev)
                return ERR_PTR(-ENOMEM);
  
@@ -59,6 +57,3 @@ index 74864dc46a7ef..b192c69f3936c 100644
  
                err = dev_validate_mtu(dev, mtu, extack);
                if (err) {
--- 
-2.39.2
-
diff --git a/queue-6.1/rtnetlink-move-ifla_gso_-tb-check-to-validate_linkms.patch b/queue-6.1/rtnetlink-move-ifla_gso_-tb-check-to-validate_linkms.patch
deleted file mode 100644 (file)
index b809d33..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-From c7415cb989a51dbb899bea64f3d7f26971e1e018 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 31 May 2023 12:01:43 -0400
-Subject: rtnetlink: move IFLA_GSO_ tb check to validate_linkmsg
-
-From: Xin Long <lucien.xin@gmail.com>
-
-[ Upstream commit fef5b228dd38378148bc850f7e69a7783f3b95a4 ]
-
-These IFLA_GSO_* tb check should also be done for the new created link,
-otherwise, they can be set to a huge value when creating links:
-
-  # ip link add dummy1 gso_max_size 4294967295 type dummy
-  # ip -d link show dummy1
-    dummy addrgenmode eui64 ... gso_max_size 4294967295
-
-Fixes: 46e6b992c250 ("rtnetlink: allow GSO maximums to be set on device creation")
-Fixes: 9eefedd58ae1 ("net: add gso_ipv4_max_size and gro_ipv4_max_size per device")
-Signed-off-by: Xin Long <lucien.xin@gmail.com>
-Reviewed-by: Simon Horman <simon.horman@corigine.com>
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/core/rtnetlink.c | 34 +++++++++++++++++++---------------
- 1 file changed, 19 insertions(+), 15 deletions(-)
-
-diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index 027275235858b..99c1430cde345 100644
---- a/net/core/rtnetlink.c
-+++ b/net/core/rtnetlink.c
-@@ -2382,6 +2382,25 @@ static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[],
-               if (tb[IFLA_BROADCAST] &&
-                   nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
-                       return -EINVAL;
-+
-+              if (tb[IFLA_GSO_MAX_SIZE] &&
-+                  nla_get_u32(tb[IFLA_GSO_MAX_SIZE]) > dev->tso_max_size) {
-+                      NL_SET_ERR_MSG(extack, "too big gso_max_size");
-+                      return -EINVAL;
-+              }
-+
-+              if (tb[IFLA_GSO_MAX_SEGS] &&
-+                  (nla_get_u32(tb[IFLA_GSO_MAX_SEGS]) > GSO_MAX_SEGS ||
-+                   nla_get_u32(tb[IFLA_GSO_MAX_SEGS]) > dev->tso_max_segs)) {
-+                      NL_SET_ERR_MSG(extack, "too big gso_max_segs");
-+                      return -EINVAL;
-+              }
-+
-+              if (tb[IFLA_GSO_IPV4_MAX_SIZE] &&
-+                  nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]) > dev->tso_max_size) {
-+                      NL_SET_ERR_MSG(extack, "too big gso_ipv4_max_size");
-+                      return -EINVAL;
-+              }
-       }
-       if (tb[IFLA_AF_SPEC]) {
-@@ -2855,11 +2874,6 @@ static int do_setlink(const struct sk_buff *skb,
-       if (tb[IFLA_GSO_MAX_SIZE]) {
-               u32 max_size = nla_get_u32(tb[IFLA_GSO_MAX_SIZE]);
--              if (max_size > dev->tso_max_size) {
--                      err = -EINVAL;
--                      goto errout;
--              }
--
-               if (dev->gso_max_size ^ max_size) {
-                       netif_set_gso_max_size(dev, max_size);
-                       status |= DO_SETLINK_MODIFIED;
-@@ -2869,11 +2883,6 @@ static int do_setlink(const struct sk_buff *skb,
-       if (tb[IFLA_GSO_MAX_SEGS]) {
-               u32 max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]);
--              if (max_segs > GSO_MAX_SEGS || max_segs > dev->tso_max_segs) {
--                      err = -EINVAL;
--                      goto errout;
--              }
--
-               if (dev->gso_max_segs ^ max_segs) {
-                       netif_set_gso_max_segs(dev, max_segs);
-                       status |= DO_SETLINK_MODIFIED;
-@@ -2892,11 +2901,6 @@ static int do_setlink(const struct sk_buff *skb,
-       if (tb[IFLA_GSO_IPV4_MAX_SIZE]) {
-               u32 max_size = nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]);
--              if (max_size > dev->tso_max_size) {
--                      err = -EINVAL;
--                      goto errout;
--              }
--
-               if (dev->gso_ipv4_max_size ^ max_size) {
-                       netif_set_gso_ipv4_max_size(dev, max_size);
-                       status |= DO_SETLINK_MODIFIED;
--- 
-2.39.2
-
index d814e9e1fe78ffecb704ad08f734b3e4354a3564..9ec46abd03856163d2b4a6687d67fbd6449e0415 100644 (file)
@@ -50,15 +50,6 @@ net-dsa-mv88e6xxx-increase-wait-after-reset-deactiva.patch
 mtd-rawnand-marvell-ensure-timing-values-are-written.patch
 mtd-rawnand-marvell-don-t-set-the-nand-frequency-sel.patch
 rtnetlink-call-validate_linkmsg-in-rtnl_create_link.patch
-net-devlink-convert-devlink-port-type-specific-point.patch
-net-devlink-move-port_type_warn_schedule-call-to-__d.patch
-net-devlink-move-port_type_netdev_checks-call-to-__d.patch
-net-devlink-take-rtnl-in-port_fill-function-only-if-.patch
-net-devlink-track-netdev-with-devlink_port-assigned.patch
-net-expose-devlink-port-over-rtnetlink.patch
-net-add-gso_ipv4_max_size-and-gro_ipv4_max_size-per-.patch
-rtnetlink-move-ifla_gso_-tb-check-to-validate_linkms.patch
-rtnetlink-add-the-missing-ifla_gro_-tb-check-in-vali.patch
 mptcp-avoid-unneeded-__mptcp_nmpc_socket-usage.patch
 mptcp-add-annotations-around-msk-subflow-accesses.patch
 mptcp-avoid-unneeded-address-copy.patch