mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
Merge branch 'team-do-some-cleanups-in-team-driver'
Zhengchao Shao says: ==================== team: do some cleanups in team driver Do some cleanups in team driver. ==================== Link: https://lore.kernel.org/r/20230807012556.3146071-1-shaozhengchao@huawei.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
c0256168d1
|
|
@ -149,7 +149,6 @@ static int __team_option_inst_add(struct team *team, struct team_option *option,
|
|||
struct team_option_inst *opt_inst;
|
||||
unsigned int array_size;
|
||||
unsigned int i;
|
||||
int err;
|
||||
|
||||
array_size = option->array_size;
|
||||
if (!array_size)
|
||||
|
|
@ -165,11 +164,8 @@ static int __team_option_inst_add(struct team *team, struct team_option *option,
|
|||
opt_inst->changed = true;
|
||||
opt_inst->removed = false;
|
||||
list_add_tail(&opt_inst->list, &team->option_inst_list);
|
||||
if (option->init) {
|
||||
err = option->init(team, &opt_inst->info);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
if (option->init)
|
||||
option->init(team, &opt_inst->info);
|
||||
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -362,7 +358,9 @@ static int team_option_get(struct team *team,
|
|||
{
|
||||
if (!opt_inst->option->getter)
|
||||
return -EOPNOTSUPP;
|
||||
return opt_inst->option->getter(team, ctx);
|
||||
|
||||
opt_inst->option->getter(team, ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_option_set(struct team *team,
|
||||
|
|
@ -1377,10 +1375,9 @@ static int team_port_del(struct team *team, struct net_device *port_dev)
|
|||
* Net device ops
|
||||
*****************/
|
||||
|
||||
static int team_mode_option_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
static void team_mode_option_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
ctx->data.str_val = team->mode->kind;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_mode_option_set(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
|
|
@ -1388,11 +1385,10 @@ static int team_mode_option_set(struct team *team, struct team_gsetter_ctx *ctx)
|
|||
return team_change_mode(team, ctx->data.str_val);
|
||||
}
|
||||
|
||||
static int team_notify_peers_count_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_notify_peers_count_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
ctx->data.u32_val = team->notify_peers.count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_notify_peers_count_set(struct team *team,
|
||||
|
|
@ -1402,11 +1398,10 @@ static int team_notify_peers_count_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_notify_peers_interval_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_notify_peers_interval_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
ctx->data.u32_val = team->notify_peers.interval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_notify_peers_interval_set(struct team *team,
|
||||
|
|
@ -1416,11 +1411,10 @@ static int team_notify_peers_interval_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_mcast_rejoin_count_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_mcast_rejoin_count_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
ctx->data.u32_val = team->mcast_rejoin.count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_mcast_rejoin_count_set(struct team *team,
|
||||
|
|
@ -1430,11 +1424,10 @@ static int team_mcast_rejoin_count_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_mcast_rejoin_interval_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_mcast_rejoin_interval_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
ctx->data.u32_val = team->mcast_rejoin.interval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_mcast_rejoin_interval_set(struct team *team,
|
||||
|
|
@ -1444,13 +1437,12 @@ static int team_mcast_rejoin_interval_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_port_en_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_port_en_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *port = ctx->info->port;
|
||||
|
||||
ctx->data.bool_val = team_port_enabled(port);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_port_en_option_set(struct team *team,
|
||||
|
|
@ -1465,13 +1457,12 @@ static int team_port_en_option_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_user_linkup_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_user_linkup_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *port = ctx->info->port;
|
||||
|
||||
ctx->data.bool_val = port->user.linkup;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __team_carrier_check(struct team *team);
|
||||
|
|
@ -1487,13 +1478,12 @@ static int team_user_linkup_option_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_user_linkup_en_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_user_linkup_en_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *port = ctx->info->port;
|
||||
|
||||
ctx->data.bool_val = port->user.linkup_enabled;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_user_linkup_en_option_set(struct team *team,
|
||||
|
|
@ -1507,13 +1497,12 @@ static int team_user_linkup_en_option_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_priority_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_priority_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *port = ctx->info->port;
|
||||
|
||||
ctx->data.s32_val = port->priority;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_priority_option_set(struct team *team,
|
||||
|
|
@ -1529,13 +1518,12 @@ static int team_priority_option_set(struct team *team,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int team_queue_id_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void team_queue_id_option_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *port = ctx->info->port;
|
||||
|
||||
ctx->data.u32_val = port->queue_id;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int team_queue_id_option_set(struct team *team,
|
||||
|
|
@ -2892,7 +2880,7 @@ static int __init team_nl_init(void)
|
|||
return genl_register_family(&team_nl_family);
|
||||
}
|
||||
|
||||
static void team_nl_fini(void)
|
||||
static void __exit team_nl_fini(void)
|
||||
{
|
||||
genl_unregister_family(&team_nl_family);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,14 +57,13 @@ static void ab_port_leave(struct team *team, struct team_port *port)
|
|||
}
|
||||
}
|
||||
|
||||
static int ab_active_port_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
static void ab_active_port_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
{
|
||||
ab_priv(team)->ap_opt_inst_info = info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
static void ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *active_port;
|
||||
|
||||
|
|
@ -74,7 +73,6 @@ static int ab_active_port_get(struct team *team, struct team_gsetter_ctx *ctx)
|
|||
ctx->data.u32_val = active_port->dev->ifindex;
|
||||
else
|
||||
ctx->data.u32_val = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ab_active_port_set(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/if_team.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@ static rx_handler_result_t lb_receive(struct team *team, struct team_port *port,
|
|||
struct lb_priv;
|
||||
|
||||
typedef struct team_port *lb_select_tx_port_func_t(struct team *,
|
||||
struct lb_priv *,
|
||||
struct sk_buff *,
|
||||
unsigned char);
|
||||
|
||||
#define LB_TX_HASHTABLE_SIZE 256 /* hash is a char */
|
||||
|
|
@ -118,8 +116,6 @@ static void lb_tx_hash_to_port_mapping_null_port(struct team *team,
|
|||
|
||||
/* Basic tx selection based solely by hash */
|
||||
static struct team_port *lb_hash_select_tx_port(struct team *team,
|
||||
struct lb_priv *lb_priv,
|
||||
struct sk_buff *skb,
|
||||
unsigned char hash)
|
||||
{
|
||||
int port_index = team_num_to_port_index(team, hash);
|
||||
|
|
@ -129,17 +125,16 @@ static struct team_port *lb_hash_select_tx_port(struct team *team,
|
|||
|
||||
/* Hash to port mapping select tx port */
|
||||
static struct team_port *lb_htpm_select_tx_port(struct team *team,
|
||||
struct lb_priv *lb_priv,
|
||||
struct sk_buff *skb,
|
||||
unsigned char hash)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
struct team_port *port;
|
||||
|
||||
port = rcu_dereference_bh(LB_HTPM_PORT_BY_HASH(lb_priv, hash));
|
||||
if (likely(port))
|
||||
return port;
|
||||
/* If no valid port in the table, fall back to simple hash */
|
||||
return lb_hash_select_tx_port(team, lb_priv, skb, hash);
|
||||
return lb_hash_select_tx_port(team, hash);
|
||||
}
|
||||
|
||||
struct lb_select_tx_port {
|
||||
|
|
@ -229,7 +224,7 @@ static bool lb_transmit(struct team *team, struct sk_buff *skb)
|
|||
|
||||
hash = lb_get_skb_hash(lb_priv, skb);
|
||||
select_tx_port_func = rcu_dereference_bh(lb_priv->select_tx_port_func);
|
||||
port = select_tx_port_func(team, lb_priv, skb, hash);
|
||||
port = select_tx_port_func(team, hash);
|
||||
if (unlikely(!port))
|
||||
goto drop;
|
||||
if (team_dev_queue_xmit(team, port, skb))
|
||||
|
|
@ -242,19 +237,18 @@ static bool lb_transmit(struct team *team, struct sk_buff *skb)
|
|||
return false;
|
||||
}
|
||||
|
||||
static int lb_bpf_func_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
static void lb_bpf_func_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
|
||||
if (!lb_priv->ex->orig_fprog) {
|
||||
ctx->data.bin_val.len = 0;
|
||||
ctx->data.bin_val.ptr = NULL;
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
ctx->data.bin_val.len = lb_priv->ex->orig_fprog->len *
|
||||
sizeof(struct sock_filter);
|
||||
ctx->data.bin_val.ptr = lb_priv->ex->orig_fprog->filter;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __fprog_create(struct sock_fprog_kern **pfprog, u32 data_len,
|
||||
|
|
@ -335,7 +329,7 @@ static void lb_bpf_func_free(struct team *team)
|
|||
bpf_prog_destroy(fp);
|
||||
}
|
||||
|
||||
static int lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
static void lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
lb_select_tx_port_func_t *func;
|
||||
|
|
@ -346,7 +340,6 @@ static int lb_tx_method_get(struct team *team, struct team_gsetter_ctx *ctx)
|
|||
name = lb_select_tx_port_get_name(func);
|
||||
BUG_ON(!name);
|
||||
ctx->data.str_val = name;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_tx_method_set(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
|
|
@ -361,18 +354,17 @@ static int lb_tx_method_set(struct team *team, struct team_gsetter_ctx *ctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lb_tx_hash_to_port_mapping_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
static void lb_tx_hash_to_port_mapping_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
unsigned char hash = info->array_index;
|
||||
|
||||
LB_HTPM_OPT_INST_INFO_BY_HASH(lb_priv, hash) = info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_tx_hash_to_port_mapping_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void lb_tx_hash_to_port_mapping_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
struct team_port *port;
|
||||
|
|
@ -380,7 +372,6 @@ static int lb_tx_hash_to_port_mapping_get(struct team *team,
|
|||
|
||||
port = LB_HTPM_PORT_BY_HASH(lb_priv, hash);
|
||||
ctx->data.u32_val = port ? port->dev->ifindex : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_tx_hash_to_port_mapping_set(struct team *team,
|
||||
|
|
@ -401,44 +392,40 @@ static int lb_tx_hash_to_port_mapping_set(struct team *team,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int lb_hash_stats_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
static void lb_hash_stats_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
unsigned char hash = info->array_index;
|
||||
|
||||
lb_priv->ex->stats.info[hash].opt_inst_info = info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_hash_stats_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
static void lb_hash_stats_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
unsigned char hash = ctx->info->array_index;
|
||||
|
||||
ctx->data.bin_val.ptr = &lb_priv->ex->stats.info[hash].stats;
|
||||
ctx->data.bin_val.len = sizeof(struct lb_stats);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_port_stats_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
static void lb_port_stats_init(struct team *team,
|
||||
struct team_option_inst_info *info)
|
||||
{
|
||||
struct team_port *port = info->port;
|
||||
struct lb_port_priv *lb_port_priv = get_lb_port_priv(port);
|
||||
|
||||
lb_port_priv->stats_info.opt_inst_info = info;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_port_stats_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
static void lb_port_stats_get(struct team *team, struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct team_port *port = ctx->info->port;
|
||||
struct lb_port_priv *lb_port_priv = get_lb_port_priv(port);
|
||||
|
||||
ctx->data.bin_val.ptr = &lb_port_priv->stats_info.stats;
|
||||
ctx->data.bin_val.len = sizeof(struct lb_stats);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __lb_stats_info_refresh_prepare(struct lb_stats_info *s_info)
|
||||
|
|
@ -531,13 +518,12 @@ static void lb_stats_refresh(struct work_struct *work)
|
|||
mutex_unlock(&team->lock);
|
||||
}
|
||||
|
||||
static int lb_stats_refresh_interval_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
static void lb_stats_refresh_interval_get(struct team *team,
|
||||
struct team_gsetter_ctx *ctx)
|
||||
{
|
||||
struct lb_priv *lb_priv = get_lb_priv(team);
|
||||
|
||||
ctx->data.u32_val = lb_priv->ex->stats.refresh_interval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lb_stats_refresh_interval_set(struct team *team,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/if_team.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -162,8 +162,8 @@ struct team_option {
|
|||
bool per_port;
|
||||
unsigned int array_size; /* != 0 means the option is array */
|
||||
enum team_option_type type;
|
||||
int (*init)(struct team *team, struct team_option_inst_info *info);
|
||||
int (*getter)(struct team *team, struct team_gsetter_ctx *ctx);
|
||||
void (*init)(struct team *team, struct team_option_inst_info *info);
|
||||
void (*getter)(struct team *team, struct team_gsetter_ctx *ctx);
|
||||
int (*setter)(struct team *team, struct team_gsetter_ctx *ctx);
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user