diff --git a/SOURCES/0001-bus-vmbus-fix-race-in-subchannel-creation.patch b/SOURCES/0001-bus-vmbus-fix-race-in-subchannel-creation.patch new file mode 100644 index 0000000..b8517cd --- /dev/null +++ b/SOURCES/0001-bus-vmbus-fix-race-in-subchannel-creation.patch @@ -0,0 +1,57 @@ +From 25363eb99bc43443bec354abea1e40db61280b30 Mon Sep 17 00:00:00 2001 +From: Stephen Hemminger +Date: Wed, 5 Dec 2018 14:11:56 -0800 +Subject: [PATCH 1/3] bus/vmbus: fix race in subchannel creation + +[ upstream commit 4970103e89f4f828669acf3b465e984fdc891e1e ] + +When using multiple queues, there was a race with the kernel +in setting up the second channel. This regression is due to a kernel change +which does not allow accessing sysfs files for Hyper-V channels that are not opened. + +The fix is simple, just move the logic to detect not ready +sub channels earlier in the existing loop. + +Fixes: 831dba47bd36 ("bus/vmbus: add Hyper-V virtual bus support") + +Reported-by: Mohammed Gamal +Signed-off-by: Stephen Hemminger +(cherry picked from commit ca17e6624251b05cf188997cffc3e1ab2e50561a) +Signed-off-by: Maxime Coquelin +--- + drivers/bus/vmbus/linux/vmbus_uio.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c +index 12e97e3a4..38df4d724 100644 +--- a/drivers/bus/vmbus/linux/vmbus_uio.c ++++ b/drivers/bus/vmbus/linux/vmbus_uio.c +@@ -357,6 +357,12 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, + continue; + } + ++ if (!vmbus_isnew_subchannel(primary, relid)) ++ continue; /* Already know about you */ ++ ++ if (!vmbus_uio_ring_present(dev, relid)) ++ continue; /* Ring may not be ready yet */ ++ + snprintf(subchan_path, sizeof(subchan_path), "%s/%lu", + chan_path, relid); + err = vmbus_uio_sysfs_read(subchan_path, "subchannel_id", +@@ -370,12 +376,6 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, + if (subid == 0) + continue; /* skip primary channel */ + +- if (!vmbus_isnew_subchannel(primary, relid)) +- continue; +- +- if (!vmbus_uio_ring_present(dev, relid)) +- continue; /* Ring may not be ready yet */ +- + err = vmbus_uio_sysfs_read(subchan_path, "monitor_id", + &monid, UINT8_MAX); + if (err) { +-- +2.20.1 + diff --git a/SOURCES/0002-net-netvsc-enable-SR-IOV.patch b/SOURCES/0002-net-netvsc-enable-SR-IOV.patch new file mode 100644 index 0000000..393733c --- /dev/null +++ b/SOURCES/0002-net-netvsc-enable-SR-IOV.patch @@ -0,0 +1,38 @@ +From da9c7a3059fb4cffef8d1101a247fafabd9be7bd Mon Sep 17 00:00:00 2001 +From: Stephen Hemminger +Date: Wed, 5 Dec 2018 14:11:57 -0800 +Subject: [PATCH 2/3] net/netvsc: enable SR-IOV + +[ upstream commit 825ab257b5ce8235ab0cdc260e5b7b757e102875 ] + +Make DPDK enable SRIOV flag in same way as Linux and FreeBSD. + +Fixes: dc7680e8597c ("net/netvsc: support integrated VF") + +Signed-off-by: Stephen Hemminger +(cherry picked from commit 21dc946c2b5524c7e6ec1fe4079864f3322dd483) +Signed-off-by: Maxime Coquelin +--- + drivers/net/netvsc/hn_nvs.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/netvsc/hn_nvs.c b/drivers/net/netvsc/hn_nvs.c +index 9690c5f8a..d58770e04 100644 +--- a/drivers/net/netvsc/hn_nvs.c ++++ b/drivers/net/netvsc/hn_nvs.c +@@ -326,9 +326,9 @@ hn_nvs_conf_ndis(struct hn_data *hv, unsigned int mtu) + conf.mtu = mtu + ETHER_HDR_LEN; + conf.caps = NVS_NDIS_CONF_VLAN; + +- /* TODO enable SRIOV */ +- //if (hv->nvs_ver >= NVS_VERSION_5) +- // conf.caps |= NVS_NDIS_CONF_SRIOV; ++ /* enable SRIOV */ ++ if (hv->nvs_ver >= NVS_VERSION_5) ++ conf.caps |= NVS_NDIS_CONF_SRIOV; + + /* NOTE: No response. */ + error = hn_nvs_req_send(hv, &conf, sizeof(conf)); +-- +2.20.1 + diff --git a/SOURCES/0003-net-netvsc-disable-multi-queue-on-older-servers.patch b/SOURCES/0003-net-netvsc-disable-multi-queue-on-older-servers.patch new file mode 100644 index 0000000..6d055d4 --- /dev/null +++ b/SOURCES/0003-net-netvsc-disable-multi-queue-on-older-servers.patch @@ -0,0 +1,46 @@ +From 0598625d2e17374b7d5693972f5acb59fef25f63 Mon Sep 17 00:00:00 2001 +From: Stephen Hemminger +Date: Wed, 5 Dec 2018 14:11:58 -0800 +Subject: [PATCH 3/3] net/netvsc: disable multi-queue on older servers + +[ upstream commit afbc22bf51ab98b9b61b11eb6d38278a9d577111 ] + +NDIS multi-queue support is only in WS2012 or later. Check the NDIS +version to limit to single queue on older versions. Similar code +exists in Linux driver. + +Fixes: 4e9c73e96e83 ("net/netvsc: add Hyper-V network device") + +Signed-off-by: Stephen Hemminger +(cherry picked from commit d387b7ae45a520970ff55ea6ce75b48d5e69c4d9) +Signed-off-by: Maxime Coquelin +--- + drivers/net/netvsc/hn_ethdev.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c +index b330bf3d7..1256fa399 100644 +--- a/drivers/net/netvsc/hn_ethdev.c ++++ b/drivers/net/netvsc/hn_ethdev.c +@@ -732,6 +732,7 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev) + hv->chim_res = &vmbus->resource[HV_SEND_BUF_MAP]; + hv->port_id = eth_dev->data->port_id; + hv->latency = HN_CHAN_LATENCY_NS; ++ hv->max_queues = 1; + + err = hn_parse_args(eth_dev); + if (err) +@@ -770,6 +771,10 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev) + if (err) + goto failed; + ++ /* Multi queue requires later versions of windows server */ ++ if (hv->nvs_ver < NVS_VERSION_5) ++ return 0; ++ + max_chan = rte_vmbus_max_channels(vmbus); + PMD_INIT_LOG(DEBUG, "VMBus max channels %d", max_chan); + if (max_chan <= 0) +-- +2.20.1 + diff --git a/SOURCES/arm64-armv8a-linuxapp-gcc-config b/SOURCES/arm64-armv8a-linuxapp-gcc-config index c927712..00825da 100644 --- a/SOURCES/arm64-armv8a-linuxapp-gcc-config +++ b/SOURCES/arm64-armv8a-linuxapp-gcc-config @@ -286,7 +286,7 @@ CONFIG_RTE_LIBRTE_BBDEV=n CONFIG_RTE_BBDEV_MAX_DEVS=128 CONFIG_RTE_BBDEV_OFFLOAD_COST=n # Compile PMD for NULL bbdev device -CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y +CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n # Compile PMD for turbo software bbdev device CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n # Compile generic crypto device library @@ -304,7 +304,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4 # Compile PMD for Cavium OCTEON TX crypto device -CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y +CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n # Compile PMD for QuickAssist based devices - see docs for details CONFIG_RTE_LIBRTE_PMD_QAT=n CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n diff --git a/SOURCES/gen_config_group.sh b/SOURCES/gen_config_group.sh index 032abef..1a28b05 100755 --- a/SOURCES/gen_config_group.sh +++ b/SOURCES/gen_config_group.sh @@ -145,6 +145,8 @@ do set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_COMMON_DPAAX n set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_CAAM_JR n set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE n + set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL n + set_conf "${OUTDIR}" CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO n # whitelist of enabled PMDs # Soft PMDs to enable diff --git a/SOURCES/ppc_64-power8-linuxapp-gcc-config b/SOURCES/ppc_64-power8-linuxapp-gcc-config index 2b0d455..e5d9380 100644 --- a/SOURCES/ppc_64-power8-linuxapp-gcc-config +++ b/SOURCES/ppc_64-power8-linuxapp-gcc-config @@ -307,7 +307,7 @@ CONFIG_RTE_LIBRTE_BBDEV=n CONFIG_RTE_BBDEV_MAX_DEVS=128 CONFIG_RTE_BBDEV_OFFLOAD_COST=n # Compile PMD for NULL bbdev device -CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y +CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n # Compile PMD for turbo software bbdev device CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n # Compile generic crypto device library @@ -325,7 +325,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4 # Compile PMD for Cavium OCTEON TX crypto device -CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y +CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n # Compile PMD for QuickAssist based devices - see docs for details CONFIG_RTE_LIBRTE_PMD_QAT=n CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n diff --git a/SOURCES/x86_64-native-linuxapp-gcc-config b/SOURCES/x86_64-native-linuxapp-gcc-config index ee7a5a5..55a3fdf 100644 --- a/SOURCES/x86_64-native-linuxapp-gcc-config +++ b/SOURCES/x86_64-native-linuxapp-gcc-config @@ -284,7 +284,7 @@ CONFIG_RTE_LIBRTE_BBDEV=n CONFIG_RTE_BBDEV_MAX_DEVS=128 CONFIG_RTE_BBDEV_OFFLOAD_COST=n # Compile PMD for NULL bbdev device -CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y +CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=n # Compile PMD for turbo software bbdev device CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n # Compile generic crypto device library @@ -302,7 +302,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC=n CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4 # Compile PMD for Cavium OCTEON TX crypto device -CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y +CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=n # Compile PMD for QuickAssist based devices - see docs for details CONFIG_RTE_LIBRTE_PMD_QAT=n CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n diff --git a/SPECS/dpdk.spec b/SPECS/dpdk.spec index 024b9ea..896480c 100644 --- a/SPECS/dpdk.spec +++ b/SPECS/dpdk.spec @@ -9,7 +9,7 @@ #% define shortcommit0 %(c=%{commit0}; echo ${c:0:7}) %define ver 18.11 -%define rel 2 +%define rel 3 %define srcname dpdk @@ -36,6 +36,11 @@ Source504: arm64-armv8a-linuxapp-gcc-config Source505: ppc_64-power8-linuxapp-gcc-config Source506: x86_64-native-linuxapp-gcc-config +# Patches only in dpdk package +Patch0: 0001-bus-vmbus-fix-race-in-subchannel-creation.patch +Patch1: 0002-net-netvsc-enable-SR-IOV.patch +Patch2: 0003-net-netvsc-disable-multi-queue-on-older-servers.patch + Summary: Set of libraries and drivers for fast packet processing # @@ -275,6 +280,9 @@ sed -i -e 's:-%{machine_tmpl}-:-%{machine}-:g' %{buildroot}/%{_sysconfdir}/profi %endif %changelog +* Wed Feb 06 2019 Maxime Coquelin - 18.11.3 +- Backport NETVSC pmd fixes (#1662292) + * Tue Nov 27 2018 Timothy Redaelli - 18.11-2 - Fix python scripts hashbang - Remove meson.build from dpdk-tools