devlink: Extend SF port attributes to have external attribute
Extended SF port attributes to have optional external flag similar to PCI PF and VF port attributes. External atttibute is required to generate unique phys_port_name when PF number and SF number are overlapping between two controllers similar to SR-IOV VFs. When a SF is for external controller an example view of external SF port and config sequence. 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 splittable false function: hw_addr 00:00:00:00:00:00 state inactive opstate detached phys_port_name construction: $ cat /sys/class/net/eth1/phys_port_name c1pf0sf77 Signed-off-by: Parav Pandit <parav@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Vu Pham <vuhuong@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
1d7979352f
commit
a1ab3e4554
|
@ -141,7 +141,7 @@ int mlx5_esw_devlink_sf_port_register(struct mlx5_eswitch *esw, struct devlink_p
|
|||
mlx5_esw_get_port_parent_id(dev, &ppid);
|
||||
memcpy(dl_port->attrs.switch_id.id, &ppid.id[0], ppid.id_len);
|
||||
dl_port->attrs.switch_id.id_len = ppid.id_len;
|
||||
devlink_port_attrs_pci_sf_set(dl_port, 0, pfnum, sfnum);
|
||||
devlink_port_attrs_pci_sf_set(dl_port, 0, pfnum, sfnum, false);
|
||||
devlink = priv_to_devlink(dev);
|
||||
dl_port_index = mlx5_esw_vport_to_devlink_port_index(dev, vport_num);
|
||||
err = devlink_port_register(devlink, dl_port, dl_port_index);
|
||||
|
|
|
@ -98,11 +98,13 @@ struct devlink_port_pci_vf_attrs {
|
|||
* @controller: Associated controller number
|
||||
* @sf: Associated PCI SF for of the PCI PF for this port.
|
||||
* @pf: Associated PCI PF number for this port.
|
||||
* @external: when set, indicates if a port is for an external controller
|
||||
*/
|
||||
struct devlink_port_pci_sf_attrs {
|
||||
u32 controller;
|
||||
u32 sf;
|
||||
u16 pf;
|
||||
u8 external:1;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1508,7 +1510,8 @@ void devlink_port_attrs_pci_pf_set(struct devlink_port *devlink_port, u32 contro
|
|||
void devlink_port_attrs_pci_vf_set(struct devlink_port *devlink_port, u32 controller,
|
||||
u16 pf, u16 vf, bool external);
|
||||
void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port,
|
||||
u32 controller, u16 pf, u32 sf);
|
||||
u32 controller, u16 pf, u32 sf,
|
||||
bool external);
|
||||
int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
||||
u32 size, u16 ingress_pools_count,
|
||||
u16 egress_pools_count, u16 ingress_tc_count,
|
||||
|
|
|
@ -8599,9 +8599,10 @@ EXPORT_SYMBOL_GPL(devlink_port_attrs_pci_vf_set);
|
|||
* @controller: associated controller number for the devlink port instance
|
||||
* @pf: associated PF for the devlink port instance
|
||||
* @sf: associated SF of a PF for the devlink port instance
|
||||
* @external: indicates if the port is for an external controller
|
||||
*/
|
||||
void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port, u32 controller,
|
||||
u16 pf, u32 sf)
|
||||
u16 pf, u32 sf, bool external)
|
||||
{
|
||||
struct devlink_port_attrs *attrs = &devlink_port->attrs;
|
||||
int ret;
|
||||
|
@ -8615,6 +8616,7 @@ void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port, u32 contro
|
|||
attrs->pci_sf.controller = controller;
|
||||
attrs->pci_sf.pf = pf;
|
||||
attrs->pci_sf.sf = sf;
|
||||
attrs->pci_sf.external = external;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_port_attrs_pci_sf_set);
|
||||
|
||||
|
@ -8667,6 +8669,13 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
|
|||
attrs->pci_vf.pf, attrs->pci_vf.vf);
|
||||
break;
|
||||
case DEVLINK_PORT_FLAVOUR_PCI_SF:
|
||||
if (attrs->pci_sf.external) {
|
||||
n = snprintf(name, len, "c%u", attrs->pci_sf.controller);
|
||||
if (n >= len)
|
||||
return -EINVAL;
|
||||
len -= n;
|
||||
name += n;
|
||||
}
|
||||
n = snprintf(name, len, "pf%usf%u", attrs->pci_sf.pf,
|
||||
attrs->pci_sf.sf);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue