aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/devlink.c
diff options
context:
space:
mode:
authorJiri Pirko <jiri@mellanox.com>2019-09-12 04:49:45 -0400
committerDavid S. Miller <davem@davemloft.net>2019-09-13 16:11:14 -0400
commit97691069dc5a4135e413d3d92200d70b46df9fe5 (patch)
tree2f4e2610bb8dc72be3affba651b57d10b73f9a6e /net/core/devlink.c
parent35c7ff349a2d1df1b59909f67ba4ddcd84ad934e (diff)
net: devlink: split reload op into two
In order to properly implement failure indication during reload, split the reload op into two ops, one for down phase and one for up phase. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/devlink.c')
-rw-r--r--net/core/devlink.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 4a2fb94c44cf..9e522639693d 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -2672,12 +2672,17 @@ devlink_resources_validate(struct devlink *devlink,
2672 return err; 2672 return err;
2673} 2673}
2674 2674
2675static bool devlink_reload_supported(struct devlink *devlink)
2676{
2677 return devlink->ops->reload_down && devlink->ops->reload_up;
2678}
2679
2675static int devlink_nl_cmd_reload(struct sk_buff *skb, struct genl_info *info) 2680static int devlink_nl_cmd_reload(struct sk_buff *skb, struct genl_info *info)
2676{ 2681{
2677 struct devlink *devlink = info->user_ptr[0]; 2682 struct devlink *devlink = info->user_ptr[0];
2678 int err; 2683 int err;
2679 2684
2680 if (!devlink->ops->reload) 2685 if (!devlink_reload_supported(devlink))
2681 return -EOPNOTSUPP; 2686 return -EOPNOTSUPP;
2682 2687
2683 err = devlink_resources_validate(devlink, NULL, info); 2688 err = devlink_resources_validate(devlink, NULL, info);
@@ -2685,7 +2690,10 @@ static int devlink_nl_cmd_reload(struct sk_buff *skb, struct genl_info *info)
2685 NL_SET_ERR_MSG_MOD(info->extack, "resources size validation failed"); 2690 NL_SET_ERR_MSG_MOD(info->extack, "resources size validation failed");
2686 return err; 2691 return err;
2687 } 2692 }
2688 return devlink->ops->reload(devlink, info->extack); 2693 err = devlink->ops->reload_down(devlink, info->extack);
2694 if (err)
2695 return err;
2696 return devlink->ops->reload_up(devlink, info->extack);
2689} 2697}
2690 2698
2691static int devlink_nl_flash_update_fill(struct sk_buff *msg, 2699static int devlink_nl_flash_update_fill(struct sk_buff *msg,
@@ -7150,7 +7158,7 @@ __devlink_param_driverinit_value_set(struct devlink *devlink,
7150int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id, 7158int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
7151 union devlink_param_value *init_val) 7159 union devlink_param_value *init_val)
7152{ 7160{
7153 if (!devlink->ops->reload) 7161 if (!devlink_reload_supported(devlink))
7154 return -EOPNOTSUPP; 7162 return -EOPNOTSUPP;
7155 7163
7156 return __devlink_param_driverinit_value_get(&devlink->param_list, 7164 return __devlink_param_driverinit_value_get(&devlink->param_list,
@@ -7197,7 +7205,7 @@ int devlink_port_param_driverinit_value_get(struct devlink_port *devlink_port,
7197{ 7205{
7198 struct devlink *devlink = devlink_port->devlink; 7206 struct devlink *devlink = devlink_port->devlink;
7199 7207
7200 if (!devlink->ops->reload) 7208 if (!devlink_reload_supported(devlink))
7201 return -EOPNOTSUPP; 7209 return -EOPNOTSUPP;
7202 7210
7203 return __devlink_param_driverinit_value_get(&devlink_port->param_list, 7211 return __devlink_param_driverinit_value_get(&devlink_port->param_list,