Commit 7715023a authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

net: devlink: use helpers to work with devlink->lock mutex



As far as the lock helpers exist as the drivers need to work with the
devlink->lock mutex, use the helpers internally in devlink.c in order to
be consistent.

Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1abfb265
Loading
Loading
Loading
Loading
+115 −115
Original line number Original line Diff line number Diff line
@@ -711,7 +711,7 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops,
		return PTR_ERR(devlink);
		return PTR_ERR(devlink);
	}
	}
	if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
	if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
		mutex_lock(&devlink->lock);
		devl_lock(devlink);
	info->user_ptr[0] = devlink;
	info->user_ptr[0] = devlink;
	if (ops->internal_flags & DEVLINK_NL_FLAG_NEED_PORT) {
	if (ops->internal_flags & DEVLINK_NL_FLAG_NEED_PORT) {
		devlink_port = devlink_port_get_from_info(devlink, info);
		devlink_port = devlink_port_get_from_info(devlink, info);
@@ -754,7 +754,7 @@ static int devlink_nl_pre_doit(const struct genl_ops *ops,


unlock:
unlock:
	if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
	if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
	devlink_put(devlink);
	devlink_put(devlink);
	mutex_unlock(&devlink_mutex);
	mutex_unlock(&devlink_mutex);
	return err;
	return err;
@@ -772,7 +772,7 @@ static void devlink_nl_post_doit(const struct genl_ops *ops,
		devlink_linecard_put(linecard);
		devlink_linecard_put(linecard);
	}
	}
	if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
	if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
	devlink_put(devlink);
	devlink_put(devlink);
	mutex_unlock(&devlink_mutex);
	mutex_unlock(&devlink_mutex);
}
}
@@ -1329,7 +1329,7 @@ static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_rate, &devlink->rate_list, list) {
		list_for_each_entry(devlink_rate, &devlink->rate_list, list) {
			enum devlink_command cmd = DEVLINK_CMD_RATE_NEW;
			enum devlink_command cmd = DEVLINK_CMD_RATE_NEW;
			u32 id = NETLINK_CB(cb->skb).portid;
			u32 id = NETLINK_CB(cb->skb).portid;
@@ -1342,13 +1342,13 @@ static int devlink_nl_cmd_rate_get_dumpit(struct sk_buff *msg,
						   cb->nlh->nlmsg_seq,
						   cb->nlh->nlmsg_seq,
						   NLM_F_MULTI, NULL);
						   NLM_F_MULTI, NULL);
			if (err) {
			if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -1495,7 +1495,7 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_port, &devlink->port_list, list) {
		list_for_each_entry(devlink_port, &devlink->port_list, list) {
			if (idx < start) {
			if (idx < start) {
				idx++;
				idx++;
@@ -1507,13 +1507,13 @@ static int devlink_nl_cmd_port_get_dumpit(struct sk_buff *msg,
						   cb->nlh->nlmsg_seq,
						   cb->nlh->nlmsg_seq,
						   NLM_F_MULTI, cb->extack);
						   NLM_F_MULTI, cb->extack);
			if (err) {
			if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -2450,7 +2450,7 @@ static int devlink_nl_cmd_sb_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
			if (idx < start) {
			if (idx < start) {
				idx++;
				idx++;
@@ -2462,13 +2462,13 @@ static int devlink_nl_cmd_sb_get_dumpit(struct sk_buff *msg,
						 cb->nlh->nlmsg_seq,
						 cb->nlh->nlmsg_seq,
						 NLM_F_MULTI);
						 NLM_F_MULTI);
			if (err) {
			if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -2603,7 +2603,7 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
		    !devlink->ops->sb_pool_get)
		    !devlink->ops->sb_pool_get)
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
			err = __sb_pool_get_dumpit(msg, start, &idx, devlink,
			err = __sb_pool_get_dumpit(msg, start, &idx, devlink,
						   devlink_sb,
						   devlink_sb,
@@ -2612,12 +2612,12 @@ static int devlink_nl_cmd_sb_pool_get_dumpit(struct sk_buff *msg,
			if (err == -EOPNOTSUPP) {
			if (err == -EOPNOTSUPP) {
				err = 0;
				err = 0;
			} else if (err) {
			} else if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -2824,7 +2824,7 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
		    !devlink->ops->sb_port_pool_get)
		    !devlink->ops->sb_port_pool_get)
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
			err = __sb_port_pool_get_dumpit(msg, start, &idx,
			err = __sb_port_pool_get_dumpit(msg, start, &idx,
							devlink, devlink_sb,
							devlink, devlink_sb,
@@ -2833,12 +2833,12 @@ static int devlink_nl_cmd_sb_port_pool_get_dumpit(struct sk_buff *msg,
			if (err == -EOPNOTSUPP) {
			if (err == -EOPNOTSUPP) {
				err = 0;
				err = 0;
			} else if (err) {
			} else if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -3073,7 +3073,7 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
		    !devlink->ops->sb_tc_pool_bind_get)
		    !devlink->ops->sb_tc_pool_bind_get)
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
		list_for_each_entry(devlink_sb, &devlink->sb_list, list) {
			err = __sb_tc_pool_bind_get_dumpit(msg, start, &idx,
			err = __sb_tc_pool_bind_get_dumpit(msg, start, &idx,
							   devlink,
							   devlink,
@@ -3083,12 +3083,12 @@ devlink_nl_cmd_sb_tc_pool_bind_get_dumpit(struct sk_buff *msg,
			if (err == -EOPNOTSUPP) {
			if (err == -EOPNOTSUPP) {
				err = 0;
				err = 0;
			} else if (err) {
			} else if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -5159,7 +5159,7 @@ static int devlink_nl_cmd_param_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(param_item, &devlink->param_list, list) {
		list_for_each_entry(param_item, &devlink->param_list, list) {
			if (idx < start) {
			if (idx < start) {
				idx++;
				idx++;
@@ -5173,13 +5173,13 @@ static int devlink_nl_cmd_param_get_dumpit(struct sk_buff *msg,
			if (err == -EOPNOTSUPP) {
			if (err == -EOPNOTSUPP) {
				err = 0;
				err = 0;
			} else if (err) {
			} else if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -5394,7 +5394,7 @@ static int devlink_nl_cmd_port_param_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(devlink_port, &devlink->port_list, list) {
		list_for_each_entry(devlink_port, &devlink->port_list, list) {
			list_for_each_entry(param_item,
			list_for_each_entry(param_item,
					    &devlink_port->param_list, list) {
					    &devlink_port->param_list, list) {
@@ -5412,14 +5412,14 @@ static int devlink_nl_cmd_port_param_get_dumpit(struct sk_buff *msg,
				if (err == -EOPNOTSUPP) {
				if (err == -EOPNOTSUPP) {
					err = 0;
					err = 0;
				} else if (err) {
				} else if (err) {
					mutex_unlock(&devlink->lock);
					devl_unlock(devlink);
					devlink_put(devlink);
					devlink_put(devlink);
					goto out;
					goto out;
				}
				}
				idx++;
				idx++;
			}
			}
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -5671,7 +5671,7 @@ static int __devlink_snapshot_id_increment(struct devlink *devlink, u32 id)
	unsigned long count;
	unsigned long count;
	void *p;
	void *p;


	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	p = xa_load(&devlink->snapshot_ids, id);
	p = xa_load(&devlink->snapshot_ids, id);
	if (WARN_ON(!p))
	if (WARN_ON(!p))
@@ -5707,7 +5707,7 @@ static void __devlink_snapshot_id_decrement(struct devlink *devlink, u32 id)
	unsigned long count;
	unsigned long count;
	void *p;
	void *p;


	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	p = xa_load(&devlink->snapshot_ids, id);
	p = xa_load(&devlink->snapshot_ids, id);
	if (WARN_ON(!p))
	if (WARN_ON(!p))
@@ -5746,7 +5746,7 @@ static void __devlink_snapshot_id_decrement(struct devlink *devlink, u32 id)
 */
 */
static int __devlink_snapshot_id_insert(struct devlink *devlink, u32 id)
static int __devlink_snapshot_id_insert(struct devlink *devlink, u32 id)
{
{
	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	if (xa_load(&devlink->snapshot_ids, id))
	if (xa_load(&devlink->snapshot_ids, id))
		return -EEXIST;
		return -EEXIST;
@@ -5773,7 +5773,7 @@ static int __devlink_snapshot_id_insert(struct devlink *devlink, u32 id)
 */
 */
static int __devlink_region_snapshot_id_get(struct devlink *devlink, u32 *id)
static int __devlink_region_snapshot_id_get(struct devlink *devlink, u32 *id)
{
{
	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	return xa_alloc(&devlink->snapshot_ids, id, xa_mk_value(1),
	return xa_alloc(&devlink->snapshot_ids, id, xa_mk_value(1),
			xa_limit_32b, GFP_KERNEL);
			xa_limit_32b, GFP_KERNEL);
@@ -5801,7 +5801,7 @@ __devlink_region_snapshot_create(struct devlink_region *region,
	struct devlink_snapshot *snapshot;
	struct devlink_snapshot *snapshot;
	int err;
	int err;


	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	/* check if region can hold one more snapshot */
	/* check if region can hold one more snapshot */
	if (region->cur_snapshots == region->max_snapshots)
	if (region->cur_snapshots == region->max_snapshots)
@@ -5839,7 +5839,7 @@ static void devlink_region_snapshot_del(struct devlink_region *region,
{
{
	struct devlink *devlink = region->devlink;
	struct devlink *devlink = region->devlink;


	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	devlink_nl_region_notify(region, snapshot, DEVLINK_CMD_REGION_DEL);
	devlink_nl_region_notify(region, snapshot, DEVLINK_CMD_REGION_DEL);
	region->cur_snapshots--;
	region->cur_snapshots--;
@@ -5933,7 +5933,7 @@ static int devlink_nl_cmd_region_get_devlink_dumpit(struct sk_buff *msg,
	struct devlink_port *port;
	struct devlink_port *port;
	int err = 0;
	int err = 0;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	list_for_each_entry(region, &devlink->region_list, list) {
	list_for_each_entry(region, &devlink->region_list, list) {
		if (*idx < start) {
		if (*idx < start) {
			(*idx)++;
			(*idx)++;
@@ -5957,7 +5957,7 @@ static int devlink_nl_cmd_region_get_devlink_dumpit(struct sk_buff *msg,
	}
	}


out:
out:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}


@@ -6247,7 +6247,7 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
		goto out_dev;
		goto out_dev;
	}
	}


	mutex_lock(&devlink->lock);
	devl_lock(devlink);


	if (!attrs[DEVLINK_ATTR_REGION_NAME] ||
	if (!attrs[DEVLINK_ATTR_REGION_NAME] ||
	    !attrs[DEVLINK_ATTR_REGION_SNAPSHOT_ID]) {
	    !attrs[DEVLINK_ATTR_REGION_SNAPSHOT_ID]) {
@@ -6343,7 +6343,7 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,


	nla_nest_end(skb, chunks_attr);
	nla_nest_end(skb, chunks_attr);
	genlmsg_end(skb, hdr);
	genlmsg_end(skb, hdr);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	devlink_put(devlink);
	devlink_put(devlink);
	mutex_unlock(&devlink_mutex);
	mutex_unlock(&devlink_mutex);


@@ -6352,7 +6352,7 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
nla_put_failure:
nla_put_failure:
	genlmsg_cancel(skb, hdr);
	genlmsg_cancel(skb, hdr);
out_unlock:
out_unlock:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	devlink_put(devlink);
	devlink_put(devlink);
out_dev:
out_dev:
	mutex_unlock(&devlink_mutex);
	mutex_unlock(&devlink_mutex);
@@ -6515,12 +6515,12 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
		if (idx < start || !devlink->ops->info_get)
		if (idx < start || !devlink->ops->info_get)
			goto inc;
			goto inc;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET,
		err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET,
					   NETLINK_CB(cb->skb).portid,
					   NETLINK_CB(cb->skb).portid,
					   cb->nlh->nlmsg_seq, NLM_F_MULTI,
					   cb->nlh->nlmsg_seq, NLM_F_MULTI,
					   cb->extack);
					   cb->extack);
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
		if (err == -EOPNOTSUPP)
		if (err == -EOPNOTSUPP)
			err = 0;
			err = 0;
		else if (err) {
		else if (err) {
@@ -7722,7 +7722,7 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry_port;
			goto retry_port;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(port, &devlink->port_list, list) {
		list_for_each_entry(port, &devlink->port_list, list) {
			mutex_lock(&port->reporters_lock);
			mutex_lock(&port->reporters_lock);
			list_for_each_entry(reporter, &port->reporter_list, list) {
			list_for_each_entry(reporter, &port->reporter_list, list) {
@@ -7737,7 +7737,7 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
					cb->nlh->nlmsg_seq, NLM_F_MULTI);
					cb->nlh->nlmsg_seq, NLM_F_MULTI);
				if (err) {
				if (err) {
					mutex_unlock(&port->reporters_lock);
					mutex_unlock(&port->reporters_lock);
					mutex_unlock(&devlink->lock);
					devl_unlock(devlink);
					devlink_put(devlink);
					devlink_put(devlink);
					goto out;
					goto out;
				}
				}
@@ -7745,7 +7745,7 @@ devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg,
			}
			}
			mutex_unlock(&port->reporters_lock);
			mutex_unlock(&port->reporters_lock);
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry_port:
retry_port:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -8292,7 +8292,7 @@ static int devlink_nl_cmd_trap_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(trap_item, &devlink->trap_list, list) {
		list_for_each_entry(trap_item, &devlink->trap_list, list) {
			if (idx < start) {
			if (idx < start) {
				idx++;
				idx++;
@@ -8304,13 +8304,13 @@ static int devlink_nl_cmd_trap_get_dumpit(struct sk_buff *msg,
						   cb->nlh->nlmsg_seq,
						   cb->nlh->nlmsg_seq,
						   NLM_F_MULTI);
						   NLM_F_MULTI);
			if (err) {
			if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -8519,7 +8519,7 @@ static int devlink_nl_cmd_trap_group_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(group_item, &devlink->trap_group_list,
		list_for_each_entry(group_item, &devlink->trap_group_list,
				    list) {
				    list) {
			if (idx < start) {
			if (idx < start) {
@@ -8532,13 +8532,13 @@ static int devlink_nl_cmd_trap_group_get_dumpit(struct sk_buff *msg,
							 cb->nlh->nlmsg_seq,
							 cb->nlh->nlmsg_seq,
							 NLM_F_MULTI);
							 NLM_F_MULTI);
			if (err) {
			if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -8833,7 +8833,7 @@ static int devlink_nl_cmd_trap_policer_get_dumpit(struct sk_buff *msg,
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
		if (!net_eq(devlink_net(devlink), sock_net(msg->sk)))
			goto retry;
			goto retry;


		mutex_lock(&devlink->lock);
		devl_lock(devlink);
		list_for_each_entry(policer_item, &devlink->trap_policer_list,
		list_for_each_entry(policer_item, &devlink->trap_policer_list,
				    list) {
				    list) {
			if (idx < start) {
			if (idx < start) {
@@ -8846,13 +8846,13 @@ static int devlink_nl_cmd_trap_policer_get_dumpit(struct sk_buff *msg,
							   cb->nlh->nlmsg_seq,
							   cb->nlh->nlmsg_seq,
							   NLM_F_MULTI);
							   NLM_F_MULTI);
			if (err) {
			if (err) {
				mutex_unlock(&devlink->lock);
				devl_unlock(devlink);
				devlink_put(devlink);
				devlink_put(devlink);
				goto out;
				goto out;
			}
			}
			idx++;
			idx++;
		}
		}
		mutex_unlock(&devlink->lock);
		devl_unlock(devlink);
retry:
retry:
		devlink_put(devlink);
		devlink_put(devlink);
	}
	}
@@ -9690,7 +9690,7 @@ int devl_port_register(struct devlink *devlink,
		       struct devlink_port *devlink_port,
		       struct devlink_port *devlink_port,
		       unsigned int port_index)
		       unsigned int port_index)
{
{
	lockdep_assert_held(&devlink->lock);
	devl_assert_locked(devlink);


	if (devlink_port_index_exists(devlink, port_index))
	if (devlink_port_index_exists(devlink, port_index))
		return -EEXIST;
		return -EEXIST;
@@ -9733,9 +9733,9 @@ int devlink_port_register(struct devlink *devlink,
{
{
	int err;
	int err;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	err = devl_port_register(devlink, devlink_port, port_index);
	err = devl_port_register(devlink, devlink_port, port_index);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_port_register);
EXPORT_SYMBOL_GPL(devlink_port_register);
@@ -9769,9 +9769,9 @@ void devlink_port_unregister(struct devlink_port *devlink_port)
{
{
	struct devlink *devlink = devlink_port->devlink;
	struct devlink *devlink = devlink_port->devlink;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	devl_port_unregister(devlink_port);
	devl_port_unregister(devlink_port);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_port_unregister);
EXPORT_SYMBOL_GPL(devlink_port_unregister);


@@ -10380,7 +10380,7 @@ int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
	struct devlink_sb *devlink_sb;
	struct devlink_sb *devlink_sb;
	int err = 0;
	int err = 0;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	if (devlink_sb_index_exists(devlink, sb_index)) {
	if (devlink_sb_index_exists(devlink, sb_index)) {
		err = -EEXIST;
		err = -EEXIST;
		goto unlock;
		goto unlock;
@@ -10399,7 +10399,7 @@ int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
	devlink_sb->egress_tc_count = egress_tc_count;
	devlink_sb->egress_tc_count = egress_tc_count;
	list_add_tail(&devlink_sb->list, &devlink->sb_list);
	list_add_tail(&devlink_sb->list, &devlink->sb_list);
unlock:
unlock:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_sb_register);
EXPORT_SYMBOL_GPL(devlink_sb_register);
@@ -10408,11 +10408,11 @@ void devlink_sb_unregister(struct devlink *devlink, unsigned int sb_index)
{
{
	struct devlink_sb *devlink_sb;
	struct devlink_sb *devlink_sb;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	devlink_sb = devlink_sb_get_by_index(devlink, sb_index);
	devlink_sb = devlink_sb_get_by_index(devlink, sb_index);
	WARN_ON(!devlink_sb);
	WARN_ON(!devlink_sb);
	list_del(&devlink_sb->list);
	list_del(&devlink_sb->list);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	kfree(devlink_sb);
	kfree(devlink_sb);
}
}
EXPORT_SYMBOL_GPL(devlink_sb_unregister);
EXPORT_SYMBOL_GPL(devlink_sb_unregister);
@@ -10428,9 +10428,9 @@ EXPORT_SYMBOL_GPL(devlink_sb_unregister);
int devlink_dpipe_headers_register(struct devlink *devlink,
int devlink_dpipe_headers_register(struct devlink *devlink,
				   struct devlink_dpipe_headers *dpipe_headers)
				   struct devlink_dpipe_headers *dpipe_headers)
{
{
	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	devlink->dpipe_headers = dpipe_headers;
	devlink->dpipe_headers = dpipe_headers;
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return 0;
	return 0;
}
}
EXPORT_SYMBOL_GPL(devlink_dpipe_headers_register);
EXPORT_SYMBOL_GPL(devlink_dpipe_headers_register);
@@ -10444,9 +10444,9 @@ EXPORT_SYMBOL_GPL(devlink_dpipe_headers_register);
 */
 */
void devlink_dpipe_headers_unregister(struct devlink *devlink)
void devlink_dpipe_headers_unregister(struct devlink *devlink)
{
{
	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	devlink->dpipe_headers = NULL;
	devlink->dpipe_headers = NULL;
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_dpipe_headers_unregister);
EXPORT_SYMBOL_GPL(devlink_dpipe_headers_unregister);


@@ -10501,7 +10501,7 @@ int devlink_dpipe_table_register(struct devlink *devlink,
	if (WARN_ON(!table_ops->size_get))
	if (WARN_ON(!table_ops->size_get))
		return -EINVAL;
		return -EINVAL;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);


	if (devlink_dpipe_table_find(&devlink->dpipe_table_list, table_name,
	if (devlink_dpipe_table_find(&devlink->dpipe_table_list, table_name,
				     devlink)) {
				     devlink)) {
@@ -10522,7 +10522,7 @@ int devlink_dpipe_table_register(struct devlink *devlink,


	list_add_tail_rcu(&table->list, &devlink->dpipe_table_list);
	list_add_tail_rcu(&table->list, &devlink->dpipe_table_list);
unlock:
unlock:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_dpipe_table_register);
EXPORT_SYMBOL_GPL(devlink_dpipe_table_register);
@@ -10538,17 +10538,17 @@ void devlink_dpipe_table_unregister(struct devlink *devlink,
{
{
	struct devlink_dpipe_table *table;
	struct devlink_dpipe_table *table;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	table = devlink_dpipe_table_find(&devlink->dpipe_table_list,
	table = devlink_dpipe_table_find(&devlink->dpipe_table_list,
					 table_name, devlink);
					 table_name, devlink);
	if (!table)
	if (!table)
		goto unlock;
		goto unlock;
	list_del_rcu(&table->list);
	list_del_rcu(&table->list);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	kfree_rcu(table, rcu);
	kfree_rcu(table, rcu);
	return;
	return;
unlock:
unlock:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_dpipe_table_unregister);
EXPORT_SYMBOL_GPL(devlink_dpipe_table_unregister);


@@ -10580,7 +10580,7 @@ int devlink_resource_register(struct devlink *devlink,


	top_hierarchy = parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP;
	top_hierarchy = parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	if (resource) {
	if (resource) {
		err = -EINVAL;
		err = -EINVAL;
@@ -10620,7 +10620,7 @@ int devlink_resource_register(struct devlink *devlink,
	INIT_LIST_HEAD(&resource->resource_list);
	INIT_LIST_HEAD(&resource->resource_list);
	list_add_tail(&resource->list, resource_list);
	list_add_tail(&resource->list, resource_list);
out:
out:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_resource_register);
EXPORT_SYMBOL_GPL(devlink_resource_register);
@@ -10647,7 +10647,7 @@ void devlink_resources_unregister(struct devlink *devlink)
{
{
	struct devlink_resource *tmp, *child_resource;
	struct devlink_resource *tmp, *child_resource;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);


	list_for_each_entry_safe(child_resource, tmp, &devlink->resource_list,
	list_for_each_entry_safe(child_resource, tmp, &devlink->resource_list,
				 list) {
				 list) {
@@ -10656,7 +10656,7 @@ void devlink_resources_unregister(struct devlink *devlink)
		kfree(child_resource);
		kfree(child_resource);
	}
	}


	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_resources_unregister);
EXPORT_SYMBOL_GPL(devlink_resources_unregister);


@@ -10674,7 +10674,7 @@ int devlink_resource_size_get(struct devlink *devlink,
	struct devlink_resource *resource;
	struct devlink_resource *resource;
	int err = 0;
	int err = 0;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	if (!resource) {
	if (!resource) {
		err = -EINVAL;
		err = -EINVAL;
@@ -10683,7 +10683,7 @@ int devlink_resource_size_get(struct devlink *devlink,
	*p_resource_size = resource->size_new;
	*p_resource_size = resource->size_new;
	resource->size = resource->size_new;
	resource->size = resource->size_new;
out:
out:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_resource_size_get);
EXPORT_SYMBOL_GPL(devlink_resource_size_get);
@@ -10703,7 +10703,7 @@ int devlink_dpipe_table_resource_set(struct devlink *devlink,
	struct devlink_dpipe_table *table;
	struct devlink_dpipe_table *table;
	int err = 0;
	int err = 0;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	table = devlink_dpipe_table_find(&devlink->dpipe_table_list,
	table = devlink_dpipe_table_find(&devlink->dpipe_table_list,
					 table_name, devlink);
					 table_name, devlink);
	if (!table) {
	if (!table) {
@@ -10714,7 +10714,7 @@ int devlink_dpipe_table_resource_set(struct devlink *devlink,
	table->resource_units = resource_units;
	table->resource_units = resource_units;
	table->resource_valid = true;
	table->resource_valid = true;
out:
out:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_dpipe_table_resource_set);
EXPORT_SYMBOL_GPL(devlink_dpipe_table_resource_set);
@@ -10734,7 +10734,7 @@ void devlink_resource_occ_get_register(struct devlink *devlink,
{
{
	struct devlink_resource *resource;
	struct devlink_resource *resource;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	if (WARN_ON(!resource))
	if (WARN_ON(!resource))
		goto out;
		goto out;
@@ -10743,7 +10743,7 @@ void devlink_resource_occ_get_register(struct devlink *devlink,
	resource->occ_get = occ_get;
	resource->occ_get = occ_get;
	resource->occ_get_priv = occ_get_priv;
	resource->occ_get_priv = occ_get_priv;
out:
out:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_resource_occ_get_register);
EXPORT_SYMBOL_GPL(devlink_resource_occ_get_register);


@@ -10758,7 +10758,7 @@ void devlink_resource_occ_get_unregister(struct devlink *devlink,
{
{
	struct devlink_resource *resource;
	struct devlink_resource *resource;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	resource = devlink_resource_find(devlink, NULL, resource_id);
	if (WARN_ON(!resource))
	if (WARN_ON(!resource))
		goto out;
		goto out;
@@ -10767,7 +10767,7 @@ void devlink_resource_occ_get_unregister(struct devlink *devlink,
	resource->occ_get = NULL;
	resource->occ_get = NULL;
	resource->occ_get_priv = NULL;
	resource->occ_get_priv = NULL;
out:
out:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_resource_occ_get_unregister);
EXPORT_SYMBOL_GPL(devlink_resource_occ_get_unregister);


@@ -11006,7 +11006,7 @@ devlink_region_create(struct devlink *devlink,
	if (WARN_ON(!ops) || WARN_ON(!ops->destructor))
	if (WARN_ON(!ops) || WARN_ON(!ops->destructor))
		return ERR_PTR(-EINVAL);
		return ERR_PTR(-EINVAL);


	mutex_lock(&devlink->lock);
	devl_lock(devlink);


	if (devlink_region_get_by_name(devlink, ops->name)) {
	if (devlink_region_get_by_name(devlink, ops->name)) {
		err = -EEXIST;
		err = -EEXIST;
@@ -11027,11 +11027,11 @@ devlink_region_create(struct devlink *devlink,
	list_add_tail(&region->list, &devlink->region_list);
	list_add_tail(&region->list, &devlink->region_list);
	devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW);
	devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW);


	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return region;
	return region;


unlock:
unlock:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return ERR_PTR(err);
	return ERR_PTR(err);
}
}
EXPORT_SYMBOL_GPL(devlink_region_create);
EXPORT_SYMBOL_GPL(devlink_region_create);
@@ -11056,7 +11056,7 @@ devlink_port_region_create(struct devlink_port *port,
	if (WARN_ON(!ops) || WARN_ON(!ops->destructor))
	if (WARN_ON(!ops) || WARN_ON(!ops->destructor))
		return ERR_PTR(-EINVAL);
		return ERR_PTR(-EINVAL);


	mutex_lock(&devlink->lock);
	devl_lock(devlink);


	if (devlink_port_region_get_by_name(port, ops->name)) {
	if (devlink_port_region_get_by_name(port, ops->name)) {
		err = -EEXIST;
		err = -EEXIST;
@@ -11078,11 +11078,11 @@ devlink_port_region_create(struct devlink_port *port,
	list_add_tail(&region->list, &port->region_list);
	list_add_tail(&region->list, &port->region_list);
	devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW);
	devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW);


	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return region;
	return region;


unlock:
unlock:
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return ERR_PTR(err);
	return ERR_PTR(err);
}
}
EXPORT_SYMBOL_GPL(devlink_port_region_create);
EXPORT_SYMBOL_GPL(devlink_port_region_create);
@@ -11097,7 +11097,7 @@ void devlink_region_destroy(struct devlink_region *region)
	struct devlink *devlink = region->devlink;
	struct devlink *devlink = region->devlink;
	struct devlink_snapshot *snapshot, *ts;
	struct devlink_snapshot *snapshot, *ts;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);


	/* Free all snapshots of region */
	/* Free all snapshots of region */
	list_for_each_entry_safe(snapshot, ts, &region->snapshot_list, list)
	list_for_each_entry_safe(snapshot, ts, &region->snapshot_list, list)
@@ -11106,7 +11106,7 @@ void devlink_region_destroy(struct devlink_region *region)
	list_del(&region->list);
	list_del(&region->list);


	devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_DEL);
	devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_DEL);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	kfree(region);
	kfree(region);
}
}
EXPORT_SYMBOL_GPL(devlink_region_destroy);
EXPORT_SYMBOL_GPL(devlink_region_destroy);
@@ -11130,9 +11130,9 @@ int devlink_region_snapshot_id_get(struct devlink *devlink, u32 *id)
{
{
	int err;
	int err;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	err = __devlink_region_snapshot_id_get(devlink, id);
	err = __devlink_region_snapshot_id_get(devlink, id);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);


	return err;
	return err;
}
}
@@ -11150,9 +11150,9 @@ EXPORT_SYMBOL_GPL(devlink_region_snapshot_id_get);
 */
 */
void devlink_region_snapshot_id_put(struct devlink *devlink, u32 id)
void devlink_region_snapshot_id_put(struct devlink *devlink, u32 id)
{
{
	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	__devlink_snapshot_id_decrement(devlink, id);
	__devlink_snapshot_id_decrement(devlink, id);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_region_snapshot_id_put);
EXPORT_SYMBOL_GPL(devlink_region_snapshot_id_put);


@@ -11174,9 +11174,9 @@ int devlink_region_snapshot_create(struct devlink_region *region,
	struct devlink *devlink = region->devlink;
	struct devlink *devlink = region->devlink;
	int err;
	int err;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	err = __devlink_region_snapshot_create(region, data, snapshot_id);
	err = __devlink_region_snapshot_create(region, data, snapshot_id);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);


	return err;
	return err;
}
}
@@ -11559,7 +11559,7 @@ int devlink_traps_register(struct devlink *devlink,
	if (!devlink->ops->trap_init || !devlink->ops->trap_action_set)
	if (!devlink->ops->trap_init || !devlink->ops->trap_action_set)
		return -EINVAL;
		return -EINVAL;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	for (i = 0; i < traps_count; i++) {
	for (i = 0; i < traps_count; i++) {
		const struct devlink_trap *trap = &traps[i];
		const struct devlink_trap *trap = &traps[i];


@@ -11571,7 +11571,7 @@ int devlink_traps_register(struct devlink *devlink,
		if (err)
		if (err)
			goto err_trap_register;
			goto err_trap_register;
	}
	}
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);


	return 0;
	return 0;


@@ -11579,7 +11579,7 @@ int devlink_traps_register(struct devlink *devlink,
err_trap_verify:
err_trap_verify:
	for (i--; i >= 0; i--)
	for (i--; i >= 0; i--)
		devlink_trap_unregister(devlink, &traps[i]);
		devlink_trap_unregister(devlink, &traps[i]);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_traps_register);
EXPORT_SYMBOL_GPL(devlink_traps_register);
@@ -11596,7 +11596,7 @@ void devlink_traps_unregister(struct devlink *devlink,
{
{
	int i;
	int i;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	/* Make sure we do not have any packets in-flight while unregistering
	/* Make sure we do not have any packets in-flight while unregistering
	 * traps by disabling all of them and waiting for a grace period.
	 * traps by disabling all of them and waiting for a grace period.
	 */
	 */
@@ -11605,7 +11605,7 @@ void devlink_traps_unregister(struct devlink *devlink,
	synchronize_rcu();
	synchronize_rcu();
	for (i = traps_count - 1; i >= 0; i--)
	for (i = traps_count - 1; i >= 0; i--)
		devlink_trap_unregister(devlink, &traps[i]);
		devlink_trap_unregister(devlink, &traps[i]);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_traps_unregister);
EXPORT_SYMBOL_GPL(devlink_traps_unregister);


@@ -11777,7 +11777,7 @@ int devlink_trap_groups_register(struct devlink *devlink,
{
{
	int i, err;
	int i, err;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	for (i = 0; i < groups_count; i++) {
	for (i = 0; i < groups_count; i++) {
		const struct devlink_trap_group *group = &groups[i];
		const struct devlink_trap_group *group = &groups[i];


@@ -11789,7 +11789,7 @@ int devlink_trap_groups_register(struct devlink *devlink,
		if (err)
		if (err)
			goto err_trap_group_register;
			goto err_trap_group_register;
	}
	}
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);


	return 0;
	return 0;


@@ -11797,7 +11797,7 @@ int devlink_trap_groups_register(struct devlink *devlink,
err_trap_group_verify:
err_trap_group_verify:
	for (i--; i >= 0; i--)
	for (i--; i >= 0; i--)
		devlink_trap_group_unregister(devlink, &groups[i]);
		devlink_trap_group_unregister(devlink, &groups[i]);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_trap_groups_register);
EXPORT_SYMBOL_GPL(devlink_trap_groups_register);
@@ -11814,10 +11814,10 @@ void devlink_trap_groups_unregister(struct devlink *devlink,
{
{
	int i;
	int i;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	for (i = groups_count - 1; i >= 0; i--)
	for (i = groups_count - 1; i >= 0; i--)
		devlink_trap_group_unregister(devlink, &groups[i]);
		devlink_trap_group_unregister(devlink, &groups[i]);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_trap_groups_unregister);
EXPORT_SYMBOL_GPL(devlink_trap_groups_unregister);


@@ -11917,7 +11917,7 @@ devlink_trap_policers_register(struct devlink *devlink,
{
{
	int i, err;
	int i, err;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	for (i = 0; i < policers_count; i++) {
	for (i = 0; i < policers_count; i++) {
		const struct devlink_trap_policer *policer = &policers[i];
		const struct devlink_trap_policer *policer = &policers[i];


@@ -11932,7 +11932,7 @@ devlink_trap_policers_register(struct devlink *devlink,
		if (err)
		if (err)
			goto err_trap_policer_register;
			goto err_trap_policer_register;
	}
	}
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);


	return 0;
	return 0;


@@ -11940,7 +11940,7 @@ devlink_trap_policers_register(struct devlink *devlink,
err_trap_policer_verify:
err_trap_policer_verify:
	for (i--; i >= 0; i--)
	for (i--; i >= 0; i--)
		devlink_trap_policer_unregister(devlink, &policers[i]);
		devlink_trap_policer_unregister(devlink, &policers[i]);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
	return err;
	return err;
}
}
EXPORT_SYMBOL_GPL(devlink_trap_policers_register);
EXPORT_SYMBOL_GPL(devlink_trap_policers_register);
@@ -11958,10 +11958,10 @@ devlink_trap_policers_unregister(struct devlink *devlink,
{
{
	int i;
	int i;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	for (i = policers_count - 1; i >= 0; i--)
	for (i = policers_count - 1; i >= 0; i--)
		devlink_trap_policer_unregister(devlink, &policers[i]);
		devlink_trap_policer_unregister(devlink, &policers[i]);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}
EXPORT_SYMBOL_GPL(devlink_trap_policers_unregister);
EXPORT_SYMBOL_GPL(devlink_trap_policers_unregister);


@@ -12015,9 +12015,9 @@ void devlink_compat_running_version(struct devlink *devlink,
	if (!devlink->ops->info_get)
	if (!devlink->ops->info_get)
		return;
		return;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	__devlink_compat_running_version(devlink, buf, len);
	__devlink_compat_running_version(devlink, buf, len);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);
}
}


int devlink_compat_flash_update(struct devlink *devlink, const char *file_name)
int devlink_compat_flash_update(struct devlink *devlink, const char *file_name)
@@ -12032,11 +12032,11 @@ int devlink_compat_flash_update(struct devlink *devlink, const char *file_name)
	if (ret)
	if (ret)
		return ret;
		return ret;


	mutex_lock(&devlink->lock);
	devl_lock(devlink);
	devlink_flash_update_begin_notify(devlink);
	devlink_flash_update_begin_notify(devlink);
	ret = devlink->ops->flash_update(devlink, &params, NULL);
	ret = devlink->ops->flash_update(devlink, &params, NULL);
	devlink_flash_update_end_notify(devlink);
	devlink_flash_update_end_notify(devlink);
	mutex_unlock(&devlink->lock);
	devl_unlock(devlink);


	release_firmware(params.fw);
	release_firmware(params.fw);