Skip to content

Commit

Permalink
net/mlx5: E-Switch prepare functions change handler to be modular
Browse files Browse the repository at this point in the history
Eswitch function change handler will service multiple type of events for
VFs and non VF functions update.
Hence, introduce and use the helper function
esw_vfs_changed_event_handler() for handling change in num VFs to improve
the code readability.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
  • Loading branch information
Parav Pandit authored and Saeed Mahameed committed Jul 3, 2019
1 parent 2752b82 commit 7e736f9
Showing 1 changed file with 27 additions and 17 deletions.
44 changes: 27 additions & 17 deletions drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
Original file line number Diff line number Diff line change
Expand Up @@ -2046,38 +2046,48 @@ static void esw_offloads_steering_cleanup(struct mlx5_eswitch *esw)
esw_destroy_offloads_acl_tables(esw);
}

static void esw_functions_changed_event_handler(struct work_struct *work)
static void
esw_vfs_changed_event_handler(struct mlx5_eswitch *esw, const u32 *out)
{
u32 out[MLX5_ST_SZ_DW(query_esw_functions_out)] = {};
struct mlx5_host_work *host_work;
struct mlx5_eswitch *esw;
bool host_pf_disabled;
u16 num_vfs = 0;
int err;

host_work = container_of(work, struct mlx5_host_work, work);
esw = host_work->esw;
u16 new_num_vfs;

err = mlx5_esw_query_functions(esw->dev, out, sizeof(out));
num_vfs = MLX5_GET(query_esw_functions_out, out,
host_params_context.host_num_of_vfs);
new_num_vfs = MLX5_GET(query_esw_functions_out, out,
host_params_context.host_num_of_vfs);
host_pf_disabled = MLX5_GET(query_esw_functions_out, out,
host_params_context.host_pf_disabled);
if (err || host_pf_disabled || num_vfs == esw->esw_funcs.num_vfs)
goto out;

if (new_num_vfs == esw->esw_funcs.num_vfs || host_pf_disabled)
return;

/* Number of VFs can only change from "0 to x" or "x to 0". */
if (esw->esw_funcs.num_vfs > 0) {
esw_offloads_unload_vf_reps(esw, esw->esw_funcs.num_vfs);
} else {
err = esw_offloads_load_vf_reps(esw, num_vfs);
int err;

err = esw_offloads_load_vf_reps(esw, new_num_vfs);
if (err)
goto out;
return;
}
esw->esw_funcs.num_vfs = new_num_vfs;
}

static void esw_functions_changed_event_handler(struct work_struct *work)
{
u32 out[MLX5_ST_SZ_DW(query_esw_functions_out)] = {};
struct mlx5_host_work *host_work;
struct mlx5_eswitch *esw;
int err;

host_work = container_of(work, struct mlx5_host_work, work);
esw = host_work->esw;

esw->esw_funcs.num_vfs = num_vfs;
err = mlx5_esw_query_functions(esw->dev, out, sizeof(out));
if (err)
goto out;

esw_vfs_changed_event_handler(esw, out);
out:
kfree(host_work);
}
Expand Down

0 comments on commit 7e736f9

Please sign in to comment.