devlink: Add optional controller user input
A user optionally provides the external controller number when user
wants to create devlink port for the external controller.
An example on eswitch system:
$ devlink dev eswitch set pci/0033:01:00.0 mode switchdev
$ devlink port show
pci/0033:01:00.0/196607: type eth netdev enP51p1s0f0np0 flavour physical port 0 splittable false
pci/0033:01:00.0/131072: type eth netdev eth0 flavour pcipf controller 1 pfnum 0 external true splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add pci/0033:01:00.0 flavour pcisf pfnum 0 sfnum 77 controller 1
pci/0033:01:00.0/163840: type eth netdev eth1 flavour pcisf controller 1 pfnum 0 sfnum 77 external true splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
This commit is contained in:
parent
0d5cf51e0d
commit
fbd4b581cb
|
|
@ -286,6 +286,7 @@ static void ifname_map_free(struct ifname_map *ifname_map)
|
|||
#define DL_OPT_PORT_PFNUMBER BIT(43)
|
||||
#define DL_OPT_PORT_SFNUMBER BIT(44)
|
||||
#define DL_OPT_PORT_FUNCTION_STATE BIT(45)
|
||||
#define DL_OPT_PORT_CONTROLLER BIT(46)
|
||||
|
||||
struct dl_opts {
|
||||
uint64_t present; /* flags of present items */
|
||||
|
|
@ -336,6 +337,7 @@ struct dl_opts {
|
|||
uint32_t overwrite_mask;
|
||||
enum devlink_reload_action reload_action;
|
||||
enum devlink_reload_limit reload_limit;
|
||||
uint32_t port_controller;
|
||||
uint32_t port_sfnumber;
|
||||
uint16_t port_flavour;
|
||||
uint16_t port_pfnumber;
|
||||
|
|
@ -1886,6 +1888,12 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required,
|
|||
if (err)
|
||||
return err;
|
||||
o_found |= DL_OPT_PORT_SFNUMBER;
|
||||
} else if (dl_argv_match(dl, "controller") && (o_all & DL_OPT_PORT_CONTROLLER)) {
|
||||
dl_arg_inc(dl);
|
||||
err = dl_argv_uint32_t(dl, &opts->port_controller);
|
||||
if (err)
|
||||
return err;
|
||||
o_found |= DL_OPT_PORT_CONTROLLER;
|
||||
} else {
|
||||
pr_err("Unknown option \"%s\"\n", dl_argv(dl));
|
||||
return -EINVAL;
|
||||
|
|
@ -2079,6 +2087,9 @@ static void dl_opts_put(struct nlmsghdr *nlh, struct dl *dl)
|
|||
mnl_attr_put_u16(nlh, DEVLINK_ATTR_PORT_PCI_PF_NUMBER, opts->port_pfnumber);
|
||||
if (opts->present & DL_OPT_PORT_SFNUMBER)
|
||||
mnl_attr_put_u32(nlh, DEVLINK_ATTR_PORT_PCI_SF_NUMBER, opts->port_sfnumber);
|
||||
if (opts->present & DL_OPT_PORT_CONTROLLER)
|
||||
mnl_attr_put_u32(nlh, DEVLINK_ATTR_PORT_CONTROLLER_NUMBER,
|
||||
opts->port_controller);
|
||||
}
|
||||
|
||||
static int dl_argv_parse_put(struct nlmsghdr *nlh, struct dl *dl,
|
||||
|
|
@ -3795,7 +3806,8 @@ static void cmd_port_help(void)
|
|||
pr_err(" devlink port param set DEV/PORT_INDEX name PARAMETER value VALUE cmode { permanent | driverinit | runtime }\n");
|
||||
pr_err(" devlink port param show [DEV/PORT_INDEX name PARAMETER]\n");
|
||||
pr_err(" devlink port health show [ DEV/PORT_INDEX reporter REPORTER_NAME ]\n");
|
||||
pr_err(" devlink port add DEV/PORT_INDEX flavour FLAVOUR pfnum PFNUM [ sfnum SFNUM ]\n");
|
||||
pr_err(" devlink port add DEV/PORT_INDEX flavour FLAVOUR pfnum PFNUM\n"
|
||||
" [ sfnum SFNUM ][ controller CNUM ]\n");
|
||||
pr_err(" devlink port del DEV/PORT_INDEX\n");
|
||||
}
|
||||
|
||||
|
|
@ -4324,7 +4336,8 @@ static int __cmd_health_show(struct dl *dl, bool show_device, bool show_port);
|
|||
|
||||
static void cmd_port_add_help(void)
|
||||
{
|
||||
pr_err(" devlink port add { DEV | DEV/PORT_INDEX } flavour FLAVOUR pfnum PFNUM [ sfnum SFNUM ]\n");
|
||||
pr_err(" devlink port add DEV/PORT_INDEX flavour FLAVOUR pfnum PFNUM\n"
|
||||
" [ sfnum SFNUM ][ controller CNUM ]\n");
|
||||
}
|
||||
|
||||
static int cmd_port_add(struct dl *dl)
|
||||
|
|
@ -4342,7 +4355,7 @@ static int cmd_port_add(struct dl *dl)
|
|||
|
||||
err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE | DL_OPT_HANDLEP |
|
||||
DL_OPT_PORT_FLAVOUR | DL_OPT_PORT_PFNUMBER,
|
||||
DL_OPT_PORT_SFNUMBER);
|
||||
DL_OPT_PORT_SFNUMBER | DL_OPT_PORT_CONTROLLER);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
|
|||
|
|
@ -52,9 +52,13 @@ devlink-port \- devlink port configuration
|
|||
.IR FLAVOUR " ]"
|
||||
.RB "[ " pcipf
|
||||
.IR PFNUMBER " ]"
|
||||
.br
|
||||
.RB "{ " pcisf
|
||||
.IR SFNUMBER " }"
|
||||
.br
|
||||
.RB "[ " controller
|
||||
.IR CNUM " ]"
|
||||
.br
|
||||
|
||||
.ti -8
|
||||
.B devlink port del
|
||||
|
|
@ -174,6 +178,12 @@ Specifies sfnumber to assign to the device of the SF.
|
|||
This field is optional for those devices which supports auto assignment of the
|
||||
SF number.
|
||||
|
||||
.TP
|
||||
.BR controller " { " controller " } "
|
||||
Specifies controller number for which the SF port is created.
|
||||
This field is optional. It is used only when SF port is created for the
|
||||
external controller.
|
||||
|
||||
.ti -8
|
||||
.SS devlink port function set - Set the port function attribute(s).
|
||||
|
||||
|
|
@ -327,6 +337,17 @@ devlink dev param set pci/0000:01:00.0/1 name internal_error_reset value true cm
|
|||
.RS 4
|
||||
Sets the parameter internal_error_reset of specified devlink port (#1) to true.
|
||||
.RE
|
||||
.PP
|
||||
devlink port add pci/0000:06:00.0 flavour pcisf pfnum 0 sfnum 88 controller 1
|
||||
.RS 4
|
||||
Add a devlink port of flavour PCI SF on controller 1 which has PCI PF of number
|
||||
0 with SF number 88. To make use of the function an example sequence is to add
|
||||
a port, configure the function attribute and activate the function. Once
|
||||
the function usage is completed, deactivate the function and finally delete
|
||||
the port. When there is desire to reuse the port without deletion, it can be
|
||||
reconfigured and activated again when function is in inactive state and
|
||||
function's operational state is detached.
|
||||
.RE
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR devlink (8),
|
||||
|
|
|
|||
Loading…
Reference in New Issue