rdma: Move per-device handler function to generic code
Most of the proposed objects are working in the scope "dev" and will implement the same logic. Move the code to utils.c, so other objects will be able to reuse the code. Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
99da90326e
commit
8b92a2c930
28
rdma/dev.c
28
rdma/dev.c
|
|
@ -241,33 +241,7 @@ static int dev_one_show(struct rd *rd)
|
|||
|
||||
static int dev_show(struct rd *rd)
|
||||
{
|
||||
struct dev_map *dev_map;
|
||||
int ret = 0;
|
||||
|
||||
if (rd->json_output)
|
||||
jsonw_start_array(rd->jw);
|
||||
if (rd_no_arg(rd)) {
|
||||
list_for_each_entry(dev_map, &rd->dev_map_list, list) {
|
||||
rd->dev_idx = dev_map->idx;
|
||||
ret = dev_one_show(rd);
|
||||
if (ret)
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
dev_map = dev_map_lookup(rd, false);
|
||||
if (!dev_map) {
|
||||
pr_err("Wrong device name\n");
|
||||
ret = -ENOENT;
|
||||
goto out;
|
||||
}
|
||||
rd_arg_inc(rd);
|
||||
rd->dev_idx = dev_map->idx;
|
||||
ret = dev_one_show(rd);
|
||||
}
|
||||
out:
|
||||
if (rd->json_output)
|
||||
jsonw_end_array(rd->jw);
|
||||
return ret;
|
||||
return rd_exec_dev(rd, dev_one_show);
|
||||
}
|
||||
|
||||
int cmd_dev(struct rd *rd)
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ uint32_t get_port_from_argv(struct rd *rd);
|
|||
int cmd_dev(struct rd *rd);
|
||||
int cmd_link(struct rd *rd);
|
||||
int rd_exec_cmd(struct rd *rd, const struct rd_cmd *c, const char *str);
|
||||
int rd_exec_dev(struct rd *rd, int (*cb)(struct rd *rd));
|
||||
|
||||
/*
|
||||
* Device manipulation
|
||||
|
|
|
|||
31
rdma/utils.c
31
rdma/utils.c
|
|
@ -159,6 +159,37 @@ void rd_free_devmap(struct rd *rd)
|
|||
dev_map_cleanup(rd);
|
||||
}
|
||||
|
||||
int rd_exec_dev(struct rd *rd, int (*cb)(struct rd *rd))
|
||||
{
|
||||
struct dev_map *dev_map;
|
||||
int ret = 0;
|
||||
|
||||
if (rd->json_output)
|
||||
jsonw_start_array(rd->jw);
|
||||
if (rd_no_arg(rd)) {
|
||||
list_for_each_entry(dev_map, &rd->dev_map_list, list) {
|
||||
rd->dev_idx = dev_map->idx;
|
||||
ret = cb(rd);
|
||||
if (ret)
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
dev_map = dev_map_lookup(rd, false);
|
||||
if (!dev_map) {
|
||||
pr_err("Wrong device name\n");
|
||||
ret = -ENOENT;
|
||||
goto out;
|
||||
}
|
||||
rd_arg_inc(rd);
|
||||
rd->dev_idx = dev_map->idx;
|
||||
ret = cb(rd);
|
||||
}
|
||||
out:
|
||||
if (rd->json_output)
|
||||
jsonw_end_array(rd->jw);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rd_exec_cmd(struct rd *rd, const struct rd_cmd *cmds, const char *str)
|
||||
{
|
||||
const struct rd_cmd *c;
|
||||
|
|
|
|||
Loading…
Reference in New Issue