net: devlink: Add extack to shared buffer operations
authorIdo Schimmel <idosch@mellanox.com>
Mon, 22 Apr 2019 12:08:39 +0000 (12:08 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 23 Apr 2019 05:09:32 +0000 (22:09 -0700)
Add extack to shared buffer set operations, so that meaningful error
messages could be propagated to the user.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Cc: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/ethernet/netronome/nfp/nfp_devlink.c
include/net/devlink.h
net/core/devlink.c

index 9e8e3e9..a6533d4 100644 (file)
@@ -781,7 +781,8 @@ mlxsw_devlink_sb_pool_get(struct devlink *devlink,
 static int
 mlxsw_devlink_sb_pool_set(struct devlink *devlink,
                          unsigned int sb_index, u16 pool_index, u32 size,
-                         enum devlink_sb_threshold_type threshold_type)
+                         enum devlink_sb_threshold_type threshold_type,
+                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
        struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
@@ -829,7 +830,8 @@ static int mlxsw_devlink_sb_port_pool_get(struct devlink_port *devlink_port,
 
 static int mlxsw_devlink_sb_port_pool_set(struct devlink_port *devlink_port,
                                          unsigned int sb_index, u16 pool_index,
-                                         u32 threshold)
+                                         u32 threshold,
+                                         struct netlink_ext_ack *extack)
 {
        struct mlxsw_core *mlxsw_core = devlink_priv(devlink_port->devlink);
        struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
@@ -864,7 +866,8 @@ static int
 mlxsw_devlink_sb_tc_pool_bind_set(struct devlink_port *devlink_port,
                                  unsigned int sb_index, u16 tc_index,
                                  enum devlink_sb_pool_type pool_type,
-                                 u16 pool_index, u32 threshold)
+                                 u16 pool_index, u32 threshold,
+                                 struct netlink_ext_ack *extack)
 {
        struct mlxsw_core *mlxsw_core = devlink_priv(devlink_port->devlink);
        struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
index 8e75912..c50fce4 100644 (file)
@@ -144,7 +144,8 @@ nfp_devlink_sb_pool_get(struct devlink *devlink, unsigned int sb_index,
 static int
 nfp_devlink_sb_pool_set(struct devlink *devlink, unsigned int sb_index,
                        u16 pool_index,
-                       u32 size, enum devlink_sb_threshold_type threshold_type)
+                       u32 size, enum devlink_sb_threshold_type threshold_type,
+                       struct netlink_ext_ack *extack)
 {
        struct nfp_pf *pf = devlink_priv(devlink);
 
index 70c7d1a..4f5e416 100644 (file)
@@ -491,13 +491,14 @@ struct devlink_ops {
                           struct devlink_sb_pool_info *pool_info);
        int (*sb_pool_set)(struct devlink *devlink, unsigned int sb_index,
                           u16 pool_index, u32 size,
-                          enum devlink_sb_threshold_type threshold_type);
+                          enum devlink_sb_threshold_type threshold_type,
+                          struct netlink_ext_ack *extack);
        int (*sb_port_pool_get)(struct devlink_port *devlink_port,
                                unsigned int sb_index, u16 pool_index,
                                u32 *p_threshold);
        int (*sb_port_pool_set)(struct devlink_port *devlink_port,
                                unsigned int sb_index, u16 pool_index,
-                               u32 threshold);
+                               u32 threshold, struct netlink_ext_ack *extack);
        int (*sb_tc_pool_bind_get)(struct devlink_port *devlink_port,
                                   unsigned int sb_index,
                                   u16 tc_index,
@@ -507,7 +508,8 @@ struct devlink_ops {
                                   unsigned int sb_index,
                                   u16 tc_index,
                                   enum devlink_sb_pool_type pool_type,
-                                  u16 pool_index, u32 threshold);
+                                  u16 pool_index, u32 threshold,
+                                  struct netlink_ext_ack *extack);
        int (*sb_occ_snapshot)(struct devlink *devlink,
                               unsigned int sb_index);
        int (*sb_occ_max_clear)(struct devlink *devlink,
index b2715a1..7b91605 100644 (file)
@@ -1047,14 +1047,15 @@ out:
 
 static int devlink_sb_pool_set(struct devlink *devlink, unsigned int sb_index,
                               u16 pool_index, u32 size,
-                              enum devlink_sb_threshold_type threshold_type)
+                              enum devlink_sb_threshold_type threshold_type,
+                              struct netlink_ext_ack *extack)
 
 {
        const struct devlink_ops *ops = devlink->ops;
 
        if (ops->sb_pool_set)
                return ops->sb_pool_set(devlink, sb_index, pool_index,
-                                       size, threshold_type);
+                                       size, threshold_type, extack);
        return -EOPNOTSUPP;
 }
 
@@ -1082,7 +1083,8 @@ static int devlink_nl_cmd_sb_pool_set_doit(struct sk_buff *skb,
 
        size = nla_get_u32(info->attrs[DEVLINK_ATTR_SB_POOL_SIZE]);
        return devlink_sb_pool_set(devlink, devlink_sb->index,
-                                  pool_index, size, threshold_type);
+                                  pool_index, size, threshold_type,
+                                  info->extack);
 }
 
 static int devlink_nl_sb_port_pool_fill(struct sk_buff *msg,
@@ -1243,14 +1245,15 @@ out:
 
 static int devlink_sb_port_pool_set(struct devlink_port *devlink_port,
                                    unsigned int sb_index, u16 pool_index,
-                                   u32 threshold)
+                                   u32 threshold,
+                                   struct netlink_ext_ack *extack)
 
 {
        const struct devlink_ops *ops = devlink_port->devlink->ops;
 
        if (ops->sb_port_pool_set)
                return ops->sb_port_pool_set(devlink_port, sb_index,
-                                            pool_index, threshold);
+                                            pool_index, threshold, extack);
        return -EOPNOTSUPP;
 }
 
@@ -1273,7 +1276,7 @@ static int devlink_nl_cmd_sb_port_pool_set_doit(struct sk_buff *skb,
 
        threshold = nla_get_u32(info->attrs[DEVLINK_ATTR_SB_THRESHOLD]);
        return devlink_sb_port_pool_set(devlink_port, devlink_sb->index,
-                                       pool_index, threshold);
+                                       pool_index, threshold, info->extack);
 }
 
 static int
@@ -1472,7 +1475,8 @@ out:
 static int devlink_sb_tc_pool_bind_set(struct devlink_port *devlink_port,
                                       unsigned int sb_index, u16 tc_index,
                                       enum devlink_sb_pool_type pool_type,
-                                      u16 pool_index, u32 threshold)
+                                      u16 pool_index, u32 threshold,
+                                      struct netlink_ext_ack *extack)
 
 {
        const struct devlink_ops *ops = devlink_port->devlink->ops;
@@ -1480,7 +1484,7 @@ static int devlink_sb_tc_pool_bind_set(struct devlink_port *devlink_port,
        if (ops->sb_tc_pool_bind_set)
                return ops->sb_tc_pool_bind_set(devlink_port, sb_index,
                                                tc_index, pool_type,
-                                               pool_index, threshold);
+                                               pool_index, threshold, extack);
        return -EOPNOTSUPP;
 }
 
@@ -1515,7 +1519,7 @@ static int devlink_nl_cmd_sb_tc_pool_bind_set_doit(struct sk_buff *skb,
        threshold = nla_get_u32(info->attrs[DEVLINK_ATTR_SB_THRESHOLD]);
        return devlink_sb_tc_pool_bind_set(devlink_port, devlink_sb->index,
                                           tc_index, pool_type,
-                                          pool_index, threshold);
+                                          pool_index, threshold, info->extack);
 }
 
 static int devlink_nl_cmd_sb_occ_snapshot_doit(struct sk_buff *skb,