Re: [PATCH net-next RFC 5/7] devlink: Add devlink notifications support for port params

2018-12-05 Thread Jiri Pirko
Wed, Dec 05, 2018 at 06:56:58AM CET, vasundhara-v.vo...@broadcom.com wrote:
>Add notification call for devlink port param set, register and unregister
>functions.
>Add devlink_port_param_value_changed() function to enable the driver notify
>devlink on value change. Driver should use this function after value was
>changed on any configuration mode part to driverinit.
>
>Cc: Jiri Pirko 
>Signed-off-by: Vasundhara Volam 

looks fine


[PATCH net-next RFC 5/7] devlink: Add devlink notifications support for port params

2018-12-04 Thread Vasundhara Volam
Add notification call for devlink port param set, register and unregister
functions.
Add devlink_port_param_value_changed() function to enable the driver notify
devlink on value change. Driver should use this function after value was
changed on any configuration mode part to driverinit.

Cc: Jiri Pirko 
Signed-off-by: Vasundhara Volam 
---
 include/net/devlink.h|  9 
 include/uapi/linux/devlink.h |  2 +
 net/core/devlink.c   | 97 
 3 files changed, 83 insertions(+), 25 deletions(-)

diff --git a/include/net/devlink.h b/include/net/devlink.h
index c22b195..abb5b3a 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -591,6 +591,8 @@ void devlink_port_params_unregister(struct devlink_port 
*devlink_port,
 int devlink_port_param_driverinit_value_set(struct devlink_port *devlink_port,
u32 param_id,
union devlink_param_value init_val);
+void devlink_port_param_value_changed(struct devlink_port *devlink_port,
+ u32 param_id);
 struct devlink_region *devlink_region_create(struct devlink *devlink,
 const char *region_name,
 u32 region_max_snapshots,
@@ -864,6 +866,13 @@ static inline bool 
devlink_dpipe_table_counter_enabled(struct devlink *devlink,
return -EOPNOTSUPP;
 }
 
+static inline void
+devlink_port_param_value_changed(struct devlink_port *devlink_port,
+u32 param_id)
+{
+   return -EOPNOTSUPP;
+}
+
 static inline struct devlink_region *
 devlink_region_create(struct devlink *devlink,
  const char *region_name,
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index 8f3c5dd..a024b25 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -85,6 +85,8 @@ enum devlink_command {
 
DEVLINK_CMD_PORT_PARAM_GET, /* can dump */
DEVLINK_CMD_PORT_PARAM_SET,
+   DEVLINK_CMD_PORT_PARAM_NEW,
+   DEVLINK_CMD_PORT_PARAM_DEL,
 
DEVLINK_CMD_REGION_GET,
DEVLINK_CMD_REGION_SET,
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 4f0052d..7598da1 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -2882,7 +2882,9 @@ static int devlink_nl_param_fill(struct sk_buff *msg, 
struct devlink *devlink,
if (devlink_nl_put_handle(msg, devlink))
goto genlmsg_cancel;
 
-   if (cmd == DEVLINK_CMD_PORT_PARAM_GET)
+   if (cmd == DEVLINK_CMD_PORT_PARAM_GET ||
+   cmd == DEVLINK_CMD_PORT_PARAM_NEW ||
+   cmd == DEVLINK_CMD_PORT_PARAM_DEL)
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, port_index))
goto genlmsg_cancel;
 
@@ -2928,18 +2930,22 @@ static int devlink_nl_param_fill(struct sk_buff *msg, 
struct devlink *devlink,
 }
 
 static void devlink_param_notify(struct devlink *devlink,
+unsigned int port_index,
 struct devlink_param_item *param_item,
 enum devlink_command cmd)
 {
struct sk_buff *msg;
int err;
 
-   WARN_ON(cmd != DEVLINK_CMD_PARAM_NEW && cmd != DEVLINK_CMD_PARAM_DEL);
+   WARN_ON(cmd != DEVLINK_CMD_PARAM_NEW && cmd != DEVLINK_CMD_PARAM_DEL &&
+   cmd != DEVLINK_CMD_PORT_PARAM_NEW &&
+   cmd != DEVLINK_CMD_PORT_PARAM_DEL);
 
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return;
-   err = devlink_nl_param_fill(msg, devlink, 0, param_item, cmd, 0, 0, 0);
+   err = devlink_nl_param_fill(msg, devlink, port_index, param_item, cmd,
+   0, 0, 0);
if (err) {
nlmsg_free(msg);
return;
@@ -3097,6 +3103,7 @@ static int devlink_nl_cmd_param_get_doit(struct sk_buff 
*skb,
 }
 
 static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink,
+  unsigned int port_index,
   struct list_head *param_list,
   struct genl_info *info,
   enum devlink_command cmd)
@@ -3149,7 +3156,7 @@ static int __devlink_nl_cmd_param_set_doit(struct devlink 
*devlink,
return err;
}
 
-   devlink_param_notify(devlink, param_item, cmd);
+   devlink_param_notify(devlink, port_index, param_item, cmd);
return 0;
 }
 
@@ -3158,13 +3165,15 @@ static int devlink_nl_cmd_param_set_doit(struct sk_buff 
*skb,
 {
struct devlink *devlink = info->user_ptr[0];
 
-   return __devlink_nl_cmd_param_set_doit(devlink, >param_list,
+   return __devlink_nl_cmd_param_set_doit(devlink, 0, >param_list,
   info,