net: devlink: convert devlink port type-specific pointers to union
Instead of storing type_dev as a void pointer, convert it to union and use it to store either struct net_device or struct ib_device pointer. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
0884aaf37a
commit
3830c5719a
@ -121,12 +121,19 @@ struct devlink_port {
|
||||
struct list_head region_list;
|
||||
struct devlink *devlink;
|
||||
unsigned int index;
|
||||
spinlock_t type_lock; /* Protects type and type_dev
|
||||
* pointer consistency.
|
||||
spinlock_t type_lock; /* Protects type and type_eth/ib
|
||||
* structures consistency.
|
||||
*/
|
||||
enum devlink_port_type type;
|
||||
enum devlink_port_type desired_type;
|
||||
void *type_dev;
|
||||
union {
|
||||
struct {
|
||||
struct net_device *netdev;
|
||||
} type_eth;
|
||||
struct {
|
||||
struct ib_device *ibdev;
|
||||
} type_ib;
|
||||
};
|
||||
struct devlink_port_attrs attrs;
|
||||
u8 attrs_set:1,
|
||||
switch_port:1,
|
||||
|
@ -1303,7 +1303,7 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
|
||||
goto nla_put_failure_type_locked;
|
||||
if (devlink_port->type == DEVLINK_PORT_TYPE_ETH) {
|
||||
struct net *net = devlink_net(devlink_port->devlink);
|
||||
struct net_device *netdev = devlink_port->type_dev;
|
||||
struct net_device *netdev = devlink_port->type_eth.netdev;
|
||||
|
||||
if (netdev && net_eq(net, dev_net(netdev)) &&
|
||||
(nla_put_u32(msg, DEVLINK_ATTR_PORT_NETDEV_IFINDEX,
|
||||
@ -1313,7 +1313,7 @@ static int devlink_nl_port_fill(struct sk_buff *msg,
|
||||
goto nla_put_failure_type_locked;
|
||||
}
|
||||
if (devlink_port->type == DEVLINK_PORT_TYPE_IB) {
|
||||
struct ib_device *ibdev = devlink_port->type_dev;
|
||||
struct ib_device *ibdev = devlink_port->type_ib.ibdev;
|
||||
|
||||
if (ibdev &&
|
||||
nla_put_string(msg, DEVLINK_ATTR_PORT_IBDEV_NAME,
|
||||
@ -10003,7 +10003,16 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
|
||||
devlink_port_type_warn_cancel(devlink_port);
|
||||
spin_lock_bh(&devlink_port->type_lock);
|
||||
devlink_port->type = type;
|
||||
devlink_port->type_dev = type_dev;
|
||||
switch (type) {
|
||||
case DEVLINK_PORT_TYPE_ETH:
|
||||
devlink_port->type_eth.netdev = type_dev;
|
||||
break;
|
||||
case DEVLINK_PORT_TYPE_IB:
|
||||
devlink_port->type_ib.ibdev = type_dev;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
spin_unlock_bh(&devlink_port->type_lock);
|
||||
devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
|
||||
}
|
||||
@ -12016,7 +12025,7 @@ devlink_trap_report_metadata_set(struct devlink_trap_metadata *metadata,
|
||||
|
||||
spin_lock(&in_devlink_port->type_lock);
|
||||
if (in_devlink_port->type == DEVLINK_PORT_TYPE_ETH)
|
||||
metadata->input_dev = in_devlink_port->type_dev;
|
||||
metadata->input_dev = in_devlink_port->type_eth.netdev;
|
||||
spin_unlock(&in_devlink_port->type_lock);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user