* [PATCH net-next 0/7] netdevsim port add, delete support
@ 2021-02-06 12:55 Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
` (7 more replies)
0 siblings, 8 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
This series simulates one or more PCI PF and SF port addition and function
configuration functionality.
Example sequence:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink port:
$ devlink port show netdevsim/netdevsim10/2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Set the MAC address and activate the function:
$ devlink port function set netdevsim/netdevsim10/2 hw_addr 00:11:22:33:44:55 state active
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:11:22:33:44:55",
"state": "active",
"opstate": "attached"
}
}
}
}
Delete PCI SF and PF ports:
$ devlink port del netdevsim/netdevsim10/2
Patch summary:
patch-1 adds support for adding/remove PCI PF port
patch-2 adds support for adding/remove PCI SF port
patch-3 simulates MAC address query
patch-4 simulates setting MAC address
patch-5 simulates state query
patch-6 simulates setting state
patch-7 adds tests
Parav Pandit (7):
netdevsim: Add support for add and delete of a PCI PF port
netdevsim: Add support for add and delete PCI SF port
netdevsim: Simulate get hardware address of a PCI port
netdevsim: Simulate set hardware address of a PCI port
netdevsim: Simulate port function state for a PCI port
netdevsim: Simulate port function set state for a PCI port
netdevsim: Add netdevsim port add test cases
drivers/net/netdevsim/Makefile | 2 +-
drivers/net/netdevsim/dev.c | 14 +
drivers/net/netdevsim/netdevsim.h | 38 ++
drivers/net/netdevsim/port_function.c | 521 ++++++++++++++++++
.../drivers/net/netdevsim/devlink.sh | 72 ++-
5 files changed, 645 insertions(+), 2 deletions(-)
create mode 100644 drivers/net/netdevsim/port_function.c
--
2.26.2
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-06 14:34 ` kernel test robot
` (2 more replies)
2021-02-06 12:55 ` [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
` (6 subsequent siblings)
7 siblings, 3 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Simulate PCI PF ports. Allow user to create one or more PCI PF ports.
Examples:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add devlink port of flavour 'pcipf' for PF number 2:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/4: type eth netdev eth4 flavour pcipf controller 0 pfnum 2 external false splittable false
Show the PCI PF port:
$ devlink port show netdevsim/netdevsim10/4
netdevsim/netdevsim10/4: type eth netdev eth4 flavour pcipf controller 0 pfnum 2 external false splittable false
Delete newly added devlink port:
$ devlink port del netdevsim/netdevsim10/4
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/Makefile | 2 +-
drivers/net/netdevsim/dev.c | 10 +
drivers/net/netdevsim/netdevsim.h | 20 ++
drivers/net/netdevsim/port_function.c | 340 ++++++++++++++++++++++++++
4 files changed, 371 insertions(+), 1 deletion(-)
create mode 100644 drivers/net/netdevsim/port_function.c
diff --git a/drivers/net/netdevsim/Makefile b/drivers/net/netdevsim/Makefile
index ade086eed955..be2aefafc498 100644
--- a/drivers/net/netdevsim/Makefile
+++ b/drivers/net/netdevsim/Makefile
@@ -3,7 +3,7 @@
obj-$(CONFIG_NETDEVSIM) += netdevsim.o
netdevsim-objs := \
- netdev.o dev.o ethtool.o fib.o bus.o health.o udp_tunnels.o
+ netdev.o dev.o ethtool.o fib.o bus.o health.o udp_tunnels.o port_function.o
ifeq ($(CONFIG_BPF_SYSCALL),y)
netdevsim-objs += \
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 816af1f55e2c..806e387918fe 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -905,6 +905,8 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.trap_group_set = nsim_dev_devlink_trap_group_set,
.trap_policer_set = nsim_dev_devlink_trap_policer_set,
.trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
+ .port_new = nsim_dev_devlink_port_new,
+ .port_del = nsim_dev_devlink_port_del,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
@@ -1039,6 +1041,8 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
nsim_dev->ddir,
nsim_dev,
&nsim_dev_take_snapshot_fops);
+
+ nsim_dev_port_fn_enable(nsim_dev);
return 0;
err_health_exit:
@@ -1073,6 +1077,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT;
nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT;
spin_lock_init(&nsim_dev->fa_cookie_lock);
+ nsim_dev_port_fn_init(nsim_dev);
dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev);
@@ -1120,6 +1125,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
if (err)
goto err_bpf_dev_exit;
+ nsim_dev_port_fn_enable(nsim_dev);
devlink_params_publish(devlink);
devlink_reload_enable(devlink);
return 0;
@@ -1154,6 +1160,9 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev)
if (devlink_is_reload_failed(devlink))
return;
+
+ /* Disable and destroy any user created devlink ports */
+ nsim_dev_port_fn_disable(nsim_dev);
debugfs_remove(nsim_dev->take_snapshot);
nsim_dev_port_del_all(nsim_dev);
nsim_dev_health_exit(nsim_dev);
@@ -1178,6 +1187,7 @@ void nsim_dev_remove(struct nsim_bus_dev *nsim_bus_dev)
ARRAY_SIZE(nsim_devlink_params));
devlink_unregister(devlink);
devlink_resources_unregister(devlink, NULL);
+ nsim_dev_port_fn_exit(nsim_dev);
devlink_free(devlink);
}
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index 48163c5f2ec9..31beddede0f2 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -229,6 +229,15 @@ struct nsim_dev {
bool static_iana_vxlan;
u32 sleep;
} udp_ports;
+ struct {
+ struct list_head head;
+ struct ida ida;
+ struct ida pfnum_ida;
+ struct mutex disable_mutex; /* protects port deletion
+ * by driver unload context
+ */
+ bool enabled;
+ } port_functions;
};
static inline struct net *nsim_dev_net(struct nsim_dev *nsim_dev)
@@ -299,3 +308,14 @@ struct nsim_bus_dev {
int nsim_bus_init(void);
void nsim_bus_exit(void);
+
+void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev);
+void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev);
+void nsim_dev_port_fn_enable(struct nsim_dev *nsim_dev);
+void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev);
+int nsim_dev_devlink_port_new(struct devlink *devlink,
+ const struct devlink_port_new_attrs *attrs,
+ struct netlink_ext_ack *extack,
+ unsigned int *new_port_index);
+int nsim_dev_devlink_port_del(struct devlink *devlink, unsigned int port_index,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
new file mode 100644
index 000000000000..a957b754ef92
--- /dev/null
+++ b/drivers/net/netdevsim/port_function.c
@@ -0,0 +1,340 @@
+// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
+/* Copyright (c) 2020 Mellanox Technologies Ltd. */
+
+#include <linux/etherdevice.h>
+#include <uapi/linux/devlink.h>
+
+#include "netdevsim.h"
+
+struct nsim_port_fn {
+ struct devlink_port dl_port;
+ struct net_device *netdev;
+ struct list_head list;
+ unsigned int port_index;
+ enum devlink_port_flavour flavour;
+ u16 pfnum;
+};
+
+static struct devlink_port *
+nsim_dev_port_fn_get_devlink_port(struct net_device *dev)
+{
+ struct nsim_port_fn *port = netdev_priv(dev);
+
+ return &port->dl_port;
+}
+
+static netdev_tx_t
+nsim_dev_port_fn_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ dev_kfree_skb(skb);
+ return NETDEV_TX_OK;
+}
+
+static const struct net_device_ops nsim_netdev_ops = {
+ .ndo_start_xmit = nsim_dev_port_fn_start_xmit,
+ .ndo_get_devlink_port = nsim_dev_port_fn_get_devlink_port,
+};
+
+static void nsim_port_fn_ndev_setup(struct net_device *dev)
+{
+ ether_setup(dev);
+ eth_hw_addr_random(dev);
+
+ dev->tx_queue_len = 0;
+ dev->flags |= IFF_NOARP;
+ dev->flags &= ~IFF_MULTICAST;
+ dev->max_mtu = ETH_MAX_MTU;
+}
+
+static struct nsim_port_fn *
+nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
+ const struct devlink_port_new_attrs *attrs)
+{
+ struct nsim_bus_dev *nsim_bus_dev = dev->nsim_bus_dev;
+ struct nsim_port_fn *port;
+ struct net_device *netdev;
+ int ret;
+
+ netdev = alloc_netdev(sizeof(*port), "eth%d", NET_NAME_UNKNOWN,
+ nsim_port_fn_ndev_setup);
+ if (!netdev)
+ return ERR_PTR(-ENOMEM);
+
+ dev_net_set(netdev, nsim_dev_net(dev));
+ netdev->netdev_ops = &nsim_netdev_ops;
+ nsim_bus_dev = dev->nsim_bus_dev;
+ SET_NETDEV_DEV(netdev, &nsim_bus_dev->dev);
+
+ port = netdev_priv(netdev);
+ memset(port, 0, sizeof(*port));
+ port->netdev = netdev;
+ port->flavour = attrs->flavour;
+
+ if (attrs->port_index_valid)
+ ret = ida_alloc_range(&dev->port_functions.ida,
+ attrs->port_index,
+ attrs->port_index, GFP_KERNEL);
+ else
+ ret = ida_alloc_min(&dev->port_functions.ida,
+ nsim_bus_dev->port_count, GFP_KERNEL);
+ if (ret < 0)
+ goto port_ida_err;
+
+ port->port_index = ret;
+
+ switch (port->flavour) {
+ case DEVLINK_PORT_FLAVOUR_PCI_PF:
+ ret = ida_alloc_range(&dev->port_functions.pfnum_ida,
+ attrs->pfnum, attrs->pfnum,
+ GFP_KERNEL);
+ if (ret < 0)
+ goto fn_ida_err;
+ port->pfnum = ret;
+ break;
+ default:
+ break;
+ }
+ return port;
+
+fn_ida_err:
+ ida_simple_remove(&dev->port_functions.ida, port->port_index);
+port_ida_err:
+ free_netdev(netdev);
+ return ERR_PTR(ret);
+}
+
+static void
+nsim_devlink_port_fn_free(struct nsim_dev *dev, struct nsim_port_fn *port)
+{
+ switch (port->flavour) {
+ case DEVLINK_PORT_FLAVOUR_PCI_PF:
+ ida_simple_remove(&dev->port_functions.pfnum_ida, port->pfnum);
+ break;
+ default:
+ break;
+ }
+ ida_simple_remove(&dev->port_functions.ida, port->port_index);
+ free_netdev(port->netdev);
+}
+
+static bool
+nsim_dev_port_index_internal(struct nsim_dev *nsim_dev, unsigned int port_index)
+{
+ struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev;
+
+ return (port_index < nsim_bus_dev->port_count) ? true : false;
+}
+
+static bool
+nsim_dev_port_port_exists(struct nsim_dev *nsim_dev,
+ const struct devlink_port_new_attrs *attrs)
+{
+ struct nsim_port_fn *tmp;
+
+ list_for_each_entry(tmp, &nsim_dev->port_functions.head, list) {
+ if (attrs->port_index_valid &&
+ tmp->port_index == attrs->port_index)
+ return true;
+ if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
+ tmp->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
+ tmp->pfnum == attrs->pfnum)
+ return true;
+ }
+ return false;
+}
+
+static struct nsim_port_fn *
+nsim_dev_devlink_port_index_lookup(const struct nsim_dev *nsim_dev,
+ unsigned int port_index,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_port_fn *port;
+
+ list_for_each_entry(port, &nsim_dev->port_functions.head, list) {
+ if (port->port_index != port_index)
+ continue;
+ return port;
+ }
+ NL_SET_ERR_MSG_MOD(extack, "User created port not found");
+ return ERR_PTR(-ENOENT);
+}
+
+static int nsim_devlink_port_fn_add(struct devlink *devlink,
+ struct nsim_dev *nsim_dev,
+ struct nsim_port_fn *port,
+ struct netlink_ext_ack *extack)
+{
+ int err;
+
+ list_add(&port->list, &nsim_dev->port_functions.head);
+
+ err = devlink_port_register(devlink, &port->dl_port, port->port_index);
+ if (err)
+ goto reg_err;
+
+ err = register_netdev(port->netdev);
+ if (err)
+ goto netdev_err;
+
+ devlink_port_type_eth_set(&port->dl_port, port->netdev);
+ return 0;
+
+netdev_err:
+ devlink_port_type_clear(&port->dl_port);
+ devlink_port_unregister(&port->dl_port);
+reg_err:
+ list_del(&port->list);
+ return err;
+}
+
+static void nsim_devlink_port_fn_del(struct nsim_dev *nsim_dev,
+ struct nsim_port_fn *port)
+{
+ devlink_port_type_clear(&port->dl_port);
+ unregister_netdev(port->netdev);
+ devlink_port_unregister(&port->dl_port);
+ list_del(&port->list);
+}
+
+static bool
+nsim_dev_port_flavour_supported(const struct nsim_dev *nsim_dev,
+ const struct devlink_port_new_attrs *attrs)
+{
+ return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
+}
+
+int nsim_dev_devlink_port_new(struct devlink *devlink,
+ const struct devlink_port_new_attrs *attrs,
+ struct netlink_ext_ack *extack,
+ unsigned int *new_port_index)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_bus_dev *nsim_bus_dev;
+ struct nsim_port_fn *port;
+ int err;
+
+ nsim_bus_dev = nsim_dev->nsim_bus_dev;
+ if (attrs->port_index_valid &&
+ attrs->port_index < nsim_bus_dev->port_count) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Port with given port index already exist");
+ return -EEXIST;
+ }
+ if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
+ NL_SET_ERR_MSG_MOD(extack, "Unsupported port flavour specified");
+ return -EOPNOTSUPP;
+ }
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ if (!nsim_dev->port_functions.enabled) {
+ err = -ENODEV;
+ goto alloc_err;
+ }
+ if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Port with given attributes already exists");
+ err = -EEXIST;
+ goto alloc_err;
+ }
+ port = nsim_devlink_port_fn_alloc(nsim_dev, attrs);
+ if (IS_ERR(port)) {
+ NL_SET_ERR_MSG_MOD(extack, "Fail to allocate port");
+ err = PTR_ERR(port);
+ goto alloc_err;
+ }
+ memcpy(port->dl_port.attrs.switch_id.id, nsim_dev->switch_id.id,
+ nsim_dev->switch_id.id_len);
+ port->dl_port.attrs.switch_id.id_len = nsim_dev->switch_id.id_len;
+
+ devlink_port_attrs_pci_pf_set(&port->dl_port, 0, port->pfnum, false);
+
+ err = nsim_devlink_port_fn_add(devlink, nsim_dev, port, extack);
+ if (err)
+ goto add_err;
+ *new_port_index = port->port_index;
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return 0;
+
+add_err:
+ nsim_devlink_port_fn_free(nsim_dev, port);
+alloc_err:
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return err;
+}
+
+int nsim_dev_devlink_port_del(struct devlink *devlink, unsigned int port_index,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+ int err = 0;
+
+ if (nsim_dev_port_index_internal(nsim_dev, port_index)) {
+ NL_SET_ERR_MSG_MOD(extack, "Port index doesn't belong to user created port");
+ return -EINVAL;
+ }
+
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ if (!nsim_dev->port_functions.enabled) {
+ err = -ENODEV;
+ goto err;
+ }
+
+ port = nsim_dev_devlink_port_index_lookup(nsim_dev, port_index, extack);
+ if (IS_ERR(port)) {
+ err = PTR_ERR(port);
+ goto err;
+ }
+ nsim_devlink_port_fn_del(nsim_dev, port);
+ nsim_devlink_port_fn_free(nsim_dev, port);
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return 0;
+
+err:
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return PTR_ERR(port);
+}
+
+void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev)
+{
+ mutex_init(&nsim_dev->port_functions.disable_mutex);
+ INIT_LIST_HEAD(&nsim_dev->port_functions.head);
+ ida_init(&nsim_dev->port_functions.ida);
+ ida_init(&nsim_dev->port_functions.pfnum_ida);
+}
+
+void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev)
+{
+ WARN_ON(!ida_is_empty(&nsim_dev->port_functions.pfnum_ida));
+ ida_destroy(&nsim_dev->port_functions.pfnum_ida);
+ WARN_ON(!ida_is_empty(&nsim_dev->port_functions.ida));
+ ida_destroy(&nsim_dev->port_functions.ida);
+ WARN_ON(!list_empty(&nsim_dev->port_functions.head));
+ mutex_destroy(&nsim_dev->port_functions.disable_mutex);
+}
+
+void nsim_dev_port_fn_enable(struct nsim_dev *nsim_dev)
+{
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ nsim_dev->port_functions.enabled = true;
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+}
+
+void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev)
+{
+ struct nsim_port_fn *port;
+ struct nsim_port_fn *tmp;
+
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ nsim_dev->port_functions.enabled = false;
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+
+ /* At this point, no new user commands can start and any ongoing
+ * commands have completed, so it is safe to delete all user created
+ * ports.
+ */
+ list_for_each_entry_safe_reverse(port, tmp,
+ &nsim_dev->port_functions.head, list) {
+ nsim_devlink_port_fn_del(nsim_dev, port);
+ nsim_devlink_port_fn_free(nsim_dev, port);
+ }
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-06 17:42 ` kernel test robot
2021-02-06 12:55 ` [PATCH net-next 3/7] netdevsim: Simulate get hardware address of a PCI port Parav Pandit
` (5 subsequent siblings)
7 siblings, 1 reply; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit, Jiri Pirko
Simulate PCI SF ports. Allow user to create one or more PCI SF ports.
Examples:
echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
Add PCI SF port where port index and sfnum are auto assigned by driver.
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
Show devlink ports:
$ devlink port show
netdevsim/netdevsim10/0: type eth netdev eth0 flavour physical port 1 splittable false
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
Create a PCI SF port whose port index and SF number are assigned by
the user.
$ devlink port add netdevsim/netdevsim10/66 flavour pcisf pfnum 2 sfnum 66
netdevsim/netdevsim10/66: type eth netdev eth3 flavour pcisf controller 0 pfnum 2 sfnum 66 splittable false
Delete PCI SF and PF ports:
$ devlink port del netdevsim/netdevsim10/66
$ devlink port del netdevsim/netdevsim10/2
$ devlink port del netdevsim/netdevsim10/1
Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
drivers/net/netdevsim/netdevsim.h | 1 +
drivers/net/netdevsim/port_function.c | 99 ++++++++++++++++++++++++++-
2 files changed, 97 insertions(+), 3 deletions(-)
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index 31beddede0f2..efa7c08d842a 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -233,6 +233,7 @@ struct nsim_dev {
struct list_head head;
struct ida ida;
struct ida pfnum_ida;
+ struct ida sfnum_ida;
struct mutex disable_mutex; /* protects port deletion
* by driver unload context
*/
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index a957b754ef92..a2f62a609e9b 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -9,9 +9,12 @@
struct nsim_port_fn {
struct devlink_port dl_port;
struct net_device *netdev;
+ struct nsim_port_fn *pf_pfn;
struct list_head list;
unsigned int port_index;
enum devlink_port_flavour flavour;
+ int refcount; /* Counts how many sf ports are bound attached to this pf port. */
+ u32 sfnum;
u16 pfnum;
};
@@ -91,9 +94,24 @@ nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
goto fn_ida_err;
port->pfnum = ret;
break;
+ case DEVLINK_PORT_FLAVOUR_PCI_SF:
+ if (attrs->sfnum_valid)
+ ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
+ attrs->sfnum, GFP_KERNEL);
+ else
+ ret = ida_alloc(&dev->port_functions.sfnum_ida, GFP_KERNEL);
+ if (ret < 0)
+ goto fn_ida_err;
+ port->sfnum = ret;
+ port->pfnum = attrs->pfnum;
+ break;
default:
break;
}
+ /* refcount_t is not needed as port is protected by port_functions.mutex.
+ * This count is to keep track of how many SF ports are attached a PF port.
+ */
+ port->refcount = 1;
return port;
fn_ida_err:
@@ -110,6 +128,9 @@ nsim_devlink_port_fn_free(struct nsim_dev *dev, struct nsim_port_fn *port)
case DEVLINK_PORT_FLAVOUR_PCI_PF:
ida_simple_remove(&dev->port_functions.pfnum_ida, port->pfnum);
break;
+ case DEVLINK_PORT_FLAVOUR_PCI_SF:
+ ida_simple_remove(&dev->port_functions.sfnum_ida, port->sfnum);
+ break;
default:
break;
}
@@ -139,6 +160,12 @@ nsim_dev_port_port_exists(struct nsim_dev *nsim_dev,
tmp->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
tmp->pfnum == attrs->pfnum)
return true;
+
+ if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
+ tmp->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
+ attrs->sfnum_valid &&
+ tmp->sfnum == attrs->sfnum && tmp->pfnum == attrs->pfnum)
+ return true;
}
return false;
}
@@ -153,20 +180,72 @@ nsim_dev_devlink_port_index_lookup(const struct nsim_dev *nsim_dev,
list_for_each_entry(port, &nsim_dev->port_functions.head, list) {
if (port->port_index != port_index)
continue;
+ if (port->refcount > 1) {
+ NL_SET_ERR_MSG_MOD(extack, "Port is in use");
+ return ERR_PTR(-EBUSY);
+ }
return port;
}
NL_SET_ERR_MSG_MOD(extack, "User created port not found");
return ERR_PTR(-ENOENT);
}
+static struct nsim_port_fn *
+pf_port_get(struct nsim_dev *nsim_dev, struct nsim_port_fn *port)
+{
+ struct nsim_port_fn *tmp;
+
+ /* PF port addition doesn't need a parent. */
+ if (port->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF)
+ return NULL;
+
+ list_for_each_entry(tmp, &nsim_dev->port_functions.head, list) {
+ if (tmp->flavour != DEVLINK_PORT_FLAVOUR_PCI_PF ||
+ tmp->pfnum != port->pfnum)
+ continue;
+
+ if (tmp->refcount + 1 == INT_MAX)
+ return ERR_PTR(-ENOSPC);
+
+ port->pf_pfn = tmp;
+ tmp->refcount++;
+ return tmp;
+ }
+ return ERR_PTR(-ENOENT);
+}
+
+static void pf_port_put(struct nsim_port_fn *port)
+{
+ if (port->pf_pfn) {
+ port->pf_pfn->refcount--;
+ WARN_ON(port->pf_pfn->refcount < 0);
+ }
+ port->refcount--;
+ WARN_ON(port->refcount != 0);
+}
+
static int nsim_devlink_port_fn_add(struct devlink *devlink,
struct nsim_dev *nsim_dev,
struct nsim_port_fn *port,
struct netlink_ext_ack *extack)
{
+ struct nsim_port_fn *pf_pfn;
int err;
- list_add(&port->list, &nsim_dev->port_functions.head);
+ /* Keep all PF ports at the start, so that when driver is unloaded
+ * All SF ports from the end of the list can be removed first.
+ */
+ if (port->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF)
+ list_add(&port->list, &nsim_dev->port_functions.head);
+ else
+ list_add_tail(&port->list, &nsim_dev->port_functions.head);
+
+ pf_pfn = pf_port_get(nsim_dev, port);
+ if (IS_ERR(pf_pfn)) {
+ NL_SET_ERR_MSG_MOD(extack, "Fail to get pf port");
+ err = PTR_ERR(pf_pfn);
+ goto pf_err;
+ }
err = devlink_port_register(devlink, &port->dl_port, port->port_index);
if (err)
@@ -183,6 +262,8 @@ static int nsim_devlink_port_fn_add(struct devlink *devlink,
devlink_port_type_clear(&port->dl_port);
devlink_port_unregister(&port->dl_port);
reg_err:
+ pf_port_put(port);
+pf_err:
list_del(&port->list);
return err;
}
@@ -194,13 +275,15 @@ static void nsim_devlink_port_fn_del(struct nsim_dev *nsim_dev,
unregister_netdev(port->netdev);
devlink_port_unregister(&port->dl_port);
list_del(&port->list);
+ pf_port_put(port);
}
static bool
nsim_dev_port_flavour_supported(const struct nsim_dev *nsim_dev,
const struct devlink_port_new_attrs *attrs)
{
- return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
+ return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF ||
+ attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF;
}
int nsim_dev_devlink_port_new(struct devlink *devlink,
@@ -245,7 +328,12 @@ int nsim_dev_devlink_port_new(struct devlink *devlink,
nsim_dev->switch_id.id_len);
port->dl_port.attrs.switch_id.id_len = nsim_dev->switch_id.id_len;
- devlink_port_attrs_pci_pf_set(&port->dl_port, 0, port->pfnum, false);
+ if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF)
+ devlink_port_attrs_pci_pf_set(&port->dl_port, 0,
+ port->pfnum, false);
+ else
+ devlink_port_attrs_pci_sf_set(&port->dl_port, 0, port->pfnum,
+ port->sfnum);
err = nsim_devlink_port_fn_add(devlink, nsim_dev, port, extack);
if (err)
@@ -300,10 +388,13 @@ void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev)
INIT_LIST_HEAD(&nsim_dev->port_functions.head);
ida_init(&nsim_dev->port_functions.ida);
ida_init(&nsim_dev->port_functions.pfnum_ida);
+ ida_init(&nsim_dev->port_functions.sfnum_ida);
}
void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev)
{
+ WARN_ON(!ida_is_empty(&nsim_dev->port_functions.sfnum_ida));
+ ida_destroy(&nsim_dev->port_functions.sfnum_ida);
WARN_ON(!ida_is_empty(&nsim_dev->port_functions.pfnum_ida));
ida_destroy(&nsim_dev->port_functions.pfnum_ida);
WARN_ON(!ida_is_empty(&nsim_dev->port_functions.ida));
@@ -332,6 +423,8 @@ void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev)
* commands have completed, so it is safe to delete all user created
* ports.
*/
+
+ /* Remove SF ports first, followed by PF ports. */
list_for_each_entry_safe_reverse(port, tmp,
&nsim_dev->port_functions.head, list) {
nsim_devlink_port_fn_del(nsim_dev, port);
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next 3/7] netdevsim: Simulate get hardware address of a PCI port
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 4/7] netdevsim: Simulate set " Parav Pandit
` (4 subsequent siblings)
7 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Allow users to get hardware address for the PCI port.
Below example creates one devlink port, queries a port and its hardware
address.
Example of a PCI SF port which supports a port function hw_addr set:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink ports:
$ devlink port show
netdevsim/netdevsim10/0: type eth netdev eth0 flavour physical port 1 splittable false
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:00:00:00:00:00"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 4 ++++
drivers/net/netdevsim/port_function.c | 30 +++++++++++++++++++++++++++
3 files changed, 35 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 806e387918fe..6046906d6b85 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -907,6 +907,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
.port_new = nsim_dev_devlink_port_new,
.port_del = nsim_dev_devlink_port_del,
+ .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index efa7c08d842a..e910c3cf480d 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -320,3 +320,7 @@ int nsim_dev_devlink_port_new(struct devlink *devlink,
unsigned int *new_port_index);
int nsim_dev_devlink_port_del(struct devlink *devlink, unsigned int port_index,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
+ struct devlink_port *port,
+ u8 *hw_addr, int *hw_addr_len,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index a2f62a609e9b..4031598e2076 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -16,6 +16,7 @@ struct nsim_port_fn {
int refcount; /* Counts how many sf ports are bound attached to this pf port. */
u32 sfnum;
u16 pfnum;
+ u8 hw_addr[ETH_ALEN];
};
static struct devlink_port *
@@ -431,3 +432,32 @@ void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev)
nsim_devlink_port_fn_free(nsim_dev, port);
}
}
+
+static struct nsim_port_fn *
+nsim_dev_to_port_fn(struct nsim_dev *nsim_dev, struct devlink_port *dl_port,
+ struct netlink_ext_ack *extack)
+{
+ if (nsim_dev_port_index_internal(nsim_dev, dl_port->index)) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Port index doesn't belong to user created port");
+ return ERR_PTR(-EOPNOTSUPP);
+ }
+ return container_of(dl_port, struct nsim_port_fn, dl_port);
+}
+
+int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ u8 *hw_addr, int *hw_addr_len,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+
+ memcpy(hw_addr, port->hw_addr, ETH_ALEN);
+ *hw_addr_len = ETH_ALEN;
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next 4/7] netdevsim: Simulate set hardware address of a PCI port
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
` (2 preceding siblings ...)
2021-02-06 12:55 ` [PATCH net-next 3/7] netdevsim: Simulate get hardware address of a PCI port Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 5/7] netdevsim: Simulate port function state for " Parav Pandit
` (3 subsequent siblings)
7 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Allow users to get/set hardware address for the PCI port.
Below example creates one devlink port, queries a port, sets a
hardware address.
Example of a PCI SF port which supports a port function hw_addr set:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Set the MAC address:
$ devlink port function set netdevsim/netdevsim10/2 hw_addr 00:11:22:33:44:55
Show devlink ports:
$ devlink port show
netdevsim/netdevsim10/0: type eth netdev eth0 flavour physical port 1 splittable false
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:11:22:33:44:55
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:11:22:33:44:55"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 4 ++++
drivers/net/netdevsim/port_function.c | 21 +++++++++++++++++++++
3 files changed, 26 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 6046906d6b85..ab15b5f7e955 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -908,6 +908,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.port_new = nsim_dev_devlink_port_new,
.port_del = nsim_dev_devlink_port_del,
.port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
+ .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index e910c3cf480d..aafe2027a112 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -324,3 +324,7 @@ int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
struct devlink_port *port,
u8 *hw_addr, int *hw_addr_len,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
+ struct devlink_port *port,
+ const u8 *hw_addr, int hw_addr_len,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index 4031598e2076..d47cdf44770a 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -461,3 +461,24 @@ int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
*hw_addr_len = ETH_ALEN;
return 0;
}
+
+int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ const u8 *hw_addr, int hw_addr_len,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ if (hw_addr_len != ETH_ALEN) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Hardware address must be 6 bytes long");
+ return -EOPNOTSUPP;
+ }
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+
+ memcpy(port->hw_addr, hw_addr, ETH_ALEN);
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next 5/7] netdevsim: Simulate port function state for a PCI port
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
` (3 preceding siblings ...)
2021-02-06 12:55 ` [PATCH net-next 4/7] netdevsim: Simulate set " Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-06 18:30 ` kernel test robot
2021-02-06 12:55 ` [PATCH net-next 6/7] netdevsim: Simulate port function set " Parav Pandit
` (2 subsequent siblings)
7 siblings, 1 reply; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Simulate port function state of a PCI port.
This enables users to get the state of the PCI port function.
Example of a PCI SF port which supports a port function hw_addr set:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink port:
$ devlink port show netdevsim/netdevsim10/2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:00:00:00:00:00",
"state": "inactive",
"opstate": "detached"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 5 +++++
drivers/net/netdevsim/port_function.c | 22 ++++++++++++++++++++++
3 files changed, 28 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index ab15b5f7e955..9f2164ea89cd 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -909,6 +909,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.port_del = nsim_dev_devlink_port_del,
.port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
.port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
+ .port_fn_state_get = nsim_dev_port_fn_state_get,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index aafe2027a112..c0544d93e1e8 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -328,3 +328,8 @@ int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
struct devlink_port *port,
const u8 *hw_addr, int hw_addr_len,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_state_get(struct devlink *devlink,
+ struct devlink_port *port,
+ enum devlink_port_fn_state *state,
+ enum devlink_port_fn_opstate *opstate,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index d47cdf44770a..10c692b8aea2 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -17,6 +17,7 @@ struct nsim_port_fn {
u32 sfnum;
u16 pfnum;
u8 hw_addr[ETH_ALEN];
+ u8 state; /* enum devlink_port_fn_state */
};
static struct devlink_port *
@@ -248,6 +249,7 @@ static int nsim_devlink_port_fn_add(struct devlink *devlink,
goto pf_err;
}
+ port->state = DEVLINK_PORT_FN_STATE_INACTIVE;
err = devlink_port_register(devlink, &port->dl_port, port->port_index);
if (err)
goto reg_err;
@@ -482,3 +484,23 @@ int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
memcpy(port->hw_addr, hw_addr, ETH_ALEN);
return 0;
}
+
+int nsim_dev_port_fn_state_get(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ enum devlink_port_fn_state *state,
+ enum devlink_port_fn_opstate *opstate,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+ *state = port->state;
+ if (port->state == DEVLINK_PORT_FN_STATE_INACTIVE)
+ *opstate = DEVLINK_PORT_FN_OPSTATE_DETACHED;
+ else
+ *opstate = DEVLINK_PORT_FN_OPSTATE_ATTACHED;
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next 6/7] netdevsim: Simulate port function set state for a PCI port
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
` (4 preceding siblings ...)
2021-02-06 12:55 ` [PATCH net-next 5/7] netdevsim: Simulate port function state for " Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
7 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Simulate port function state of a PCI port.
This enables users to get and set the state of the PCI port function.
Example of a PCI SF port which supports a port function:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink port:
$ devlink port show netdevsim/netdevsim10/2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Set the MAC address and activate the function:
$ devlink port function set netdevsim/netdevsim10/2 hw_addr 00:11:22:33:44:55 state active
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:11:22:33:44:55",
"state": "active",
"opstate": "attached"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 4 ++++
drivers/net/netdevsim/port_function.c | 15 +++++++++++++++
3 files changed, 20 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 9f2164ea89cd..e8b6bd22fb1f 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -910,6 +910,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
.port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
.port_fn_state_get = nsim_dev_port_fn_state_get,
+ .port_fn_state_set = nsim_dev_port_fn_state_set,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index c0544d93e1e8..93bfa3e946b2 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -333,3 +333,7 @@ int nsim_dev_port_fn_state_get(struct devlink *devlink,
enum devlink_port_fn_state *state,
enum devlink_port_fn_opstate *opstate,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_state_set(struct devlink *devlink,
+ struct devlink_port *port,
+ enum devlink_port_fn_state state,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index 10c692b8aea2..8e8e7d6df8a1 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -504,3 +504,18 @@ int nsim_dev_port_fn_state_get(struct devlink *devlink,
*opstate = DEVLINK_PORT_FN_OPSTATE_ATTACHED;
return 0;
}
+
+int nsim_dev_port_fn_state_set(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ enum devlink_port_fn_state state,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+ port->state = state;
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next 7/7] netdevsim: Add netdevsim port add test cases
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
` (5 preceding siblings ...)
2021-02-06 12:55 ` [PATCH net-next 6/7] netdevsim: Simulate port function set " Parav Pandit
@ 2021-02-06 12:55 ` Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
7 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-06 12:55 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Add tests for PCI PF and SF port add, configure and delete using user
specified port index and sfumber; and also using auto generated port
index.
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
.../drivers/net/netdevsim/devlink.sh | 72 ++++++++++++++++++-
1 file changed, 71 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index 40909c254365..ba349909a37e 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -5,7 +5,7 @@ lib_dir=$(dirname $0)/../../../net/forwarding
ALL_TESTS="fw_flash_test params_test regions_test reload_test \
netns_reload_test resource_test dev_info_test \
- empty_reporter_test dummy_reporter_test"
+ empty_reporter_test dummy_reporter_test devlink_port_add_test"
NUM_NETIFS=0
source $lib_dir/lib.sh
@@ -507,6 +507,76 @@ dummy_reporter_test()
log_test "dummy reporter test"
}
+function_state_get()
+{
+ local name=$1
+
+ cmd_jq "devlink port show $DL_HANDLE/$USR_SF_PORT_INDEX -j" \
+ " .[][].function.$1"
+}
+
+devlink_port_add_test()
+{
+ RET=0
+ USR_PF_PORT_INDEX=600
+ USR_PFNUM_A=2
+ USR_PFNUM_B=3
+ USR_SF_PORT_INDEX=601
+ USR_SFNUM_A=44
+ USR_SFNUM_B=55
+
+ devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_A
+ check_err $? "Failed PF port addition"
+
+ devlink port show
+ check_err $? "Failed PF port show"
+
+ devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A
+ check_err $? "Failed SF port addition"
+
+ devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A \
+ sfnum $USR_SFNUM_A
+ check_err $? "Failed SF port addition"
+
+ devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_B
+ check_err $? "Failed second PF port addition"
+
+ devlink port add $DL_HANDLE/$USR_SF_PORT_INDEX flavour pcisf \
+ pfnum $USR_PFNUM_B sfnum $USR_SFNUM_B
+ check_err $? "Failed SF port addition"
+
+ devlink port show
+ check_err $? "Failed PF port show"
+
+ state=$(function_state_get "state")
+ check_err $? "Failed to get function state"
+ [ "$state" == "inactive" ]
+ check_err $? "Unexpected function state $state"
+
+ state=$(function_state_get "opstate")
+ check_err $? "Failed to get operational state"
+ [ "$state" == "detached" ]
+ check_err $? "Unexpected function opstate $opstate"
+
+ devlink port function set $DL_HANDLE/$USR_SF_PORT_INDEX state active
+ check_err $? "Failed to set state"
+
+ state=$(function_state_get "state")
+ check_err $? "Failed to get function state"
+ [ "$state" == "active" ]
+ check_err $? "Unexpected function state $state"
+
+ state=$(function_state_get "opstate")
+ check_err $? "Failed to get operational state"
+ [ "$state" == "attached" ]
+ check_err $? "Unexpected function opstate $opstate"
+
+ devlink port del $DL_HANDLE/$USR_SF_PORT_INDEX
+ check_err $? "Failed SF port deletion"
+
+ log_test "port_add test"
+}
+
setup_prepare()
{
modprobe netdevsim
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
@ 2021-02-06 14:34 ` kernel test robot
2021-02-06 16:24 ` kernel test robot
2021-02-06 18:28 ` kernel test robot
2 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 14:34 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba; +Cc: kbuild-all, Parav Pandit
[-- Attachment #1: Type: text/plain, Size: 10180 bytes --]
Hi Parav,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
--
In file included from drivers/net/netdevsim/dev.c:36:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:908:3: error: 'const struct devlink_ops' has no member named 'port_new'
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~
drivers/net/netdevsim/dev.c:908:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, unsigned char *, int *, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *)' [-Werror=incompatible-pointer-types]
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:908:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_get')
drivers/net/netdevsim/dev.c:909:3: error: 'const struct devlink_ops' has no member named 'port_del'; did you mean 'port_split'?
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~
| port_split
drivers/net/netdevsim/dev.c:909:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, const unsigned char *, int, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, unsigned int, struct netlink_ext_ack *)' [-Werror=incompatible-pointer-types]
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:909:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_set')
cc1: some warnings being treated as errors
--
In file included from drivers/net/netdevsim/port_function.c:7:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c:51:20: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
51 | const struct devlink_port_new_attrs *attrs)
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_devlink_port_fn_alloc':
drivers/net/netdevsim/port_function.c:71:23: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
71 | port->flavour = attrs->flavour;
| ^~
drivers/net/netdevsim/port_function.c: At top level:
drivers/net/netdevsim/port_function.c:130:19: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
130 | const struct devlink_port_new_attrs *attrs)
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_port_port_exists':
drivers/net/netdevsim/port_function.c:135:12: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
135 | if (attrs->port_index_valid &&
| ^~
drivers/net/netdevsim/port_function.c: At top level:
drivers/net/netdevsim/port_function.c:201:18: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
201 | const struct devlink_port_new_attrs *attrs)
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_port_flavour_supported':
drivers/net/netdevsim/port_function.c:203:14: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
203 | return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
| ^~
drivers/net/netdevsim/port_function.c: At top level:
drivers/net/netdevsim/port_function.c:207:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
207 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c:206:5: error: conflicting types for 'nsim_dev_devlink_port_new'
206 | int nsim_dev_devlink_port_new(struct devlink *devlink,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:316:5: note: previous declaration of 'nsim_dev_devlink_port_new' was here
316 | int nsim_dev_devlink_port_new(struct devlink *devlink,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_devlink_port_new':
drivers/net/netdevsim/port_function.c:217:11: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
217 | if (attrs->port_index_valid &&
| ^~
drivers/net/netdevsim/port_function.c:223:49: error: passing argument 2 of 'nsim_dev_port_flavour_supported' from incompatible pointer type [-Werror=incompatible-pointer-types]
223 | if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
| ^~~~~
| |
| const struct devlink_port_new_attrs *
drivers/net/netdevsim/port_function.c:201:42: note: expected 'const struct devlink_port_new_attrs *' but argument is of type 'const struct devlink_port_new_attrs *'
201 | const struct devlink_port_new_attrs *attrs)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/net/netdevsim/port_function.c:232:42: error: passing argument 2 of 'nsim_dev_port_port_exists' from incompatible pointer type [-Werror=incompatible-pointer-types]
232 | if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
| ^~~~~
| |
| const struct devlink_port_new_attrs *
drivers/net/netdevsim/port_function.c:130:43: note: expected 'const struct devlink_port_new_attrs *' but argument is of type 'const struct devlink_port_new_attrs *'
130 | const struct devlink_port_new_attrs *attrs)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/net/netdevsim/port_function.c:238:46: error: passing argument 2 of 'nsim_devlink_port_fn_alloc' from incompatible pointer type [-Werror=incompatible-pointer-types]
238 | port = nsim_devlink_port_fn_alloc(nsim_dev, attrs);
| ^~~~~
| |
| const struct devlink_port_new_attrs *
drivers/net/netdevsim/port_function.c:51:44: note: expected 'const struct devlink_port_new_attrs *' but argument is of type 'const struct devlink_port_new_attrs *'
51 | const struct devlink_port_new_attrs *attrs)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_devlink_port_del':
drivers/net/netdevsim/port_function.c:269:6: warning: variable 'err' set but not used [-Wunused-but-set-variable]
269 | int err = 0;
| ^~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_port_flavour_supported':
drivers/net/netdevsim/port_function.c:204:1: error: control reaches end of non-void function [-Werror=return-type]
204 | }
| ^
cc1: some warnings being treated as errors
vim +317 drivers/net/netdevsim/netdevsim.h
311
312 void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev);
313 void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev);
314 void nsim_dev_port_fn_enable(struct nsim_dev *nsim_dev);
315 void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev);
316 int nsim_dev_devlink_port_new(struct devlink *devlink,
> 317 const struct devlink_port_new_attrs *attrs,
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 65022 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
@ 2021-02-06 14:34 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 14:34 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 10321 bytes --]
Hi Parav,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
--
In file included from drivers/net/netdevsim/dev.c:36:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:908:3: error: 'const struct devlink_ops' has no member named 'port_new'
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~
drivers/net/netdevsim/dev.c:908:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, unsigned char *, int *, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *)' [-Werror=incompatible-pointer-types]
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:908:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_get')
drivers/net/netdevsim/dev.c:909:3: error: 'const struct devlink_ops' has no member named 'port_del'; did you mean 'port_split'?
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~
| port_split
drivers/net/netdevsim/dev.c:909:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, const unsigned char *, int, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, unsigned int, struct netlink_ext_ack *)' [-Werror=incompatible-pointer-types]
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:909:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_set')
cc1: some warnings being treated as errors
--
In file included from drivers/net/netdevsim/port_function.c:7:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c:51:20: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
51 | const struct devlink_port_new_attrs *attrs)
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_devlink_port_fn_alloc':
drivers/net/netdevsim/port_function.c:71:23: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
71 | port->flavour = attrs->flavour;
| ^~
drivers/net/netdevsim/port_function.c: At top level:
drivers/net/netdevsim/port_function.c:130:19: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
130 | const struct devlink_port_new_attrs *attrs)
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_port_port_exists':
drivers/net/netdevsim/port_function.c:135:12: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
135 | if (attrs->port_index_valid &&
| ^~
drivers/net/netdevsim/port_function.c: At top level:
drivers/net/netdevsim/port_function.c:201:18: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
201 | const struct devlink_port_new_attrs *attrs)
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_port_flavour_supported':
drivers/net/netdevsim/port_function.c:203:14: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
203 | return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
| ^~
drivers/net/netdevsim/port_function.c: At top level:
drivers/net/netdevsim/port_function.c:207:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
207 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c:206:5: error: conflicting types for 'nsim_dev_devlink_port_new'
206 | int nsim_dev_devlink_port_new(struct devlink *devlink,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:316:5: note: previous declaration of 'nsim_dev_devlink_port_new' was here
316 | int nsim_dev_devlink_port_new(struct devlink *devlink,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_devlink_port_new':
drivers/net/netdevsim/port_function.c:217:11: error: dereferencing pointer to incomplete type 'const struct devlink_port_new_attrs'
217 | if (attrs->port_index_valid &&
| ^~
drivers/net/netdevsim/port_function.c:223:49: error: passing argument 2 of 'nsim_dev_port_flavour_supported' from incompatible pointer type [-Werror=incompatible-pointer-types]
223 | if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
| ^~~~~
| |
| const struct devlink_port_new_attrs *
drivers/net/netdevsim/port_function.c:201:42: note: expected 'const struct devlink_port_new_attrs *' but argument is of type 'const struct devlink_port_new_attrs *'
201 | const struct devlink_port_new_attrs *attrs)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/net/netdevsim/port_function.c:232:42: error: passing argument 2 of 'nsim_dev_port_port_exists' from incompatible pointer type [-Werror=incompatible-pointer-types]
232 | if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
| ^~~~~
| |
| const struct devlink_port_new_attrs *
drivers/net/netdevsim/port_function.c:130:43: note: expected 'const struct devlink_port_new_attrs *' but argument is of type 'const struct devlink_port_new_attrs *'
130 | const struct devlink_port_new_attrs *attrs)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/net/netdevsim/port_function.c:238:46: error: passing argument 2 of 'nsim_devlink_port_fn_alloc' from incompatible pointer type [-Werror=incompatible-pointer-types]
238 | port = nsim_devlink_port_fn_alloc(nsim_dev, attrs);
| ^~~~~
| |
| const struct devlink_port_new_attrs *
drivers/net/netdevsim/port_function.c:51:44: note: expected 'const struct devlink_port_new_attrs *' but argument is of type 'const struct devlink_port_new_attrs *'
51 | const struct devlink_port_new_attrs *attrs)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_devlink_port_del':
drivers/net/netdevsim/port_function.c:269:6: warning: variable 'err' set but not used [-Wunused-but-set-variable]
269 | int err = 0;
| ^~~
drivers/net/netdevsim/port_function.c: In function 'nsim_dev_port_flavour_supported':
drivers/net/netdevsim/port_function.c:204:1: error: control reaches end of non-void function [-Werror=return-type]
204 | }
| ^
cc1: some warnings being treated as errors
vim +317 drivers/net/netdevsim/netdevsim.h
311
312 void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev);
313 void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev);
314 void nsim_dev_port_fn_enable(struct nsim_dev *nsim_dev);
315 void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev);
316 int nsim_dev_devlink_port_new(struct devlink *devlink,
> 317 const struct devlink_port_new_attrs *attrs,
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 65022 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
@ 2021-02-06 16:24 ` kernel test robot
2021-02-06 16:24 ` kernel test robot
2021-02-06 18:28 ` kernel test robot
2 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 16:24 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba
Cc: kbuild-all, clang-built-linux, Parav Pandit
[-- Attachment #1: Type: text/plain, Size: 12080 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-randconfig-a004-20210206 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
1 warning generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
>> drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
1 warning and 2 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/port_function.c:51:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:71:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:73:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:75:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:130:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:135:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:136:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:138:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:140:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:201:18: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:203:14: error: incomplete definition of type 'struct devlink_port_new_attrs'
return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
~~~~~^
drivers/net/netdevsim/port_function.c:201:18: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:207:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:206:5: error: conflicting types for 'nsim_dev_devlink_port_new'
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/netdevsim.h:316:5: note: previous declaration is here
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/port_function.c:217:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:218:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index < nsim_bus_dev->port_count) {
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:223:49: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
^~~~~
drivers/net/netdevsim/port_function.c:201:42: note: passing argument to parameter 'attrs' here
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:232:42: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
vim +908 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
> 908 .port_new = nsim_dev_devlink_port_new,
> 909 .port_del = nsim_dev_devlink_port_del,
910 };
911
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 34224 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
@ 2021-02-06 16:24 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 16:24 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 12261 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-randconfig-a004-20210206 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
1 warning generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
>> drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
1 warning and 2 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/port_function.c:51:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:71:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:73:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:75:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:130:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:135:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:136:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:138:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:140:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:201:18: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:203:14: error: incomplete definition of type 'struct devlink_port_new_attrs'
return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
~~~~~^
drivers/net/netdevsim/port_function.c:201:18: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:207:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:206:5: error: conflicting types for 'nsim_dev_devlink_port_new'
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/netdevsim.h:316:5: note: previous declaration is here
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/port_function.c:217:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:218:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index < nsim_bus_dev->port_count) {
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:223:49: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
^~~~~
drivers/net/netdevsim/port_function.c:201:42: note: passing argument to parameter 'attrs' here
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:232:42: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
vim +908 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
> 908 .port_new = nsim_dev_devlink_port_new,
> 909 .port_del = nsim_dev_devlink_port_del,
910 };
911
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34224 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port
2021-02-06 12:55 ` [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
@ 2021-02-06 17:42 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 17:42 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba
Cc: kbuild-all, clang-built-linux, Parav Pandit, Jiri Pirko
[-- Attachment #1: Type: text/plain, Size: 13061 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-randconfig-a004-20210206 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/980b8cbe1c29602278397d53732cc258b1d62416
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 980b8cbe1c29602278397d53732cc258b1d62416
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:54:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:74:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:79:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:97:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:98:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:100:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:106:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:131:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:151:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:156:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:157:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:164:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:167:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->sfnum == attrs->sfnum && tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
3 warnings and 20 errors generated.
vim +/DEVLINK_PORT_FLAVOUR_PCI_SF +97 drivers/net/netdevsim/port_function.c
51
52 static struct nsim_port_fn *
53 nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
54 const struct devlink_port_new_attrs *attrs)
55 {
56 struct nsim_bus_dev *nsim_bus_dev = dev->nsim_bus_dev;
57 struct nsim_port_fn *port;
58 struct net_device *netdev;
59 int ret;
60
61 netdev = alloc_netdev(sizeof(*port), "eth%d", NET_NAME_UNKNOWN,
62 nsim_port_fn_ndev_setup);
63 if (!netdev)
64 return ERR_PTR(-ENOMEM);
65
66 dev_net_set(netdev, nsim_dev_net(dev));
67 netdev->netdev_ops = &nsim_netdev_ops;
68 nsim_bus_dev = dev->nsim_bus_dev;
69 SET_NETDEV_DEV(netdev, &nsim_bus_dev->dev);
70
71 port = netdev_priv(netdev);
72 memset(port, 0, sizeof(*port));
73 port->netdev = netdev;
74 port->flavour = attrs->flavour;
75
76 if (attrs->port_index_valid)
77 ret = ida_alloc_range(&dev->port_functions.ida,
78 attrs->port_index,
79 attrs->port_index, GFP_KERNEL);
80 else
81 ret = ida_alloc_min(&dev->port_functions.ida,
82 nsim_bus_dev->port_count, GFP_KERNEL);
83 if (ret < 0)
84 goto port_ida_err;
85
86 port->port_index = ret;
87
88 switch (port->flavour) {
89 case DEVLINK_PORT_FLAVOUR_PCI_PF:
90 ret = ida_alloc_range(&dev->port_functions.pfnum_ida,
91 attrs->pfnum, attrs->pfnum,
92 GFP_KERNEL);
93 if (ret < 0)
94 goto fn_ida_err;
95 port->pfnum = ret;
96 break;
> 97 case DEVLINK_PORT_FLAVOUR_PCI_SF:
98 if (attrs->sfnum_valid)
99 ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
100 attrs->sfnum, GFP_KERNEL);
101 else
102 ret = ida_alloc(&dev->port_functions.sfnum_ida, GFP_KERNEL);
103 if (ret < 0)
104 goto fn_ida_err;
105 port->sfnum = ret;
106 port->pfnum = attrs->pfnum;
107 break;
108 default:
109 break;
110 }
111 /* refcount_t is not needed as port is protected by port_functions.mutex.
112 * This count is to keep track of how many SF ports are attached a PF port.
113 */
114 port->refcount = 1;
115 return port;
116
117 fn_ida_err:
118 ida_simple_remove(&dev->port_functions.ida, port->port_index);
119 port_ida_err:
120 free_netdev(netdev);
121 return ERR_PTR(ret);
122 }
123
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 34224 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port
@ 2021-02-06 17:42 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 17:42 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 13291 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-randconfig-a004-20210206 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/980b8cbe1c29602278397d53732cc258b1d62416
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 980b8cbe1c29602278397d53732cc258b1d62416
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:54:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:74:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:79:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:97:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:98:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:100:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:106:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:131:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:151:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:156:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:157:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:164:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:167:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->sfnum == attrs->sfnum && tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
3 warnings and 20 errors generated.
vim +/DEVLINK_PORT_FLAVOUR_PCI_SF +97 drivers/net/netdevsim/port_function.c
51
52 static struct nsim_port_fn *
53 nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
54 const struct devlink_port_new_attrs *attrs)
55 {
56 struct nsim_bus_dev *nsim_bus_dev = dev->nsim_bus_dev;
57 struct nsim_port_fn *port;
58 struct net_device *netdev;
59 int ret;
60
61 netdev = alloc_netdev(sizeof(*port), "eth%d", NET_NAME_UNKNOWN,
62 nsim_port_fn_ndev_setup);
63 if (!netdev)
64 return ERR_PTR(-ENOMEM);
65
66 dev_net_set(netdev, nsim_dev_net(dev));
67 netdev->netdev_ops = &nsim_netdev_ops;
68 nsim_bus_dev = dev->nsim_bus_dev;
69 SET_NETDEV_DEV(netdev, &nsim_bus_dev->dev);
70
71 port = netdev_priv(netdev);
72 memset(port, 0, sizeof(*port));
73 port->netdev = netdev;
74 port->flavour = attrs->flavour;
75
76 if (attrs->port_index_valid)
77 ret = ida_alloc_range(&dev->port_functions.ida,
78 attrs->port_index,
79 attrs->port_index, GFP_KERNEL);
80 else
81 ret = ida_alloc_min(&dev->port_functions.ida,
82 nsim_bus_dev->port_count, GFP_KERNEL);
83 if (ret < 0)
84 goto port_ida_err;
85
86 port->port_index = ret;
87
88 switch (port->flavour) {
89 case DEVLINK_PORT_FLAVOUR_PCI_PF:
90 ret = ida_alloc_range(&dev->port_functions.pfnum_ida,
91 attrs->pfnum, attrs->pfnum,
92 GFP_KERNEL);
93 if (ret < 0)
94 goto fn_ida_err;
95 port->pfnum = ret;
96 break;
> 97 case DEVLINK_PORT_FLAVOUR_PCI_SF:
98 if (attrs->sfnum_valid)
99 ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
100 attrs->sfnum, GFP_KERNEL);
101 else
102 ret = ida_alloc(&dev->port_functions.sfnum_ida, GFP_KERNEL);
103 if (ret < 0)
104 goto fn_ida_err;
105 port->sfnum = ret;
106 port->pfnum = attrs->pfnum;
107 break;
108 default:
109 break;
110 }
111 /* refcount_t is not needed as port is protected by port_functions.mutex.
112 * This count is to keep track of how many SF ports are attached a PF port.
113 */
114 port->refcount = 1;
115 return port;
116
117 fn_ida_err:
118 ida_simple_remove(&dev->port_functions.ida, port->port_index);
119 port_ida_err:
120 free_netdev(netdev);
121 return ERR_PTR(ret);
122 }
123
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34224 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
@ 2021-02-06 18:28 ` kernel test robot
2021-02-06 16:24 ` kernel test robot
2021-02-06 18:28 ` kernel test robot
2 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 18:28 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba; +Cc: kbuild-all, Parav Pandit
[-- Attachment #1: Type: text/plain, Size: 4143 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/netdevsim/dev.c:36:
drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/netdevsim/dev.c:908:3: error: 'const struct devlink_ops' has no member named 'port_new'
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~
>> drivers/net/netdevsim/dev.c:908:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, unsigned char *, int *, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *)' [-Werror=incompatible-pointer-types]
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:908:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_get')
>> drivers/net/netdevsim/dev.c:909:3: error: 'const struct devlink_ops' has no member named 'port_del'; did you mean 'port_split'?
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~
| port_split
>> drivers/net/netdevsim/dev.c:909:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, const unsigned char *, int, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, unsigned int, struct netlink_ext_ack *)' [-Werror=incompatible-pointer-types]
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:909:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_set')
cc1: some warnings being treated as errors
vim +908 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
> 908 .port_new = nsim_dev_devlink_port_new,
> 909 .port_del = nsim_dev_devlink_port_del,
910 };
911
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 65022 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
@ 2021-02-06 18:28 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 18:28 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 4214 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 4234edd1adbb2da7f6f156c2bfdac5170eb97dbb
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/netdevsim/dev.c:36:
drivers/net/netdevsim/netdevsim.h:317:23: warning: 'struct devlink_port_new_attrs' declared inside parameter list will not be visible outside of this definition or declaration
317 | const struct devlink_port_new_attrs *attrs,
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/netdevsim/dev.c:908:3: error: 'const struct devlink_ops' has no member named 'port_new'
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~
>> drivers/net/netdevsim/dev.c:908:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, unsigned char *, int *, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, const struct devlink_port_new_attrs *, struct netlink_ext_ack *, unsigned int *)' [-Werror=incompatible-pointer-types]
908 | .port_new = nsim_dev_devlink_port_new,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:908:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_get')
>> drivers/net/netdevsim/dev.c:909:3: error: 'const struct devlink_ops' has no member named 'port_del'; did you mean 'port_split'?
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~
| port_split
>> drivers/net/netdevsim/dev.c:909:14: error: initialization of 'int (*)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *)' {aka 'int (*)(struct devlink *, struct devlink_port *, const unsigned char *, int, struct netlink_ext_ack *)'} from incompatible pointer type 'int (*)(struct devlink *, unsigned int, struct netlink_ext_ack *)' [-Werror=incompatible-pointer-types]
909 | .port_del = nsim_dev_devlink_port_del,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/netdevsim/dev.c:909:14: note: (near initialization for 'nsim_dev_devlink_ops.port_function_hw_addr_set')
cc1: some warnings being treated as errors
vim +908 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
> 908 .port_new = nsim_dev_devlink_port_new,
> 909 .port_del = nsim_dev_devlink_port_del,
910 };
911
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 65022 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 5/7] netdevsim: Simulate port function state for a PCI port
2021-02-06 12:55 ` [PATCH net-next 5/7] netdevsim: Simulate port function state for " Parav Pandit
@ 2021-02-06 18:30 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 18:30 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba
Cc: kbuild-all, clang-built-linux, Parav Pandit
[-- Attachment #1: Type: text/plain, Size: 13410 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-randconfig-a004-20210206 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/9949947ea5985420405ec8649676757144240a7a
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 9949947ea5985420405ec8649676757144240a7a
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
3 warnings generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
>> drivers/net/netdevsim/dev.c:912:3: error: field designator 'port_fn_state_get' does not refer to any field in type 'const struct devlink_ops'
.port_fn_state_get = nsim_dev_port_fn_state_get,
^
3 warnings and 3 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/port_function.c:56:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:80:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:81:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:100:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:101:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:102:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:108:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:133:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:153:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:158:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:163:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
vim +912 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
908 .port_new = nsim_dev_devlink_port_new,
909 .port_del = nsim_dev_devlink_port_del,
910 .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
911 .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
> 912 .port_fn_state_get = nsim_dev_port_fn_state_get,
913 };
914
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 34224 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 5/7] netdevsim: Simulate port function state for a PCI port
@ 2021-02-06 18:30 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-06 18:30 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 13609 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: x86_64-randconfig-a004-20210206 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/9949947ea5985420405ec8649676757144240a7a
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-port-add-delete-support/20210206-210153
git checkout 9949947ea5985420405ec8649676757144240a7a
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
3 warnings generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
>> drivers/net/netdevsim/dev.c:912:3: error: field designator 'port_fn_state_get' does not refer to any field in type 'const struct devlink_ops'
.port_fn_state_get = nsim_dev_port_fn_state_get,
^
3 warnings and 3 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/port_function.c:56:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:80:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:81:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:100:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:101:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:102:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:108:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:133:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:153:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:158:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:163:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
vim +912 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
908 .port_new = nsim_dev_devlink_port_new,
909 .port_del = nsim_dev_devlink_port_del,
910 .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
911 .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
> 912 .port_fn_state_get = nsim_dev_port_fn_state_get,
913 };
914
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34224 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* RE: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-06 14:34 ` kernel test robot
@ 2021-02-07 7:59 ` Parav Pandit
-1 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 7:59 UTC (permalink / raw)
To: kernel test robot, netdev, davem, kuba; +Cc: kbuild-all
> From: kernel test robot <lkp@intel.com>
> Sent: Saturday, February 6, 2021 8:05 PM
>
> Hi Parav,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on net-next/master]
>
> url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-
> port-add-delete-support/20210206-210153
> base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
> 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
This commit tag doesn't contain the devlink patches required upto commit 142d93d12dc1.
Can you please update the 0day-ci to move to at least commit 142d93d12dc1?
> drivers/net/netdevsim/port_function.c:269:6: warning: variable 'err' set
> but not used [-Wunused-but-set-variable]
> 269 | int err = 0;
> | ^~~
Sending v2 to fix this warning.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
@ 2021-02-07 7:59 ` Parav Pandit
0 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 7:59 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 838 bytes --]
> From: kernel test robot <lkp@intel.com>
> Sent: Saturday, February 6, 2021 8:05 PM
>
> Hi Parav,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on net-next/master]
>
> url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-
> port-add-delete-support/20210206-210153
> base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
> 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
This commit tag doesn't contain the devlink patches required upto commit 142d93d12dc1.
Can you please update the 0day-ci to move to at least commit 142d93d12dc1?
> drivers/net/netdevsim/port_function.c:269:6: warning: variable 'err' set
> but not used [-Wunused-but-set-variable]
> 269 | int err = 0;
> | ^~~
Sending v2 to fix this warning.
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [kbuild-all] Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-07 7:59 ` Parav Pandit
@ 2021-02-07 8:04 ` Rong Chen
-1 siblings, 0 replies; 38+ messages in thread
From: Rong Chen @ 2021-02-07 8:04 UTC (permalink / raw)
To: Parav Pandit, kernel test robot, netdev, davem, kuba; +Cc: kbuild-all
On 2/7/21 3:59 PM, Parav Pandit wrote:
>
>> From: kernel test robot <lkp@intel.com>
>> Sent: Saturday, February 6, 2021 8:05 PM
>>
>> Hi Parav,
>>
>> Thank you for the patch! Perhaps something to improve:
>>
>> [auto build test WARNING on net-next/master]
>>
>> url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-
>> port-add-delete-support/20210206-210153
>> base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
>> 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
> This commit tag doesn't contain the devlink patches required upto commit 142d93d12dc1.
> Can you please update the 0day-ci to move to at least commit 142d93d12dc1?
Thanks for the feedback, we'll take a look.
Best Regards,
Rong Chen
>
>> drivers/net/netdevsim/port_function.c:269:6: warning: variable 'err' set
>> but not used [-Wunused-but-set-variable]
>> 269 | int err = 0;
>> | ^~~
> Sending v2 to fix this warning.
> _______________________________________________
> kbuild-all mailing list -- kbuild-all@lists.01.org
> To unsubscribe send an email to kbuild-all-leave@lists.01.org
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port
@ 2021-02-07 8:04 ` Rong Chen
0 siblings, 0 replies; 38+ messages in thread
From: Rong Chen @ 2021-02-07 8:04 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 1157 bytes --]
On 2/7/21 3:59 PM, Parav Pandit wrote:
>
>> From: kernel test robot <lkp@intel.com>
>> Sent: Saturday, February 6, 2021 8:05 PM
>>
>> Hi Parav,
>>
>> Thank you for the patch! Perhaps something to improve:
>>
>> [auto build test WARNING on net-next/master]
>>
>> url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-
>> port-add-delete-support/20210206-210153
>> base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
>> 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
> This commit tag doesn't contain the devlink patches required upto commit 142d93d12dc1.
> Can you please update the 0day-ci to move to at least commit 142d93d12dc1?
Thanks for the feedback, we'll take a look.
Best Regards,
Rong Chen
>
>> drivers/net/netdevsim/port_function.c:269:6: warning: variable 'err' set
>> but not used [-Wunused-but-set-variable]
>> 269 | int err = 0;
>> | ^~~
> Sending v2 to fix this warning.
> _______________________________________________
> kbuild-all mailing list -- kbuild-all(a)lists.01.org
> To unsubscribe send an email to kbuild-all-leave(a)lists.01.org
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH net-next v2 0/7] netdevsim port add, delete support
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
` (6 preceding siblings ...)
2021-02-06 12:55 ` [PATCH net-next 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
` (6 more replies)
7 siblings, 7 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
This series simulates one or more PCI PF and SF port addition and function
configuration functionality.
Example sequence:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink port:
$ devlink port show netdevsim/netdevsim10/2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Set the MAC address and activate the function:
$ devlink port function set netdevsim/netdevsim10/2 hw_addr 00:11:22:33:44:55 state active
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:11:22:33:44:55",
"state": "active",
"opstate": "attached"
}
}
}
}
Delete PCI SF and PF ports:
$ devlink port del netdevsim/netdevsim10/2
Patch summary:
patch-1 adds support for adding/remove PCI PF port
patch-2 adds support for adding/remove PCI SF port
patch-3 simulates MAC address query
patch-4 simulates setting MAC address
patch-5 simulates state query
patch-6 simulates setting state
patch-7 adds tests
Parav Pandit (7):
netdevsim: Add support for add and delete of a PCI PF port
netdevsim: Add support for add and delete PCI SF port
netdevsim: Simulate get hardware address of a PCI port
netdevsim: Simulate set hardware address of a PCI port
netdevsim: Simulate port function state for a PCI port
netdevsim: Simulate port function set state for a PCI port
netdevsim: Add netdevsim port add test cases
drivers/net/netdevsim/Makefile | 2 +-
drivers/net/netdevsim/dev.c | 14 +
drivers/net/netdevsim/netdevsim.h | 38 ++
drivers/net/netdevsim/port_function.c | 521 ++++++++++++++++++
.../drivers/net/netdevsim/devlink.sh | 72 ++-
5 files changed, 645 insertions(+), 2 deletions(-)
create mode 100644 drivers/net/netdevsim/port_function.c
--
2.26.2
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 12:00 ` kernel test robot
2021-02-07 8:44 ` [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
` (5 subsequent siblings)
6 siblings, 1 reply; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Simulate PCI PF ports. Allow user to create one or more PCI PF ports.
Examples:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add devlink port of flavour 'pcipf' for PF number 2:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/4: type eth netdev eth4 flavour pcipf controller 0 pfnum 2 external false splittable false
Show the PCI PF port:
$ devlink port show netdevsim/netdevsim10/4
netdevsim/netdevsim10/4: type eth netdev eth4 flavour pcipf controller 0 pfnum 2 external false splittable false
Delete newly added devlink port:
$ devlink port del netdevsim/netdevsim10/4
issue: 2241444
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
changelog:
v1->v2:
- fixed warning for unused err value
---
drivers/net/netdevsim/Makefile | 2 +-
drivers/net/netdevsim/dev.c | 10 +
drivers/net/netdevsim/netdevsim.h | 20 ++
drivers/net/netdevsim/port_function.c | 340 ++++++++++++++++++++++++++
4 files changed, 371 insertions(+), 1 deletion(-)
create mode 100644 drivers/net/netdevsim/port_function.c
diff --git a/drivers/net/netdevsim/Makefile b/drivers/net/netdevsim/Makefile
index ade086eed955..be2aefafc498 100644
--- a/drivers/net/netdevsim/Makefile
+++ b/drivers/net/netdevsim/Makefile
@@ -3,7 +3,7 @@
obj-$(CONFIG_NETDEVSIM) += netdevsim.o
netdevsim-objs := \
- netdev.o dev.o ethtool.o fib.o bus.o health.o udp_tunnels.o
+ netdev.o dev.o ethtool.o fib.o bus.o health.o udp_tunnels.o port_function.o
ifeq ($(CONFIG_BPF_SYSCALL),y)
netdevsim-objs += \
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 816af1f55e2c..806e387918fe 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -905,6 +905,8 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.trap_group_set = nsim_dev_devlink_trap_group_set,
.trap_policer_set = nsim_dev_devlink_trap_policer_set,
.trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
+ .port_new = nsim_dev_devlink_port_new,
+ .port_del = nsim_dev_devlink_port_del,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
@@ -1039,6 +1041,8 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
nsim_dev->ddir,
nsim_dev,
&nsim_dev_take_snapshot_fops);
+
+ nsim_dev_port_fn_enable(nsim_dev);
return 0;
err_health_exit:
@@ -1073,6 +1077,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT;
nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT;
spin_lock_init(&nsim_dev->fa_cookie_lock);
+ nsim_dev_port_fn_init(nsim_dev);
dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev);
@@ -1120,6 +1125,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
if (err)
goto err_bpf_dev_exit;
+ nsim_dev_port_fn_enable(nsim_dev);
devlink_params_publish(devlink);
devlink_reload_enable(devlink);
return 0;
@@ -1154,6 +1160,9 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev)
if (devlink_is_reload_failed(devlink))
return;
+
+ /* Disable and destroy any user created devlink ports */
+ nsim_dev_port_fn_disable(nsim_dev);
debugfs_remove(nsim_dev->take_snapshot);
nsim_dev_port_del_all(nsim_dev);
nsim_dev_health_exit(nsim_dev);
@@ -1178,6 +1187,7 @@ void nsim_dev_remove(struct nsim_bus_dev *nsim_bus_dev)
ARRAY_SIZE(nsim_devlink_params));
devlink_unregister(devlink);
devlink_resources_unregister(devlink, NULL);
+ nsim_dev_port_fn_exit(nsim_dev);
devlink_free(devlink);
}
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index 48163c5f2ec9..31beddede0f2 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -229,6 +229,15 @@ struct nsim_dev {
bool static_iana_vxlan;
u32 sleep;
} udp_ports;
+ struct {
+ struct list_head head;
+ struct ida ida;
+ struct ida pfnum_ida;
+ struct mutex disable_mutex; /* protects port deletion
+ * by driver unload context
+ */
+ bool enabled;
+ } port_functions;
};
static inline struct net *nsim_dev_net(struct nsim_dev *nsim_dev)
@@ -299,3 +308,14 @@ struct nsim_bus_dev {
int nsim_bus_init(void);
void nsim_bus_exit(void);
+
+void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev);
+void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev);
+void nsim_dev_port_fn_enable(struct nsim_dev *nsim_dev);
+void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev);
+int nsim_dev_devlink_port_new(struct devlink *devlink,
+ const struct devlink_port_new_attrs *attrs,
+ struct netlink_ext_ack *extack,
+ unsigned int *new_port_index);
+int nsim_dev_devlink_port_del(struct devlink *devlink, unsigned int port_index,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
new file mode 100644
index 000000000000..7df1ca5ad7b8
--- /dev/null
+++ b/drivers/net/netdevsim/port_function.c
@@ -0,0 +1,340 @@
+// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
+/* Copyright (c) 2020 Mellanox Technologies Ltd. */
+
+#include <linux/etherdevice.h>
+#include <uapi/linux/devlink.h>
+
+#include "netdevsim.h"
+
+struct nsim_port_fn {
+ struct devlink_port dl_port;
+ struct net_device *netdev;
+ struct list_head list;
+ unsigned int port_index;
+ enum devlink_port_flavour flavour;
+ u16 pfnum;
+};
+
+static struct devlink_port *
+nsim_dev_port_fn_get_devlink_port(struct net_device *dev)
+{
+ struct nsim_port_fn *port = netdev_priv(dev);
+
+ return &port->dl_port;
+}
+
+static netdev_tx_t
+nsim_dev_port_fn_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ dev_kfree_skb(skb);
+ return NETDEV_TX_OK;
+}
+
+static const struct net_device_ops nsim_netdev_ops = {
+ .ndo_start_xmit = nsim_dev_port_fn_start_xmit,
+ .ndo_get_devlink_port = nsim_dev_port_fn_get_devlink_port,
+};
+
+static void nsim_port_fn_ndev_setup(struct net_device *dev)
+{
+ ether_setup(dev);
+ eth_hw_addr_random(dev);
+
+ dev->tx_queue_len = 0;
+ dev->flags |= IFF_NOARP;
+ dev->flags &= ~IFF_MULTICAST;
+ dev->max_mtu = ETH_MAX_MTU;
+}
+
+static struct nsim_port_fn *
+nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
+ const struct devlink_port_new_attrs *attrs)
+{
+ struct nsim_bus_dev *nsim_bus_dev = dev->nsim_bus_dev;
+ struct nsim_port_fn *port;
+ struct net_device *netdev;
+ int ret;
+
+ netdev = alloc_netdev(sizeof(*port), "eth%d", NET_NAME_UNKNOWN,
+ nsim_port_fn_ndev_setup);
+ if (!netdev)
+ return ERR_PTR(-ENOMEM);
+
+ dev_net_set(netdev, nsim_dev_net(dev));
+ netdev->netdev_ops = &nsim_netdev_ops;
+ nsim_bus_dev = dev->nsim_bus_dev;
+ SET_NETDEV_DEV(netdev, &nsim_bus_dev->dev);
+
+ port = netdev_priv(netdev);
+ memset(port, 0, sizeof(*port));
+ port->netdev = netdev;
+ port->flavour = attrs->flavour;
+
+ if (attrs->port_index_valid)
+ ret = ida_alloc_range(&dev->port_functions.ida,
+ attrs->port_index,
+ attrs->port_index, GFP_KERNEL);
+ else
+ ret = ida_alloc_min(&dev->port_functions.ida,
+ nsim_bus_dev->port_count, GFP_KERNEL);
+ if (ret < 0)
+ goto port_ida_err;
+
+ port->port_index = ret;
+
+ switch (port->flavour) {
+ case DEVLINK_PORT_FLAVOUR_PCI_PF:
+ ret = ida_alloc_range(&dev->port_functions.pfnum_ida,
+ attrs->pfnum, attrs->pfnum,
+ GFP_KERNEL);
+ if (ret < 0)
+ goto fn_ida_err;
+ port->pfnum = ret;
+ break;
+ default:
+ break;
+ }
+ return port;
+
+fn_ida_err:
+ ida_simple_remove(&dev->port_functions.ida, port->port_index);
+port_ida_err:
+ free_netdev(netdev);
+ return ERR_PTR(ret);
+}
+
+static void
+nsim_devlink_port_fn_free(struct nsim_dev *dev, struct nsim_port_fn *port)
+{
+ switch (port->flavour) {
+ case DEVLINK_PORT_FLAVOUR_PCI_PF:
+ ida_simple_remove(&dev->port_functions.pfnum_ida, port->pfnum);
+ break;
+ default:
+ break;
+ }
+ ida_simple_remove(&dev->port_functions.ida, port->port_index);
+ free_netdev(port->netdev);
+}
+
+static bool
+nsim_dev_port_index_internal(struct nsim_dev *nsim_dev, unsigned int port_index)
+{
+ struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev;
+
+ return (port_index < nsim_bus_dev->port_count) ? true : false;
+}
+
+static bool
+nsim_dev_port_port_exists(struct nsim_dev *nsim_dev,
+ const struct devlink_port_new_attrs *attrs)
+{
+ struct nsim_port_fn *tmp;
+
+ list_for_each_entry(tmp, &nsim_dev->port_functions.head, list) {
+ if (attrs->port_index_valid &&
+ tmp->port_index == attrs->port_index)
+ return true;
+ if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
+ tmp->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
+ tmp->pfnum == attrs->pfnum)
+ return true;
+ }
+ return false;
+}
+
+static struct nsim_port_fn *
+nsim_dev_devlink_port_index_lookup(const struct nsim_dev *nsim_dev,
+ unsigned int port_index,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_port_fn *port;
+
+ list_for_each_entry(port, &nsim_dev->port_functions.head, list) {
+ if (port->port_index != port_index)
+ continue;
+ return port;
+ }
+ NL_SET_ERR_MSG_MOD(extack, "User created port not found");
+ return ERR_PTR(-ENOENT);
+}
+
+static int nsim_devlink_port_fn_add(struct devlink *devlink,
+ struct nsim_dev *nsim_dev,
+ struct nsim_port_fn *port,
+ struct netlink_ext_ack *extack)
+{
+ int err;
+
+ list_add(&port->list, &nsim_dev->port_functions.head);
+
+ err = devlink_port_register(devlink, &port->dl_port, port->port_index);
+ if (err)
+ goto reg_err;
+
+ err = register_netdev(port->netdev);
+ if (err)
+ goto netdev_err;
+
+ devlink_port_type_eth_set(&port->dl_port, port->netdev);
+ return 0;
+
+netdev_err:
+ devlink_port_type_clear(&port->dl_port);
+ devlink_port_unregister(&port->dl_port);
+reg_err:
+ list_del(&port->list);
+ return err;
+}
+
+static void nsim_devlink_port_fn_del(struct nsim_dev *nsim_dev,
+ struct nsim_port_fn *port)
+{
+ devlink_port_type_clear(&port->dl_port);
+ unregister_netdev(port->netdev);
+ devlink_port_unregister(&port->dl_port);
+ list_del(&port->list);
+}
+
+static bool
+nsim_dev_port_flavour_supported(const struct nsim_dev *nsim_dev,
+ const struct devlink_port_new_attrs *attrs)
+{
+ return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
+}
+
+int nsim_dev_devlink_port_new(struct devlink *devlink,
+ const struct devlink_port_new_attrs *attrs,
+ struct netlink_ext_ack *extack,
+ unsigned int *new_port_index)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_bus_dev *nsim_bus_dev;
+ struct nsim_port_fn *port;
+ int err;
+
+ nsim_bus_dev = nsim_dev->nsim_bus_dev;
+ if (attrs->port_index_valid &&
+ attrs->port_index < nsim_bus_dev->port_count) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Port with given port index already exist");
+ return -EEXIST;
+ }
+ if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
+ NL_SET_ERR_MSG_MOD(extack, "Unsupported port flavour specified");
+ return -EOPNOTSUPP;
+ }
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ if (!nsim_dev->port_functions.enabled) {
+ err = -ENODEV;
+ goto alloc_err;
+ }
+ if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Port with given attributes already exists");
+ err = -EEXIST;
+ goto alloc_err;
+ }
+ port = nsim_devlink_port_fn_alloc(nsim_dev, attrs);
+ if (IS_ERR(port)) {
+ NL_SET_ERR_MSG_MOD(extack, "Fail to allocate port");
+ err = PTR_ERR(port);
+ goto alloc_err;
+ }
+ memcpy(port->dl_port.attrs.switch_id.id, nsim_dev->switch_id.id,
+ nsim_dev->switch_id.id_len);
+ port->dl_port.attrs.switch_id.id_len = nsim_dev->switch_id.id_len;
+
+ devlink_port_attrs_pci_pf_set(&port->dl_port, 0, port->pfnum, false);
+
+ err = nsim_devlink_port_fn_add(devlink, nsim_dev, port, extack);
+ if (err)
+ goto add_err;
+ *new_port_index = port->port_index;
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return 0;
+
+add_err:
+ nsim_devlink_port_fn_free(nsim_dev, port);
+alloc_err:
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return err;
+}
+
+int nsim_dev_devlink_port_del(struct devlink *devlink, unsigned int port_index,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+ int err;
+
+ if (nsim_dev_port_index_internal(nsim_dev, port_index)) {
+ NL_SET_ERR_MSG_MOD(extack, "Port index doesn't belong to user created port");
+ return -EINVAL;
+ }
+
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ if (!nsim_dev->port_functions.enabled) {
+ err = -ENODEV;
+ goto err;
+ }
+
+ port = nsim_dev_devlink_port_index_lookup(nsim_dev, port_index, extack);
+ if (IS_ERR(port)) {
+ err = PTR_ERR(port);
+ goto err;
+ }
+ nsim_devlink_port_fn_del(nsim_dev, port);
+ nsim_devlink_port_fn_free(nsim_dev, port);
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return 0;
+
+err:
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+ return err;
+}
+
+void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev)
+{
+ mutex_init(&nsim_dev->port_functions.disable_mutex);
+ INIT_LIST_HEAD(&nsim_dev->port_functions.head);
+ ida_init(&nsim_dev->port_functions.ida);
+ ida_init(&nsim_dev->port_functions.pfnum_ida);
+}
+
+void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev)
+{
+ WARN_ON(!ida_is_empty(&nsim_dev->port_functions.pfnum_ida));
+ ida_destroy(&nsim_dev->port_functions.pfnum_ida);
+ WARN_ON(!ida_is_empty(&nsim_dev->port_functions.ida));
+ ida_destroy(&nsim_dev->port_functions.ida);
+ WARN_ON(!list_empty(&nsim_dev->port_functions.head));
+ mutex_destroy(&nsim_dev->port_functions.disable_mutex);
+}
+
+void nsim_dev_port_fn_enable(struct nsim_dev *nsim_dev)
+{
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ nsim_dev->port_functions.enabled = true;
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+}
+
+void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev)
+{
+ struct nsim_port_fn *port;
+ struct nsim_port_fn *tmp;
+
+ mutex_lock(&nsim_dev->port_functions.disable_mutex);
+ nsim_dev->port_functions.enabled = false;
+ mutex_unlock(&nsim_dev->port_functions.disable_mutex);
+
+ /* At this point, no new user commands can start and any ongoing
+ * commands have completed, so it is safe to delete all user created
+ * ports.
+ */
+ list_for_each_entry_safe_reverse(port, tmp,
+ &nsim_dev->port_functions.head, list) {
+ nsim_devlink_port_fn_del(nsim_dev, port);
+ nsim_devlink_port_fn_free(nsim_dev, port);
+ }
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 12:28 ` kernel test robot
2021-02-07 8:44 ` [PATCH net-next v2 3/7] netdevsim: Simulate get hardware address of a PCI port Parav Pandit
` (4 subsequent siblings)
6 siblings, 1 reply; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit, Jiri Pirko
Simulate PCI SF ports. Allow user to create one or more PCI SF ports.
Examples:
echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
Add PCI SF port where port index and sfnum are auto assigned by driver.
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
Show devlink ports:
$ devlink port show
netdevsim/netdevsim10/0: type eth netdev eth0 flavour physical port 1 splittable false
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
Create a PCI SF port whose port index and SF number are assigned by
the user.
$ devlink port add netdevsim/netdevsim10/66 flavour pcisf pfnum 2 sfnum 66
netdevsim/netdevsim10/66: type eth netdev eth3 flavour pcisf controller 0 pfnum 2 sfnum 66 splittable false
Delete PCI SF and PF ports:
$ devlink port del netdevsim/netdevsim10/66
$ devlink port del netdevsim/netdevsim10/2
$ devlink port del netdevsim/netdevsim10/1
Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
drivers/net/netdevsim/netdevsim.h | 1 +
drivers/net/netdevsim/port_function.c | 99 ++++++++++++++++++++++++++-
2 files changed, 97 insertions(+), 3 deletions(-)
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index 31beddede0f2..efa7c08d842a 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -233,6 +233,7 @@ struct nsim_dev {
struct list_head head;
struct ida ida;
struct ida pfnum_ida;
+ struct ida sfnum_ida;
struct mutex disable_mutex; /* protects port deletion
* by driver unload context
*/
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index 7df1ca5ad7b8..86607d574930 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -9,9 +9,12 @@
struct nsim_port_fn {
struct devlink_port dl_port;
struct net_device *netdev;
+ struct nsim_port_fn *pf_pfn;
struct list_head list;
unsigned int port_index;
enum devlink_port_flavour flavour;
+ int refcount; /* Counts how many sf ports are bound attached to this pf port. */
+ u32 sfnum;
u16 pfnum;
};
@@ -91,9 +94,24 @@ nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
goto fn_ida_err;
port->pfnum = ret;
break;
+ case DEVLINK_PORT_FLAVOUR_PCI_SF:
+ if (attrs->sfnum_valid)
+ ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
+ attrs->sfnum, GFP_KERNEL);
+ else
+ ret = ida_alloc(&dev->port_functions.sfnum_ida, GFP_KERNEL);
+ if (ret < 0)
+ goto fn_ida_err;
+ port->sfnum = ret;
+ port->pfnum = attrs->pfnum;
+ break;
default:
break;
}
+ /* refcount_t is not needed as port is protected by port_functions.mutex.
+ * This count is to keep track of how many SF ports are attached a PF port.
+ */
+ port->refcount = 1;
return port;
fn_ida_err:
@@ -110,6 +128,9 @@ nsim_devlink_port_fn_free(struct nsim_dev *dev, struct nsim_port_fn *port)
case DEVLINK_PORT_FLAVOUR_PCI_PF:
ida_simple_remove(&dev->port_functions.pfnum_ida, port->pfnum);
break;
+ case DEVLINK_PORT_FLAVOUR_PCI_SF:
+ ida_simple_remove(&dev->port_functions.sfnum_ida, port->sfnum);
+ break;
default:
break;
}
@@ -139,6 +160,12 @@ nsim_dev_port_port_exists(struct nsim_dev *nsim_dev,
tmp->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
tmp->pfnum == attrs->pfnum)
return true;
+
+ if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
+ tmp->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
+ attrs->sfnum_valid &&
+ tmp->sfnum == attrs->sfnum && tmp->pfnum == attrs->pfnum)
+ return true;
}
return false;
}
@@ -153,20 +180,72 @@ nsim_dev_devlink_port_index_lookup(const struct nsim_dev *nsim_dev,
list_for_each_entry(port, &nsim_dev->port_functions.head, list) {
if (port->port_index != port_index)
continue;
+ if (port->refcount > 1) {
+ NL_SET_ERR_MSG_MOD(extack, "Port is in use");
+ return ERR_PTR(-EBUSY);
+ }
return port;
}
NL_SET_ERR_MSG_MOD(extack, "User created port not found");
return ERR_PTR(-ENOENT);
}
+static struct nsim_port_fn *
+pf_port_get(struct nsim_dev *nsim_dev, struct nsim_port_fn *port)
+{
+ struct nsim_port_fn *tmp;
+
+ /* PF port addition doesn't need a parent. */
+ if (port->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF)
+ return NULL;
+
+ list_for_each_entry(tmp, &nsim_dev->port_functions.head, list) {
+ if (tmp->flavour != DEVLINK_PORT_FLAVOUR_PCI_PF ||
+ tmp->pfnum != port->pfnum)
+ continue;
+
+ if (tmp->refcount + 1 == INT_MAX)
+ return ERR_PTR(-ENOSPC);
+
+ port->pf_pfn = tmp;
+ tmp->refcount++;
+ return tmp;
+ }
+ return ERR_PTR(-ENOENT);
+}
+
+static void pf_port_put(struct nsim_port_fn *port)
+{
+ if (port->pf_pfn) {
+ port->pf_pfn->refcount--;
+ WARN_ON(port->pf_pfn->refcount < 0);
+ }
+ port->refcount--;
+ WARN_ON(port->refcount != 0);
+}
+
static int nsim_devlink_port_fn_add(struct devlink *devlink,
struct nsim_dev *nsim_dev,
struct nsim_port_fn *port,
struct netlink_ext_ack *extack)
{
+ struct nsim_port_fn *pf_pfn;
int err;
- list_add(&port->list, &nsim_dev->port_functions.head);
+ /* Keep all PF ports at the start, so that when driver is unloaded
+ * All SF ports from the end of the list can be removed first.
+ */
+ if (port->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF)
+ list_add(&port->list, &nsim_dev->port_functions.head);
+ else
+ list_add_tail(&port->list, &nsim_dev->port_functions.head);
+
+ pf_pfn = pf_port_get(nsim_dev, port);
+ if (IS_ERR(pf_pfn)) {
+ NL_SET_ERR_MSG_MOD(extack, "Fail to get pf port");
+ err = PTR_ERR(pf_pfn);
+ goto pf_err;
+ }
err = devlink_port_register(devlink, &port->dl_port, port->port_index);
if (err)
@@ -183,6 +262,8 @@ static int nsim_devlink_port_fn_add(struct devlink *devlink,
devlink_port_type_clear(&port->dl_port);
devlink_port_unregister(&port->dl_port);
reg_err:
+ pf_port_put(port);
+pf_err:
list_del(&port->list);
return err;
}
@@ -194,13 +275,15 @@ static void nsim_devlink_port_fn_del(struct nsim_dev *nsim_dev,
unregister_netdev(port->netdev);
devlink_port_unregister(&port->dl_port);
list_del(&port->list);
+ pf_port_put(port);
}
static bool
nsim_dev_port_flavour_supported(const struct nsim_dev *nsim_dev,
const struct devlink_port_new_attrs *attrs)
{
- return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
+ return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF ||
+ attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF;
}
int nsim_dev_devlink_port_new(struct devlink *devlink,
@@ -245,7 +328,12 @@ int nsim_dev_devlink_port_new(struct devlink *devlink,
nsim_dev->switch_id.id_len);
port->dl_port.attrs.switch_id.id_len = nsim_dev->switch_id.id_len;
- devlink_port_attrs_pci_pf_set(&port->dl_port, 0, port->pfnum, false);
+ if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF)
+ devlink_port_attrs_pci_pf_set(&port->dl_port, 0,
+ port->pfnum, false);
+ else
+ devlink_port_attrs_pci_sf_set(&port->dl_port, 0, port->pfnum,
+ port->sfnum);
err = nsim_devlink_port_fn_add(devlink, nsim_dev, port, extack);
if (err)
@@ -300,10 +388,13 @@ void nsim_dev_port_fn_init(struct nsim_dev *nsim_dev)
INIT_LIST_HEAD(&nsim_dev->port_functions.head);
ida_init(&nsim_dev->port_functions.ida);
ida_init(&nsim_dev->port_functions.pfnum_ida);
+ ida_init(&nsim_dev->port_functions.sfnum_ida);
}
void nsim_dev_port_fn_exit(struct nsim_dev *nsim_dev)
{
+ WARN_ON(!ida_is_empty(&nsim_dev->port_functions.sfnum_ida));
+ ida_destroy(&nsim_dev->port_functions.sfnum_ida);
WARN_ON(!ida_is_empty(&nsim_dev->port_functions.pfnum_ida));
ida_destroy(&nsim_dev->port_functions.pfnum_ida);
WARN_ON(!ida_is_empty(&nsim_dev->port_functions.ida));
@@ -332,6 +423,8 @@ void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev)
* commands have completed, so it is safe to delete all user created
* ports.
*/
+
+ /* Remove SF ports first, followed by PF ports. */
list_for_each_entry_safe_reverse(port, tmp,
&nsim_dev->port_functions.head, list) {
nsim_devlink_port_fn_del(nsim_dev, port);
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next v2 3/7] netdevsim: Simulate get hardware address of a PCI port
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 4/7] netdevsim: Simulate set " Parav Pandit
` (3 subsequent siblings)
6 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Allow users to get hardware address for the PCI port.
Below example creates one devlink port, queries a port and its hardware
address.
Example of a PCI SF port which supports a port function hw_addr set:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink ports:
$ devlink port show
netdevsim/netdevsim10/0: type eth netdev eth0 flavour physical port 1 splittable false
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:00:00:00:00:00"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 4 ++++
drivers/net/netdevsim/port_function.c | 30 +++++++++++++++++++++++++++
3 files changed, 35 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 806e387918fe..6046906d6b85 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -907,6 +907,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
.port_new = nsim_dev_devlink_port_new,
.port_del = nsim_dev_devlink_port_del,
+ .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index efa7c08d842a..e910c3cf480d 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -320,3 +320,7 @@ int nsim_dev_devlink_port_new(struct devlink *devlink,
unsigned int *new_port_index);
int nsim_dev_devlink_port_del(struct devlink *devlink, unsigned int port_index,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
+ struct devlink_port *port,
+ u8 *hw_addr, int *hw_addr_len,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index 86607d574930..882d1bdbfcf5 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -16,6 +16,7 @@ struct nsim_port_fn {
int refcount; /* Counts how many sf ports are bound attached to this pf port. */
u32 sfnum;
u16 pfnum;
+ u8 hw_addr[ETH_ALEN];
};
static struct devlink_port *
@@ -431,3 +432,32 @@ void nsim_dev_port_fn_disable(struct nsim_dev *nsim_dev)
nsim_devlink_port_fn_free(nsim_dev, port);
}
}
+
+static struct nsim_port_fn *
+nsim_dev_to_port_fn(struct nsim_dev *nsim_dev, struct devlink_port *dl_port,
+ struct netlink_ext_ack *extack)
+{
+ if (nsim_dev_port_index_internal(nsim_dev, dl_port->index)) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Port index doesn't belong to user created port");
+ return ERR_PTR(-EOPNOTSUPP);
+ }
+ return container_of(dl_port, struct nsim_port_fn, dl_port);
+}
+
+int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ u8 *hw_addr, int *hw_addr_len,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+
+ memcpy(hw_addr, port->hw_addr, ETH_ALEN);
+ *hw_addr_len = ETH_ALEN;
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next v2 4/7] netdevsim: Simulate set hardware address of a PCI port
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
` (2 preceding siblings ...)
2021-02-07 8:44 ` [PATCH net-next v2 3/7] netdevsim: Simulate get hardware address of a PCI port Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 5/7] netdevsim: Simulate port function state for " Parav Pandit
` (2 subsequent siblings)
6 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Allow users to get/set hardware address for the PCI port.
Below example creates one devlink port, queries a port, sets a
hardware address.
Example of a PCI SF port which supports a port function hw_addr set:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Set the MAC address:
$ devlink port function set netdevsim/netdevsim10/2 hw_addr 00:11:22:33:44:55
Show devlink ports:
$ devlink port show
netdevsim/netdevsim10/0: type eth netdev eth0 flavour physical port 1 splittable false
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:11:22:33:44:55
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:11:22:33:44:55"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 4 ++++
drivers/net/netdevsim/port_function.c | 21 +++++++++++++++++++++
3 files changed, 26 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 6046906d6b85..ab15b5f7e955 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -908,6 +908,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.port_new = nsim_dev_devlink_port_new,
.port_del = nsim_dev_devlink_port_del,
.port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
+ .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index e910c3cf480d..aafe2027a112 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -324,3 +324,7 @@ int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
struct devlink_port *port,
u8 *hw_addr, int *hw_addr_len,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
+ struct devlink_port *port,
+ const u8 *hw_addr, int hw_addr_len,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index 882d1bdbfcf5..5d6c5a732546 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -461,3 +461,24 @@ int nsim_dev_port_fn_hw_addr_get(struct devlink *devlink,
*hw_addr_len = ETH_ALEN;
return 0;
}
+
+int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ const u8 *hw_addr, int hw_addr_len,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ if (hw_addr_len != ETH_ALEN) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Hardware address must be 6 bytes long");
+ return -EOPNOTSUPP;
+ }
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+
+ memcpy(port->hw_addr, hw_addr, ETH_ALEN);
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next v2 5/7] netdevsim: Simulate port function state for a PCI port
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
` (3 preceding siblings ...)
2021-02-07 8:44 ` [PATCH net-next v2 4/7] netdevsim: Simulate set " Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 13:09 ` kernel test robot
2021-02-07 8:44 ` [PATCH net-next v2 6/7] netdevsim: Simulate port function set " Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
6 siblings, 1 reply; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Simulate port function state of a PCI port.
This enables users to get the state of the PCI port function.
Example of a PCI SF port which supports a port function hw_addr set:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink port:
$ devlink port show netdevsim/netdevsim10/2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:00:00:00:00:00",
"state": "inactive",
"opstate": "detached"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 5 +++++
drivers/net/netdevsim/port_function.c | 22 ++++++++++++++++++++++
3 files changed, 28 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index ab15b5f7e955..9f2164ea89cd 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -909,6 +909,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.port_del = nsim_dev_devlink_port_del,
.port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
.port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
+ .port_fn_state_get = nsim_dev_port_fn_state_get,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index aafe2027a112..c0544d93e1e8 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -328,3 +328,8 @@ int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
struct devlink_port *port,
const u8 *hw_addr, int hw_addr_len,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_state_get(struct devlink *devlink,
+ struct devlink_port *port,
+ enum devlink_port_fn_state *state,
+ enum devlink_port_fn_opstate *opstate,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index 5d6c5a732546..a25c449e4559 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -17,6 +17,7 @@ struct nsim_port_fn {
u32 sfnum;
u16 pfnum;
u8 hw_addr[ETH_ALEN];
+ u8 state; /* enum devlink_port_fn_state */
};
static struct devlink_port *
@@ -248,6 +249,7 @@ static int nsim_devlink_port_fn_add(struct devlink *devlink,
goto pf_err;
}
+ port->state = DEVLINK_PORT_FN_STATE_INACTIVE;
err = devlink_port_register(devlink, &port->dl_port, port->port_index);
if (err)
goto reg_err;
@@ -482,3 +484,23 @@ int nsim_dev_port_fn_hw_addr_set(struct devlink *devlink,
memcpy(port->hw_addr, hw_addr, ETH_ALEN);
return 0;
}
+
+int nsim_dev_port_fn_state_get(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ enum devlink_port_fn_state *state,
+ enum devlink_port_fn_opstate *opstate,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+ *state = port->state;
+ if (port->state == DEVLINK_PORT_FN_STATE_INACTIVE)
+ *opstate = DEVLINK_PORT_FN_OPSTATE_DETACHED;
+ else
+ *opstate = DEVLINK_PORT_FN_OPSTATE_ATTACHED;
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next v2 6/7] netdevsim: Simulate port function set state for a PCI port
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
` (4 preceding siblings ...)
2021-02-07 8:44 ` [PATCH net-next v2 5/7] netdevsim: Simulate port function state for " Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
6 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Simulate port function state of a PCI port.
This enables users to get and set the state of the PCI port function.
Example of a PCI SF port which supports a port function:
Create a device with ID=10 and one physical port.
$ echo "10 1" > /sys/bus/netdevsim/new_device
Add PCI PF port:
$ devlink port add netdevsim/netdevsim10 flavour pcipf pfnum 2
netdevsim/netdevsim10/1: type eth netdev eth1 flavour pcipf controller 0 pfnum 2 external false splittable false
function:
hw_addr 00:00:00:00:00:00
$ devlink port add netdevsim/netdevsim10 flavour pcisf pfnum 2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00
Show devlink port:
$ devlink port show netdevsim/netdevsim10/2
netdevsim/netdevsim10/2: type eth netdev eth2 flavour pcisf controller 0 pfnum 2 sfnum 0 splittable false
function:
hw_addr 00:00:00:00:00:00 state inactive opstate detached
Set the MAC address and activate the function:
$ devlink port function set netdevsim/netdevsim10/2 hw_addr 00:11:22:33:44:55 state active
Show the port and function attributes in JSON format:
$ devlink port show netdevsim/netdevsim10/2 -jp
{
"port": {
"netdevsim/netdevsim10/2": {
"type": "eth",
"netdev": "eth2",
"flavour": "pcisf",
"controller": 0,
"pfnum": 2,
"sfnum": 0,
"splittable": false,
"function": {
"hw_addr": "00:11:22:33:44:55",
"state": "active",
"opstate": "attached"
}
}
}
}
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
drivers/net/netdevsim/dev.c | 1 +
drivers/net/netdevsim/netdevsim.h | 4 ++++
drivers/net/netdevsim/port_function.c | 15 +++++++++++++++
3 files changed, 20 insertions(+)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index 9f2164ea89cd..e8b6bd22fb1f 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -910,6 +910,7 @@ static const struct devlink_ops nsim_dev_devlink_ops = {
.port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
.port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
.port_fn_state_get = nsim_dev_port_fn_state_get,
+ .port_fn_state_set = nsim_dev_port_fn_state_set,
};
#define NSIM_DEV_MAX_MACS_DEFAULT 32
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index c0544d93e1e8..93bfa3e946b2 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -333,3 +333,7 @@ int nsim_dev_port_fn_state_get(struct devlink *devlink,
enum devlink_port_fn_state *state,
enum devlink_port_fn_opstate *opstate,
struct netlink_ext_ack *extack);
+int nsim_dev_port_fn_state_set(struct devlink *devlink,
+ struct devlink_port *port,
+ enum devlink_port_fn_state state,
+ struct netlink_ext_ack *extack);
diff --git a/drivers/net/netdevsim/port_function.c b/drivers/net/netdevsim/port_function.c
index a25c449e4559..5be66ffa8d77 100644
--- a/drivers/net/netdevsim/port_function.c
+++ b/drivers/net/netdevsim/port_function.c
@@ -504,3 +504,18 @@ int nsim_dev_port_fn_state_get(struct devlink *devlink,
*opstate = DEVLINK_PORT_FN_OPSTATE_ATTACHED;
return 0;
}
+
+int nsim_dev_port_fn_state_set(struct devlink *devlink,
+ struct devlink_port *dl_port,
+ enum devlink_port_fn_state state,
+ struct netlink_ext_ack *extack)
+{
+ struct nsim_dev *nsim_dev = devlink_priv(devlink);
+ struct nsim_port_fn *port;
+
+ port = nsim_dev_to_port_fn(nsim_dev, dl_port, extack);
+ if (IS_ERR(port))
+ return PTR_ERR(port);
+ port->state = state;
+ return 0;
+}
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
` (5 preceding siblings ...)
2021-02-07 8:44 ` [PATCH net-next v2 6/7] netdevsim: Simulate port function set " Parav Pandit
@ 2021-02-07 8:44 ` Parav Pandit
2021-02-08 21:21 ` Jakub Kicinski
6 siblings, 1 reply; 38+ messages in thread
From: Parav Pandit @ 2021-02-07 8:44 UTC (permalink / raw)
To: netdev, davem, kuba; +Cc: Parav Pandit
Add tests for PCI PF and SF port add, configure and delete.
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
.../drivers/net/netdevsim/devlink.sh | 72 ++++++++++++++++++-
1 file changed, 71 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index 40909c254365..ba349909a37e 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -5,7 +5,7 @@ lib_dir=$(dirname $0)/../../../net/forwarding
ALL_TESTS="fw_flash_test params_test regions_test reload_test \
netns_reload_test resource_test dev_info_test \
- empty_reporter_test dummy_reporter_test"
+ empty_reporter_test dummy_reporter_test devlink_port_add_test"
NUM_NETIFS=0
source $lib_dir/lib.sh
@@ -507,6 +507,76 @@ dummy_reporter_test()
log_test "dummy reporter test"
}
+function_state_get()
+{
+ local name=$1
+
+ cmd_jq "devlink port show $DL_HANDLE/$USR_SF_PORT_INDEX -j" \
+ " .[][].function.$1"
+}
+
+devlink_port_add_test()
+{
+ RET=0
+ USR_PF_PORT_INDEX=600
+ USR_PFNUM_A=2
+ USR_PFNUM_B=3
+ USR_SF_PORT_INDEX=601
+ USR_SFNUM_A=44
+ USR_SFNUM_B=55
+
+ devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_A
+ check_err $? "Failed PF port addition"
+
+ devlink port show
+ check_err $? "Failed PF port show"
+
+ devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A
+ check_err $? "Failed SF port addition"
+
+ devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A \
+ sfnum $USR_SFNUM_A
+ check_err $? "Failed SF port addition"
+
+ devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_B
+ check_err $? "Failed second PF port addition"
+
+ devlink port add $DL_HANDLE/$USR_SF_PORT_INDEX flavour pcisf \
+ pfnum $USR_PFNUM_B sfnum $USR_SFNUM_B
+ check_err $? "Failed SF port addition"
+
+ devlink port show
+ check_err $? "Failed PF port show"
+
+ state=$(function_state_get "state")
+ check_err $? "Failed to get function state"
+ [ "$state" == "inactive" ]
+ check_err $? "Unexpected function state $state"
+
+ state=$(function_state_get "opstate")
+ check_err $? "Failed to get operational state"
+ [ "$state" == "detached" ]
+ check_err $? "Unexpected function opstate $opstate"
+
+ devlink port function set $DL_HANDLE/$USR_SF_PORT_INDEX state active
+ check_err $? "Failed to set state"
+
+ state=$(function_state_get "state")
+ check_err $? "Failed to get function state"
+ [ "$state" == "active" ]
+ check_err $? "Unexpected function state $state"
+
+ state=$(function_state_get "opstate")
+ check_err $? "Failed to get operational state"
+ [ "$state" == "attached" ]
+ check_err $? "Unexpected function opstate $opstate"
+
+ devlink port del $DL_HANDLE/$USR_SF_PORT_INDEX
+ check_err $? "Failed SF port deletion"
+
+ log_test "port_add test"
+}
+
setup_prepare()
{
modprobe netdevsim
--
2.26.2
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port
2021-02-07 8:44 ` [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
@ 2021-02-07 12:00 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-07 12:00 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba
Cc: kbuild-all, clang-built-linux, Parav Pandit
[-- Attachment #1: Type: text/plain, Size: 12120 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: arm-randconfig-r004-20210207 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/27c3dd62beaaa376fb7a81543a712ca99e315b81
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
git checkout 27c3dd62beaaa376fb7a81543a712ca99e315b81
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
1 warning generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
>> drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
1 warning and 2 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/port_function.c:51:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:71:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:73:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:75:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:130:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:135:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:136:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:138:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:140:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:201:18: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:203:14: error: incomplete definition of type 'struct devlink_port_new_attrs'
return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
~~~~~^
drivers/net/netdevsim/port_function.c:201:18: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:207:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:206:5: error: conflicting types for 'nsim_dev_devlink_port_new'
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/netdevsim.h:316:5: note: previous declaration is here
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/port_function.c:217:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:218:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index < nsim_bus_dev->port_count) {
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:223:49: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
^~~~~
drivers/net/netdevsim/port_function.c:201:42: note: passing argument to parameter 'attrs' here
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:232:42: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
vim +908 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
> 908 .port_new = nsim_dev_devlink_port_new,
> 909 .port_del = nsim_dev_devlink_port_del,
910 };
911
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 40071 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port
@ 2021-02-07 12:00 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-07 12:00 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 12301 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: arm-randconfig-r004-20210207 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/27c3dd62beaaa376fb7a81543a712ca99e315b81
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
git checkout 27c3dd62beaaa376fb7a81543a712ca99e315b81
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
1 warning generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
>> drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
1 warning and 2 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
>> drivers/net/netdevsim/netdevsim.h:317:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/port_function.c:51:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:71:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:73:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:75:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:88:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:51:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:130:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:135:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:136:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:138:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:140:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:130:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:201:18: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:203:14: error: incomplete definition of type 'struct devlink_port_new_attrs'
return attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF;
~~~~~^
drivers/net/netdevsim/port_function.c:201:18: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:207:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:206:5: error: conflicting types for 'nsim_dev_devlink_port_new'
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/netdevsim.h:316:5: note: previous declaration is here
int nsim_dev_devlink_port_new(struct devlink *devlink,
^
drivers/net/netdevsim/port_function.c:217:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:218:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index < nsim_bus_dev->port_count) {
~~~~~^
drivers/net/netdevsim/port_function.c:207:23: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:223:49: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (!nsim_dev_port_flavour_supported(nsim_dev, attrs)) {
^~~~~
drivers/net/netdevsim/port_function.c:201:42: note: passing argument to parameter 'attrs' here
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:232:42: error: incompatible pointer types passing 'const struct devlink_port_new_attrs *' to parameter of type 'const struct devlink_port_new_attrs *' [-Werror,-Wincompatible-pointer-types]
if (nsim_dev_port_port_exists(nsim_dev, attrs)) {
vim +908 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
> 908 .port_new = nsim_dev_devlink_port_new,
> 909 .port_del = nsim_dev_devlink_port_del,
910 };
911
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 40071 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port
2021-02-07 8:44 ` [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
@ 2021-02-07 12:28 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-07 12:28 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba
Cc: kbuild-all, clang-built-linux, Parav Pandit, Jiri Pirko
[-- Attachment #1: Type: text/plain, Size: 13101 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: arm-randconfig-r004-20210207 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/9cd1b543da8076288ba231ed010e8a610e238bae
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
git checkout 9cd1b543da8076288ba231ed010e8a610e238bae
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:54:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:74:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:79:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:97:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:98:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:100:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:106:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:131:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:151:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:156:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:157:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:164:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:167:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->sfnum == attrs->sfnum && tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
3 warnings and 20 errors generated.
vim +/DEVLINK_PORT_FLAVOUR_PCI_SF +97 drivers/net/netdevsim/port_function.c
51
52 static struct nsim_port_fn *
53 nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
54 const struct devlink_port_new_attrs *attrs)
55 {
56 struct nsim_bus_dev *nsim_bus_dev = dev->nsim_bus_dev;
57 struct nsim_port_fn *port;
58 struct net_device *netdev;
59 int ret;
60
61 netdev = alloc_netdev(sizeof(*port), "eth%d", NET_NAME_UNKNOWN,
62 nsim_port_fn_ndev_setup);
63 if (!netdev)
64 return ERR_PTR(-ENOMEM);
65
66 dev_net_set(netdev, nsim_dev_net(dev));
67 netdev->netdev_ops = &nsim_netdev_ops;
68 nsim_bus_dev = dev->nsim_bus_dev;
69 SET_NETDEV_DEV(netdev, &nsim_bus_dev->dev);
70
71 port = netdev_priv(netdev);
72 memset(port, 0, sizeof(*port));
73 port->netdev = netdev;
74 port->flavour = attrs->flavour;
75
76 if (attrs->port_index_valid)
77 ret = ida_alloc_range(&dev->port_functions.ida,
78 attrs->port_index,
79 attrs->port_index, GFP_KERNEL);
80 else
81 ret = ida_alloc_min(&dev->port_functions.ida,
82 nsim_bus_dev->port_count, GFP_KERNEL);
83 if (ret < 0)
84 goto port_ida_err;
85
86 port->port_index = ret;
87
88 switch (port->flavour) {
89 case DEVLINK_PORT_FLAVOUR_PCI_PF:
90 ret = ida_alloc_range(&dev->port_functions.pfnum_ida,
91 attrs->pfnum, attrs->pfnum,
92 GFP_KERNEL);
93 if (ret < 0)
94 goto fn_ida_err;
95 port->pfnum = ret;
96 break;
> 97 case DEVLINK_PORT_FLAVOUR_PCI_SF:
98 if (attrs->sfnum_valid)
99 ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
100 attrs->sfnum, GFP_KERNEL);
101 else
102 ret = ida_alloc(&dev->port_functions.sfnum_ida, GFP_KERNEL);
103 if (ret < 0)
104 goto fn_ida_err;
105 port->sfnum = ret;
106 port->pfnum = attrs->pfnum;
107 break;
108 default:
109 break;
110 }
111 /* refcount_t is not needed as port is protected by port_functions.mutex.
112 * This count is to keep track of how many SF ports are attached a PF port.
113 */
114 port->refcount = 1;
115 return port;
116
117 fn_ida_err:
118 ida_simple_remove(&dev->port_functions.ida, port->port_index);
119 port_ida_err:
120 free_netdev(netdev);
121 return ERR_PTR(ret);
122 }
123
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 40071 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port
@ 2021-02-07 12:28 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-07 12:28 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 13331 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: arm-randconfig-r004-20210207 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/9cd1b543da8076288ba231ed010e8a610e238bae
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
git checkout 9cd1b543da8076288ba231ed010e8a610e238bae
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
drivers/net/netdevsim/port_function.c:54:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:74:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:79:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:91:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
>> drivers/net/netdevsim/port_function.c:97:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:98:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:100:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:106:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:54:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:131:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:151:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:156:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:157:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:164:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:167:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->sfnum == attrs->sfnum && tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:151:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
3 warnings and 20 errors generated.
vim +/DEVLINK_PORT_FLAVOUR_PCI_SF +97 drivers/net/netdevsim/port_function.c
51
52 static struct nsim_port_fn *
53 nsim_devlink_port_fn_alloc(struct nsim_dev *dev,
54 const struct devlink_port_new_attrs *attrs)
55 {
56 struct nsim_bus_dev *nsim_bus_dev = dev->nsim_bus_dev;
57 struct nsim_port_fn *port;
58 struct net_device *netdev;
59 int ret;
60
61 netdev = alloc_netdev(sizeof(*port), "eth%d", NET_NAME_UNKNOWN,
62 nsim_port_fn_ndev_setup);
63 if (!netdev)
64 return ERR_PTR(-ENOMEM);
65
66 dev_net_set(netdev, nsim_dev_net(dev));
67 netdev->netdev_ops = &nsim_netdev_ops;
68 nsim_bus_dev = dev->nsim_bus_dev;
69 SET_NETDEV_DEV(netdev, &nsim_bus_dev->dev);
70
71 port = netdev_priv(netdev);
72 memset(port, 0, sizeof(*port));
73 port->netdev = netdev;
74 port->flavour = attrs->flavour;
75
76 if (attrs->port_index_valid)
77 ret = ida_alloc_range(&dev->port_functions.ida,
78 attrs->port_index,
79 attrs->port_index, GFP_KERNEL);
80 else
81 ret = ida_alloc_min(&dev->port_functions.ida,
82 nsim_bus_dev->port_count, GFP_KERNEL);
83 if (ret < 0)
84 goto port_ida_err;
85
86 port->port_index = ret;
87
88 switch (port->flavour) {
89 case DEVLINK_PORT_FLAVOUR_PCI_PF:
90 ret = ida_alloc_range(&dev->port_functions.pfnum_ida,
91 attrs->pfnum, attrs->pfnum,
92 GFP_KERNEL);
93 if (ret < 0)
94 goto fn_ida_err;
95 port->pfnum = ret;
96 break;
> 97 case DEVLINK_PORT_FLAVOUR_PCI_SF:
98 if (attrs->sfnum_valid)
99 ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
100 attrs->sfnum, GFP_KERNEL);
101 else
102 ret = ida_alloc(&dev->port_functions.sfnum_ida, GFP_KERNEL);
103 if (ret < 0)
104 goto fn_ida_err;
105 port->sfnum = ret;
106 port->pfnum = attrs->pfnum;
107 break;
108 default:
109 break;
110 }
111 /* refcount_t is not needed as port is protected by port_functions.mutex.
112 * This count is to keep track of how many SF ports are attached a PF port.
113 */
114 port->refcount = 1;
115 return port;
116
117 fn_ida_err:
118 ida_simple_remove(&dev->port_functions.ida, port->port_index);
119 port_ida_err:
120 free_netdev(netdev);
121 return ERR_PTR(ret);
122 }
123
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 40071 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 5/7] netdevsim: Simulate port function state for a PCI port
2021-02-07 8:44 ` [PATCH net-next v2 5/7] netdevsim: Simulate port function state for " Parav Pandit
@ 2021-02-07 13:09 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-07 13:09 UTC (permalink / raw)
To: Parav Pandit, netdev, davem, kuba
Cc: kbuild-all, clang-built-linux, Parav Pandit
[-- Attachment #1: Type: text/plain, Size: 13450 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: arm-randconfig-r004-20210207 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/25b30524cf47ad832c961d885836cc7e98c1f2bd
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
git checkout 25b30524cf47ad832c961d885836cc7e98c1f2bd
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
3 warnings generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
>> drivers/net/netdevsim/dev.c:912:3: error: field designator 'port_fn_state_get' does not refer to any field in type 'const struct devlink_ops'
.port_fn_state_get = nsim_dev_port_fn_state_get,
^
3 warnings and 3 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/port_function.c:56:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:80:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:81:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:100:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:101:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:102:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:108:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:133:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:153:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:158:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:163:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
vim +912 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
908 .port_new = nsim_dev_devlink_port_new,
909 .port_del = nsim_dev_devlink_port_del,
910 .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
911 .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
> 912 .port_fn_state_get = nsim_dev_port_fn_state_get,
913 };
914
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 40071 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 5/7] netdevsim: Simulate port function state for a PCI port
@ 2021-02-07 13:09 ` kernel test robot
0 siblings, 0 replies; 38+ messages in thread
From: kernel test robot @ 2021-02-07 13:09 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 13649 bytes --]
Hi Parav,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 6626a0266566c5aea16178c5e6cd7fc4db3f2f56
config: arm-randconfig-r004-20210207 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/25b30524cf47ad832c961d885836cc7e98c1f2bd
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Parav-Pandit/netdevsim-Add-support-for-add-and-delete-of-a-PCI-PF-port/20210207-174501
git checkout 25b30524cf47ad832c961d885836cc7e98c1f2bd
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/net/netdevsim/netdev.c:27:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
3 warnings generated.
--
In file included from drivers/net/netdevsim/dev.c:36:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/dev.c:908:3: error: field designator 'port_new' does not refer to any field in type 'const struct devlink_ops'
.port_new = nsim_dev_devlink_port_new,
^
drivers/net/netdevsim/dev.c:909:3: error: field designator 'port_del' does not refer to any field in type 'const struct devlink_ops'
.port_del = nsim_dev_devlink_port_del,
^
>> drivers/net/netdevsim/dev.c:912:3: error: field designator 'port_fn_state_get' does not refer to any field in type 'const struct devlink_ops'
.port_fn_state_get = nsim_dev_port_fn_state_get,
^
3 warnings and 3 errors generated.
--
In file included from drivers/net/netdevsim/port_function.c:7:
drivers/net/netdevsim/netdevsim.h:318:23: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs,
^
>> drivers/net/netdevsim/netdevsim.h:333:16: warning: declaration of 'enum devlink_port_fn_state' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_state *state,
^
>> drivers/net/netdevsim/netdevsim.h:334:16: warning: declaration of 'enum devlink_port_fn_opstate' will not be visible outside of this function [-Wvisibility]
enum devlink_port_fn_opstate *opstate,
^
drivers/net/netdevsim/port_function.c:56:20: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:76:23: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->flavour = attrs->flavour;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:78:11: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:80:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:81:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->port_index, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:16: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:93:30: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->pfnum, attrs->pfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:99:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:100:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->sfnum_valid)
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:101:63: error: incomplete definition of type 'struct devlink_port_new_attrs'
ret = ida_alloc_range(&dev->port_functions.sfnum_ida, attrs->sfnum,
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:102:17: error: incomplete definition of type 'struct devlink_port_new_attrs'
attrs->sfnum, GFP_KERNEL);
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:108:22: error: incomplete definition of type 'struct devlink_port_new_attrs'
port->pfnum = attrs->pfnum;
~~~~~^
drivers/net/netdevsim/port_function.c:56:20: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:133:7: error: use of undeclared identifier 'DEVLINK_PORT_FLAVOUR_PCI_SF'
case DEVLINK_PORT_FLAVOUR_PCI_SF:
^
drivers/net/netdevsim/port_function.c:153:19: warning: declaration of 'struct devlink_port_new_attrs' will not be visible outside of this function [-Wvisibility]
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:158:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->port_index_valid &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:159:31: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->port_index == attrs->port_index)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:161:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_PF &&
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:163:26: error: incomplete definition of type 'struct devlink_port_new_attrs'
tmp->pfnum == attrs->pfnum)
~~~~~^
drivers/net/netdevsim/port_function.c:153:19: note: forward declaration of 'struct devlink_port_new_attrs'
const struct devlink_port_new_attrs *attrs)
^
drivers/net/netdevsim/port_function.c:166:12: error: incomplete definition of type 'struct devlink_port_new_attrs'
if (attrs->flavour == DEVLINK_PORT_FLAVOUR_PCI_SF &&
vim +912 drivers/net/netdevsim/dev.c
894
895 static const struct devlink_ops nsim_dev_devlink_ops = {
896 .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_COMPONENT |
897 DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
898 .reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
899 .reload_down = nsim_dev_reload_down,
900 .reload_up = nsim_dev_reload_up,
901 .info_get = nsim_dev_info_get,
902 .flash_update = nsim_dev_flash_update,
903 .trap_init = nsim_dev_devlink_trap_init,
904 .trap_action_set = nsim_dev_devlink_trap_action_set,
905 .trap_group_set = nsim_dev_devlink_trap_group_set,
906 .trap_policer_set = nsim_dev_devlink_trap_policer_set,
907 .trap_policer_counter_get = nsim_dev_devlink_trap_policer_counter_get,
908 .port_new = nsim_dev_devlink_port_new,
909 .port_del = nsim_dev_devlink_port_del,
910 .port_function_hw_addr_get = nsim_dev_port_fn_hw_addr_get,
911 .port_function_hw_addr_set = nsim_dev_port_fn_hw_addr_set,
> 912 .port_fn_state_get = nsim_dev_port_fn_state_get,
913 };
914
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 40071 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases
2021-02-07 8:44 ` [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
@ 2021-02-08 21:21 ` Jakub Kicinski
2021-02-09 3:59 ` Parav Pandit
0 siblings, 1 reply; 38+ messages in thread
From: Jakub Kicinski @ 2021-02-08 21:21 UTC (permalink / raw)
To: Parav Pandit; +Cc: netdev, davem
On Sun, 7 Feb 2021 10:44:12 +0200 Parav Pandit wrote:
> + RET=0
> + USR_PF_PORT_INDEX=600
> + USR_PFNUM_A=2
> + USR_PFNUM_B=3
> + USR_SF_PORT_INDEX=601
> + USR_SFNUM_A=44
> + USR_SFNUM_B=55
> +
> + devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_A
> + check_err $? "Failed PF port addition"
> +
> + devlink port show
> + check_err $? "Failed PF port show"
> +
> + devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A
> + check_err $? "Failed SF port addition"
> +
> + devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A \
> + sfnum $USR_SFNUM_A
> + check_err $? "Failed SF port addition"
> +
> + devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_B
> + check_err $? "Failed second PF port addition"
> +
> + devlink port add $DL_HANDLE/$USR_SF_PORT_INDEX flavour pcisf \
> + pfnum $USR_PFNUM_B sfnum $USR_SFNUM_B
> + check_err $? "Failed SF port addition"
> +
> + devlink port show
> + check_err $? "Failed PF port show"
> +
> + state=$(function_state_get "state")
> + check_err $? "Failed to get function state"
> + [ "$state" == "inactive" ]
> + check_err $? "Unexpected function state $state"
> +
> + state=$(function_state_get "opstate")
> + check_err $? "Failed to get operational state"
> + [ "$state" == "detached" ]
> + check_err $? "Unexpected function opstate $opstate"
> +
> + devlink port function set $DL_HANDLE/$USR_SF_PORT_INDEX state active
> + check_err $? "Failed to set state"
> +
> + state=$(function_state_get "state")
> + check_err $? "Failed to get function state"
> + [ "$state" == "active" ]
> + check_err $? "Unexpected function state $state"
> +
> + state=$(function_state_get "opstate")
> + check_err $? "Failed to get operational state"
> + [ "$state" == "attached" ]
> + check_err $? "Unexpected function opstate $opstate"
> +
> + devlink port del $DL_HANDLE/$USR_SF_PORT_INDEX
> + check_err $? "Failed SF port deletion"
> +
> + log_test "port_add test"
I don't think this very basic test is worth the 600 LoC of netdevsim
code.
If you come up with something better please don't post v3 it in reply
to previous threads.
^ permalink raw reply [flat|nested] 38+ messages in thread
* RE: [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases
2021-02-08 21:21 ` Jakub Kicinski
@ 2021-02-09 3:59 ` Parav Pandit
0 siblings, 0 replies; 38+ messages in thread
From: Parav Pandit @ 2021-02-09 3:59 UTC (permalink / raw)
To: Jakub Kicinski; +Cc: netdev, davem
> From: Jakub Kicinski <kuba@kernel.org>
> Sent: Tuesday, February 9, 2021 2:51 AM
>
> On Sun, 7 Feb 2021 10:44:12 +0200 Parav Pandit wrote:
> > + RET=0
> > + USR_PF_PORT_INDEX=600
> > + USR_PFNUM_A=2
> > + USR_PFNUM_B=3
> > + USR_SF_PORT_INDEX=601
> > + USR_SFNUM_A=44
> > + USR_SFNUM_B=55
> > +
> > + devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_A
> > + check_err $? "Failed PF port addition"
> > +
> > + devlink port show
> > + check_err $? "Failed PF port show"
> > +
> > + devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A
> > + check_err $? "Failed SF port addition"
> > +
> > + devlink port add $DL_HANDLE flavour pcisf pfnum $USR_PFNUM_A \
> > + sfnum $USR_SFNUM_A
> > + check_err $? "Failed SF port addition"
> > +
> > + devlink port add $DL_HANDLE flavour pcipf pfnum $USR_PFNUM_B
> > + check_err $? "Failed second PF port addition"
> > +
> > + devlink port add $DL_HANDLE/$USR_SF_PORT_INDEX flavour pcisf \
> > + pfnum $USR_PFNUM_B sfnum $USR_SFNUM_B
> > + check_err $? "Failed SF port addition"
> > +
> > + devlink port show
> > + check_err $? "Failed PF port show"
> > +
> > + state=$(function_state_get "state")
> > + check_err $? "Failed to get function state"
> > + [ "$state" == "inactive" ]
> > + check_err $? "Unexpected function state $state"
> > +
> > + state=$(function_state_get "opstate")
> > + check_err $? "Failed to get operational state"
> > + [ "$state" == "detached" ]
> > + check_err $? "Unexpected function opstate $opstate"
> > +
> > + devlink port function set $DL_HANDLE/$USR_SF_PORT_INDEX state
> active
> > + check_err $? "Failed to set state"
> > +
> > + state=$(function_state_get "state")
> > + check_err $? "Failed to get function state"
> > + [ "$state" == "active" ]
> > + check_err $? "Unexpected function state $state"
> > +
> > + state=$(function_state_get "opstate")
> > + check_err $? "Failed to get operational state"
> > + [ "$state" == "attached" ]
> > + check_err $? "Unexpected function opstate $opstate"
> > +
> > + devlink port del $DL_HANDLE/$USR_SF_PORT_INDEX
> > + check_err $? "Failed SF port deletion"
> > +
> > + log_test "port_add test"
>
> I don't think this very basic test is worth the 600 LoC of netdevsim code.
>
Do you mean I should improve the test to do more code coverage for 600 LoC?
> If you come up with something better please don't post v3 it in reply to
> previous threads.
Can you please explain? If only test case improves, wouldn't it be v3 for the last patch?
I must be missing something here.
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2021-02-09 4:06 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-06 12:55 [PATCH net-next 0/7] netdevsim port add, delete support Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
2021-02-06 14:34 ` kernel test robot
2021-02-06 14:34 ` kernel test robot
2021-02-07 7:59 ` Parav Pandit
2021-02-07 7:59 ` Parav Pandit
2021-02-07 8:04 ` [kbuild-all] " Rong Chen
2021-02-07 8:04 ` Rong Chen
2021-02-06 16:24 ` kernel test robot
2021-02-06 16:24 ` kernel test robot
2021-02-06 18:28 ` kernel test robot
2021-02-06 18:28 ` kernel test robot
2021-02-06 12:55 ` [PATCH net-next 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
2021-02-06 17:42 ` kernel test robot
2021-02-06 17:42 ` kernel test robot
2021-02-06 12:55 ` [PATCH net-next 3/7] netdevsim: Simulate get hardware address of a PCI port Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 4/7] netdevsim: Simulate set " Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 5/7] netdevsim: Simulate port function state for " Parav Pandit
2021-02-06 18:30 ` kernel test robot
2021-02-06 18:30 ` kernel test robot
2021-02-06 12:55 ` [PATCH net-next 6/7] netdevsim: Simulate port function set " Parav Pandit
2021-02-06 12:55 ` [PATCH net-next 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 0/7] netdevsim port add, delete support Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 1/7] netdevsim: Add support for add and delete of a PCI PF port Parav Pandit
2021-02-07 12:00 ` kernel test robot
2021-02-07 12:00 ` kernel test robot
2021-02-07 8:44 ` [PATCH net-next v2 2/7] netdevsim: Add support for add and delete PCI SF port Parav Pandit
2021-02-07 12:28 ` kernel test robot
2021-02-07 12:28 ` kernel test robot
2021-02-07 8:44 ` [PATCH net-next v2 3/7] netdevsim: Simulate get hardware address of a PCI port Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 4/7] netdevsim: Simulate set " Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 5/7] netdevsim: Simulate port function state for " Parav Pandit
2021-02-07 13:09 ` kernel test robot
2021-02-07 13:09 ` kernel test robot
2021-02-07 8:44 ` [PATCH net-next v2 6/7] netdevsim: Simulate port function set " Parav Pandit
2021-02-07 8:44 ` [PATCH net-next v2 7/7] netdevsim: Add netdevsim port add test cases Parav Pandit
2021-02-08 21:21 ` Jakub Kicinski
2021-02-09 3:59 ` Parav Pandit
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.