diff options
Diffstat (limited to 'src/plugins/dpdk/device')
-rw-r--r-- | src/plugins/dpdk/device/common.c | 25 | ||||
-rw-r--r-- | src/plugins/dpdk/device/init.c | 9 |
2 files changed, 24 insertions, 10 deletions
diff --git a/src/plugins/dpdk/device/common.c b/src/plugins/dpdk/device/common.c index 8396386510c..3eca847de79 100644 --- a/src/plugins/dpdk/device/common.c +++ b/src/plugins/dpdk/device/common.c @@ -103,7 +103,10 @@ dpdk_device_setup (dpdk_device_t * xd) if (xd->conf.disable_multi_seg == 0) { txo |= DEV_TX_OFFLOAD_MULTI_SEGS; - rxo |= DEV_RX_OFFLOAD_JUMBO_FRAME | DEV_RX_OFFLOAD_SCATTER; + rxo |= DEV_RX_OFFLOAD_SCATTER; +#if RTE_VERSION < RTE_VERSION_NUM(21, 11, 0, 0) + rxo |= DEV_RX_OFFLOAD_JUMBO_FRAME; +#endif } if (xd->conf.enable_lro) @@ -156,13 +159,31 @@ dpdk_device_setup (dpdk_device_t * xd) } } +#if RTE_VERSION < RTE_VERSION_NUM(21, 11, 0, 0) if (rxo & DEV_RX_OFFLOAD_JUMBO_FRAME) conf.rxmode.max_rx_pkt_len = clib_min (ETHERNET_MAX_PACKET_BYTES, dev_info.max_rx_pktlen); - +#else + dpdk_log_debug ("[%u] min_mtu: %u, max_mtu: %u, min_rx_bufsize: %u, " + "max_rx_pktlen: %u, max_lro_pkt_size: %u", + xd->port_id, dev_info.min_mtu, dev_info.max_mtu, + dev_info.min_rx_bufsize, dev_info.max_rx_pktlen, + dev_info.max_lro_pkt_size); + + mtu = xd->conf.disable_multi_seg ? 2000 : ETHERNET_MAX_PACKET_BYTES; + conf.rxmode.mtu = clib_min (mtu, dev_info.max_rx_pktlen); +#endif + +retry: rv = rte_eth_dev_configure (xd->port_id, xd->conf.n_rx_queues, xd->conf.n_tx_queues, &conf); + if (rv < 0 && conf.intr_conf.rxq) + { + conf.intr_conf.rxq = 0; + goto retry; + } + if (rv < 0) { dpdk_device_error (xd, "rte_eth_dev_configure", rv); diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index a515bca359d..1d3e061aaaf 100644 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -456,14 +456,7 @@ dpdk_lib_init (dpdk_main_t * dm) xd->port_type = VNET_DPDK_PORT_TYPE_ETH_1G; xd->conf.n_rx_desc = DPDK_NB_RX_DESC_VIRTIO; xd->conf.n_tx_desc = DPDK_NB_TX_DESC_VIRTIO; - /* - * Enable use of RX interrupts if supported. - * - * There is no device flag or capability for this, so - * use the same check that the virtio driver does. - */ - if (pci_dev && rte_intr_cap_multiple (&pci_dev->intr_handle)) - xd->conf.enable_rxq_int = 1; + xd->conf.enable_rxq_int = 1; break; /* vmxnet3 */ |