diff options
author | Daniel Ding <danieldin95@163.com> | 2023-05-08 09:59:01 +0800 |
---|---|---|
committer | Dave Wallace <dwallacelf@gmail.com> | 2023-05-19 19:53:08 +0000 |
commit | fc70a664567021491ba62dec8b232d357e8d9494 (patch) | |
tree | 61f9aac363a0ce84835cefdf67a7d743bc6373b3 /src/plugins/dpdk | |
parent | bc4d5b0aceddc81af52afc46ce8e646749888c71 (diff) |
dpdk: fix format device name using wrong index
When I setup vpp by netvsc driver, occurs the following crash:
(format_dpdk_device_name) assertion `(i) < vec_len (dm->devices)' fails
vnet[100166]: #6 0x00007f434d651f6a _clib_error + 0x2da
vnet[100166]: #7 0x00007f430b4bef64 format_dpdk_device_name + 0xf4
vnet[100166]: #8 0x00007f434d6555f3 do_percent + 0xee3
vnet[100166]: #9 0x00007f434d654359 va_format + 0xb9
vnet[100166]: #10 0x00007f434d7ac16e vlib_log + 0x3ce
vnet[100166]: #11 0x00007f430b49ebe3 dpdk_device_start + 0x193
vnet[100166]: #12 0x00007f430b4aa233 dpdk_interface_admin_up_down + 0x163
vnet[100166]: #13 0x00007f434d988fc8 vnet_sw_interface_set_flags_helper + 0x378
vnet[100166]: #14 0x00007f434d989338 vnet_sw_interface_set_flags + 0x48
This patch fix it by device_index as a index for devices vec, and not
dpdk port_id.
Type: fix
Change-Id: I84c46616d06117c9ae3b2c7d0473050f1b8ded5f
Signed-off-by: Daniel Ding <danieldin95@163.com>
Diffstat (limited to 'src/plugins/dpdk')
-rw-r--r-- | src/plugins/dpdk/device/common.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/plugins/dpdk/device/common.c b/src/plugins/dpdk/device/common.c index e4a79e88286..0833f18700c 100644 --- a/src/plugins/dpdk/device/common.c +++ b/src/plugins/dpdk/device/common.c @@ -47,8 +47,8 @@ static struct void dpdk_device_error (dpdk_device_t * xd, char *str, int rv) { - dpdk_log_err ("Interface %U error %d: %s", - format_dpdk_device_name, xd->port_id, rv, rte_strerror (rv)); + dpdk_log_err ("Interface %U error %d: %s", format_dpdk_device_name, + xd->device_index, rv, rte_strerror (rv)); xd->errors = clib_error_return (xd->errors, "%s[port:%d, errno:%d]: %s", str, xd->port_id, rv, rte_strerror (rv)); } @@ -331,7 +331,7 @@ dpdk_setup_interrupts (dpdk_device_t *xd) if (rte_eth_dev_rx_intr_enable (xd->port_id, 0)) { dpdk_log_info ("probe for interrupt mode for device %U. Failed.\n", - format_dpdk_device_name, xd->port_id); + format_dpdk_device_name, xd->device_index); } else { @@ -339,7 +339,7 @@ dpdk_setup_interrupts (dpdk_device_t *xd) if (!(xd->flags & DPDK_DEVICE_FLAG_INT_UNMASKABLE)) rte_eth_dev_rx_intr_disable (xd->port_id, 0); dpdk_log_info ("Probe for interrupt mode for device %U. Success.\n", - format_dpdk_device_name, xd->port_id); + format_dpdk_device_name, xd->device_index); } if (xd->flags & DPDK_DEVICE_FLAG_INT_SUPPORTED) @@ -360,8 +360,8 @@ dpdk_setup_interrupts (dpdk_device_t *xd) f.flags = UNIX_FILE_EVENT_EDGE_TRIGGERED; f.file_descriptor = rxq->efd; f.private_data = rxq->queue_index; - f.description = - format (0, "%U queue %u", format_dpdk_device_name, xd->port_id, q); + f.description = format (0, "%U queue %u", format_dpdk_device_name, + xd->device_index, q); rxq->clib_file_index = clib_file_add (&file_main, &f); vnet_hw_if_set_rx_queue_file_index (vnm, rxq->queue_index, rxq->clib_file_index); @@ -419,8 +419,8 @@ dpdk_device_start (dpdk_device_t * xd) rte_eth_allmulticast_enable (xd->port_id); - dpdk_log_info ("Interface %U started", - format_dpdk_device_name, xd->port_id); + dpdk_log_info ("Interface %U started", format_dpdk_device_name, + xd->device_index); } void @@ -433,8 +433,8 @@ dpdk_device_stop (dpdk_device_t * xd) rte_eth_dev_stop (xd->port_id); clib_memset (&xd->link, 0, sizeof (struct rte_eth_link)); - dpdk_log_info ("Interface %U stopped", - format_dpdk_device_name, xd->port_id); + dpdk_log_info ("Interface %U stopped", format_dpdk_device_name, + xd->device_index); } void vl_api_force_rpc_call_main_thread (void *fp, u8 * data, u32 data_length); |