diff options
author | Benoît Ganne <bganne@cisco.com> | 2022-10-13 17:22:26 +0200 |
---|---|---|
committer | Dave Wallace <dwallacelf@gmail.com> | 2023-01-11 15:23:44 +0000 |
commit | 6a07348f4a5312310c01fdd5af937ce26580eb2d (patch) | |
tree | 9ed9307f1529a556231977e7c7ab661b7dbf434a /src/plugins | |
parent | eea6edcda896ccf8d5befed14eb95432a235644c (diff) |
pci: add option to force uio binding
Type: improvement
Change-Id: Ifea4badd58f7e2b5e792d7506f6747851a08587f
Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/dpdk/device/dpdk.h | 1 | ||||
-rw-r--r-- | src/plugins/dpdk/device/init.c | 5 | ||||
-rw-r--r-- | src/plugins/vmxnet3/cli.c | 13 | ||||
-rw-r--r-- | src/plugins/vmxnet3/vmxnet3.c | 3 | ||||
-rw-r--r-- | src/plugins/vmxnet3/vmxnet3.h | 9 |
5 files changed, 23 insertions, 8 deletions
diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h index 02cf6812d43..7569fc60a90 100644 --- a/src/plugins/dpdk/device/dpdk.h +++ b/src/plugins/dpdk/device/dpdk.h @@ -265,6 +265,7 @@ typedef struct u8 **eal_init_args; u8 *eal_init_args_str; u8 *uio_driver_name; + u8 uio_bind_force; u8 enable_telemetry; u16 max_simd_bitwidth; diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index 3f27a07f0ba..83ce2dc9cbc 100644 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -681,7 +681,8 @@ dpdk_bind_devices_to_uio (dpdk_config_main_t * conf) continue; } - error = vlib_pci_bind_to_uio (vm, addr, (char *) conf->uio_driver_name); + error = vlib_pci_bind_to_uio (vm, addr, (char *) conf->uio_driver_name, + conf->uio_bind_force); if (error) { @@ -1089,6 +1090,8 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input) } else if (unformat (input, "uio-driver %s", &conf->uio_driver_name)) ; + else if (unformat (input, "uio-bind-force")) + conf->uio_bind_force = 1; else if (unformat (input, "socket-mem %s", &socket_mem)) ; else if (unformat (input, "no-pci")) diff --git a/src/plugins/vmxnet3/cli.c b/src/plugins/vmxnet3/cli.c index 039e9f3a75b..f751358262b 100644 --- a/src/plugins/vmxnet3/cli.c +++ b/src/plugins/vmxnet3/cli.c @@ -47,8 +47,10 @@ vmxnet3_create_command_fn (vlib_main_t * vm, unformat_input_t * input, args.enable_gso = 1; else if (unformat (line_input, "elog")) args.enable_elog = 1; + else if (unformat (line_input, "bind force")) + args.bind = VMXNET3_BIND_FORCE; else if (unformat (line_input, "bind")) - args.bind = 1; + args.bind = VMXNET3_BIND_DEFAULT; else if (unformat (line_input, "rx-queue-size %u", &size)) args.rxq_size = size; else if (unformat (line_input, "tx-queue-size %u", &size)) @@ -77,10 +79,11 @@ vmxnet3_create_command_fn (vlib_main_t * vm, unformat_input_t * input, /* *INDENT-OFF* */ VLIB_CLI_COMMAND (vmxnet3_create_command, static) = { .path = "create interface vmxnet3", - .short_help = "create interface vmxnet3 <pci-address>" - " [rx-queue-size <size>] [tx-queue-size <size>]" - " [num-tx-queues <number>] [num-rx-queues <number>] [bind]" - " [gso]", + .short_help = + "create interface vmxnet3 <pci-address>" + " [rx-queue-size <size>] [tx-queue-size <size>]" + " [num-tx-queues <number>] [num-rx-queues <number>] [bind [force]]" + " [gso]", .function = vmxnet3_create_command_fn, }; /* *INDENT-ON* */ diff --git a/src/plugins/vmxnet3/vmxnet3.c b/src/plugins/vmxnet3/vmxnet3.c index 770cb2d418d..be862d7127a 100644 --- a/src/plugins/vmxnet3/vmxnet3.c +++ b/src/plugins/vmxnet3/vmxnet3.c @@ -692,7 +692,8 @@ vmxnet3_create_if (vlib_main_t * vm, vmxnet3_create_if_args_t * args) if (args->bind) { - error = vlib_pci_bind_to_uio (vm, &args->addr, (char *) "auto"); + error = vlib_pci_bind_to_uio (vm, &args->addr, (char *) "auto", + VMXNET3_BIND_FORCE == args->bind); if (error) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; diff --git a/src/plugins/vmxnet3/vmxnet3.h b/src/plugins/vmxnet3/vmxnet3.h index 81aeec6f5c5..89602f8ee9e 100644 --- a/src/plugins/vmxnet3/vmxnet3.h +++ b/src/plugins/vmxnet3/vmxnet3.h @@ -606,6 +606,13 @@ typedef struct extern vmxnet3_main_t vmxnet3_main; +typedef enum +{ + VMXNET3_BIND_NONE = 0, + VMXNET3_BIND_DEFAULT = 1, + VMXNET3_BIND_FORCE = 2, +} __clib_packed vmxnet3_bind_t; + typedef struct { vlib_pci_addr_t addr; @@ -614,7 +621,7 @@ typedef struct u16 rxq_num; u16 txq_size; u16 txq_num; - u8 bind; + vmxnet3_bind_t bind; u8 enable_gso; /* return */ i32 rv; |