From 34c54dff5c66f9a4aef77daf08219301e15cc1fa Mon Sep 17 00:00:00 2001 From: Mohammed Hawari Date: Thu, 18 Mar 2021 12:02:08 +0100 Subject: dpdk: don't mask interrupts for some drivers It is well known that for some NICs, masking interrupts results in delaying desc writebacks, which breaks poll mode. This fix introduces an "int-unmaskable" dpdk device flag to identify such devices (typically Intel FVL). For such devices, interrupts are masked by a call to file_update(...,UNIX_FILE_UPDATE_DELETE) instead of rte_eth_dev_rx_intr_disable (...) Change-Id: Ifbc701aebe8572319b7aae19382bd683a47fc3cf Type: fix Fixes: 19ff0c3699342b512c03362b3815df684a661f49 Signed-off-by: Mohammed Hawari --- src/plugins/dpdk/device/common.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/plugins/dpdk/device/common.c') diff --git a/src/plugins/dpdk/device/common.c b/src/plugins/dpdk/device/common.c index a837714e75b..2ae0096ad32 100644 --- a/src/plugins/dpdk/device/common.c +++ b/src/plugins/dpdk/device/common.c @@ -202,7 +202,8 @@ dpdk_setup_interrupts (dpdk_device_t *xd) else { xd->flags |= DPDK_DEVICE_FLAG_INT_SUPPORTED; - rte_eth_dev_rx_intr_disable (xd->port_id, 0); + 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); } @@ -230,6 +231,13 @@ dpdk_setup_interrupts (dpdk_device_t *xd) 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); + if (xd->flags & DPDK_DEVICE_FLAG_INT_UNMASKABLE) + { + clib_file_main_t *fm = &file_main; + clib_file_t *f = + pool_elt_at_index (fm->file_pool, rxq->clib_file_index); + fm->file_update (f, UNIX_FILE_UPDATE_DELETE); + } } } vnet_hw_if_update_runtime_data (vnm, xd->hw_if_index); -- cgit 1.2.3-korg