[meta-intel] [PATCH v2 2/2] meta-isg: dpdk: fix v1.8.0 build with kernel 4.1

Anuj Mittal anujx.mittal at intel.com
Thu Oct 8 08:50:01 PDT 2015


Backported fixes from upstream dpdk sources to
ensure dpdk 1.8.0 compiles against kernel 4.1.

Signed-off-by: Anuj Mittal <anujx.mittal at intel.com>
---
 ...dpdk-1.8.0-kni-fix-build-with-kernel-3.19.patch |   69 +++++++++
 ...cc-version-detection-to-permit-versions-n.patch |  155 ++++++++++++++++++++
 .../common/recipes-extended/dpdk/dpdk_1.8.0.bb     |    9 +-
 3 files changed, 232 insertions(+), 1 deletion(-)
 create mode 100644 meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-kni-fix-build-with-kernel-3.19.patch
 create mode 100644 meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-mk-rework-gcc-version-detection-to-permit-versions-n.patch

diff --git a/meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-kni-fix-build-with-kernel-3.19.patch b/meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-kni-fix-build-with-kernel-3.19.patch
new file mode 100644
index 0000000..014fc63
--- /dev/null
+++ b/meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-kni-fix-build-with-kernel-3.19.patch
@@ -0,0 +1,69 @@
+From 4e6326ae5375d55966a5c872f391cf99de373057 Mon Sep 17 00:00:00 2001
+From: Pablo de Lara <pablo.de.lara.guarch at intel.com>
+Date: Sun, 22 Mar 2015 18:02:16 +0000
+Subject: [PATCH] kni: fix build with kernel 3.19
+
+Upstream-Status: Backport [2.1.0]
+
+Due to API changes in functions ndo_dflt_bridge_getlink
+(commit 2c3c031c) and ndo_fdb_add (commit f6f6424b)
+in kernel 3.19, DPDK would not build.
+
+This patch solves the problem, by checking the kernel version
+and adding the necessary new parameters.
+
+Mind that function igb_ndo_fdb_add does not need the extra parameter
+if USE_CONST_DEV_UC_CHAR is not set, since that macro is only defined
+when kernel is greater or equal than 3.7
+
+Signed-off-by: Pablo de Lara <pablo.de.lara.guarch at intel.com>
+Acked-by: Thomas Monjalon <thomas.monjalon at 6wind.com>
+(cherry picked from commit 98f255ed0a4a73bf785e884dc2069405de840546)
+Signed-off-by: Rahul Kumar Gupta <rahul.kumarxx.gupta at intel.com>
+---
+ lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c | 7 +++++++
+ lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h  | 4 ++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
+index a802a02..24b147d 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
++++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
+@@ -2103,6 +2103,9 @@ static int igb_set_features(struct net_device *netdev,
+ static int igb_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
+ 			   struct net_device *dev,
+ 			   const unsigned char *addr,
++#ifdef HAVE_NDO_FDB_ADD_VID
++			   u16 vid,
++#endif
+ 			   u16 flags)
+ #else
+ static int igb_ndo_fdb_add(struct ndmsg *ndm,
+@@ -2259,7 +2262,11 @@ static int igb_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
+ 	else
+ 		mode = BRIDGE_MODE_VEPA;
+ 
++#ifdef HAVE_NDO_FDB_ADD_VID
++	return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode, 0, 0);
++#else
+ 	return ndo_dflt_bridge_getlink(skb, pid, seq, dev, mode);
++#endif /* HAVE_NDO_FDB_ADD_VID */
+ }
+ #endif /* HAVE_BRIDGE_ATTRIBS */
+ #endif /* NTF_SELF */
+diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
+index 1213cc6..2e7e714 100644
+--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
++++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
+@@ -3881,4 +3881,8 @@ skb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
+ #define HAVE_VF_MIN_MAX_TXRATE 1
+ #endif /* >= 3.16.0 */
+ 
++#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) )
++#define HAVE_NDO_FDB_ADD_VID
++#endif /* >= 3.19.0 */
++
+ #endif /* _KCOMPAT_H_ */
+-- 
+1.9.1
+
diff --git a/meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-mk-rework-gcc-version-detection-to-permit-versions-n.patch b/meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-mk-rework-gcc-version-detection-to-permit-versions-n.patch
new file mode 100644
index 0000000..9bd0b66
--- /dev/null
+++ b/meta-isg/common/recipes-extended/dpdk/dpdk/dpdk-1.8.0-mk-rework-gcc-version-detection-to-permit-versions-n.patch
@@ -0,0 +1,155 @@
+From ccb0f3b60c1ec84a97698d9699a4b7e5cf074b21 Mon Sep 17 00:00:00 2001
+From: Panu Matilainen <pmatilai at redhat.com>
+Date: Mon, 23 Feb 2015 16:53:56 +0200
+Subject: [PATCH] mk: rework gcc version detection to permit versions newer
+ than 4.x
+
+Upstream-Status: Backport [2.1.0]
+
+Separately comparing major and minor versions becomes seriously clumsy
+when with major version changes, convert the entire version string into
+a numeric value (ie 4.6.0 becomes 460 and 5.0.0 becomes 500) and use
+that for comparisons, eliminate unnecessary negations while at it.
+This makes the comparisons simpler, more obvious and makes gcc 5.0
+naturally recognized at least as capable as newest 4.x.
+
+This three-digit scheme would run into trouble if gcc ever went to
+two-digit version segments, but that hasn't happened in the last 10+
+years so it seems like a safe assumption.
+
+Signed-off-by: Panu Matilainen <pmatilai at redhat.com>
+Acked-by: Thomas Monjalon <thomas.monjalon at 6wind.com>
+(cherry picked from commit 71f0ab1849b4fc3ca928deb566df12ca725ed150)
+Signed-off-by: Rahul Kumar Gupta <rahul.kumarxx.gupta at intel.com>
+
+Conflicts:
+	lib/librte_pmd_fm10k/Makefile
+Makefile part of fm10k feature enabled as part of
+commit a6061d9e7075b5457a9234117d75a2c05227457d which we ae not
+backporting. Makefile changes not taken.
+---
+ lib/librte_pmd_i40e/Makefile             |  2 +-
+ lib/librte_pmd_ixgbe/Makefile            |  6 +++---
+ lib/librte_pmd_vmxnet3/Makefile          |  2 +-
+ mk/toolchain/gcc/rte.toolchain-compat.mk | 22 ++++++++++------------
+ 4 files changed, 15 insertions(+), 17 deletions(-)
+
+diff --git a/lib/librte_pmd_i40e/Makefile b/lib/librte_pmd_i40e/Makefile
+index 98e4bdf..61c3675 100644
+--- a/lib/librte_pmd_i40e/Makefile
++++ b/lib/librte_pmd_i40e/Makefile
+@@ -65,7 +65,7 @@ CFLAGS_BASE_DRIVER += -Wno-pointer-to-int-cast
+ CFLAGS_BASE_DRIVER += -Wno-format-nonliteral
+ CFLAGS_BASE_DRIVER += -Wno-format-security
+ 
+-ifeq ($(shell test $(GCC_MAJOR_VERSION) -ge 4 -a $(GCC_MINOR_VERSION) -ge 4 && echo 1), 1)
++ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ CFLAGS_BASE_DRIVER += -Wno-unused-but-set-variable
+ endif
+ 
+diff --git a/lib/librte_pmd_ixgbe/Makefile b/lib/librte_pmd_ixgbe/Makefile
+index 3588047..592fe74 100644
+--- a/lib/librte_pmd_ixgbe/Makefile
++++ b/lib/librte_pmd_ixgbe/Makefile
+@@ -56,18 +56,18 @@ else
+ #
+ # CFLAGS for gcc
+ #
+-ifneq ($(shell test $(GCC_MAJOR_VERSION) -le 4 -a $(GCC_MINOR_VERSION) -le 3 && echo 1), 1)
++ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ CFLAGS     += -Wno-deprecated
+ endif
+ CFLAGS_BASE_DRIVER = -Wno-unused-parameter -Wno-unused-value
+ CFLAGS_BASE_DRIVER += -Wno-strict-aliasing -Wno-format-extra-args
+ 
+-ifeq ($(shell test $(GCC_MAJOR_VERSION) -ge 4 -a $(GCC_MINOR_VERSION) -ge 6 && echo 1), 1)
++ifeq ($(shell test $(GCC_VERSION) -ge 460 && echo 1), 1)
+ CFLAGS_ixgbe_common.o += -Wno-unused-but-set-variable
+ CFLAGS_ixgbe_x550.o += -Wno-unused-but-set-variable -Wno-maybe-uninitialized
+ endif
+ 
+-ifeq ($(shell test $(GCC_MAJOR_VERSION) -le 4 -a $(GCC_MINOR_VERSION) -le 6 && echo 1), 1)
++ifeq ($(shell test $(GCC_VERSION) -le 460 && echo 1), 1)
+ CFLAGS_ixgbe_x550.o += -Wno-uninitialized
+ CFLAGS_ixgbe_phy.o += -Wno-uninitialized
+ endif
+diff --git a/lib/librte_pmd_vmxnet3/Makefile b/lib/librte_pmd_vmxnet3/Makefile
+index 6872c74..3b7674e 100644
+--- a/lib/librte_pmd_vmxnet3/Makefile
++++ b/lib/librte_pmd_vmxnet3/Makefile
+@@ -56,7 +56,7 @@ else
+ #
+ # CFLAGS for gcc
+ #
+-ifneq ($(shell test $(GCC_MAJOR_VERSION) -le 4 -a $(GCC_MINOR_VERSION) -le 3 && echo 1), 1)
++ifeq ($(shell test $(GCC_VERSION) -ge 440 && echo 1), 1)
+ CFLAGS     += -Wno-deprecated
+ endif
+ CFLAGS_BASE_DRIVER = -Wno-unused-parameter -Wno-unused-value
+diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk
+index e40e103..a867559 100644
+--- a/mk/toolchain/gcc/rte.toolchain-compat.mk
++++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
+@@ -38,17 +38,15 @@
+ 
+ #find out GCC version
+ 
+-GCC_MAJOR_VERSION = $(shell $(CC) -dumpversion | cut -f1 -d.)
++GCC_VERSION = $(subst .,,$(shell $(CC) -dumpversion))
+ 
+-# if GCC is not 4.x
+-ifneq ($(GCC_MAJOR_VERSION),4)
++# if GCC is older than 4.x
++ifeq ($(shell test $(GCC_VERSION) -lt 400 && echo 1), 1)
+ 	MACHINE_CFLAGS =
+-$(warning You are not using GCC 4.x. This is neither supported, nor tested.)
++$(warning You are using GCC < 4.x. This is neither supported, nor tested.)
+ 
+ 
+ else
+-	GCC_MINOR_VERSION = $(shell $(CC) -dumpversion | cut -f2 -d.)
+-
+ # GCC graceful degradation
+ # GCC 4.2.x - added support for generic target
+ # GCC 4.3.x - added support for core2, ssse3, sse4.1, sse4.2
+@@ -57,18 +55,18 @@ else
+ # GCC 4.6.x - added support for corei7, corei7-avx
+ # GCC 4.7.x - added support for fsgsbase, rdrnd, f16c, core-avx-i, core-avx2
+ 
+-	ifeq ($(shell test $(GCC_MINOR_VERSION) -le 7 && echo 1), 1)
++	ifeq ($(shell test $(GCC_VERSION) -le 470 && echo 1), 1)
+ 		MACHINE_CFLAGS := $(patsubst -march=core-avx-i,-march=corei7-avx,$(MACHINE_CFLAGS))
+ 		MACHINE_CFLAGS := $(patsubst -march=core-avx2,-march=core-avx2,$(MACHINE_CFLAGS))
+ 	endif
+-	ifeq ($(shell test $(GCC_MINOR_VERSION) -lt 6 && echo 1), 1)
++	ifeq ($(shell test $(GCC_VERSION) -lt 460 && echo 1), 1)
+ 		MACHINE_CFLAGS := $(patsubst -march=corei7-avx,-march=core2 -maes -mpclmul -mavx,$(MACHINE_CFLAGS))
+ 		MACHINE_CFLAGS := $(patsubst -march=corei7,-march=core2 -maes -mpclmul,$(MACHINE_CFLAGS))
+ 	endif
+-	ifeq ($(shell test $(GCC_MINOR_VERSION) -lt 5 && echo 1), 1)
++	ifeq ($(shell test $(GCC_VERSION) -lt 450 && echo 1), 1)
+ 		MACHINE_CFLAGS := $(patsubst -march=atom,-march=core2 -mssse3,$(MACHINE_CFLAGS))
+ 	endif
+-	ifeq ($(shell test $(GCC_MINOR_VERSION) -lt 4 && echo 1), 1)
++	ifeq ($(shell test $(GCC_VERSION) -lt 440 && echo 1), 1)
+ 		MACHINE_CFLAGS := $(filter-out -mavx -mpclmul -maes,$(MACHINE_CFLAGS))
+ 		ifneq ($(findstring SSE4_2, $(CPUFLAGS)),)
+ 			MACHINE_CFLAGS += -msse4.2
+@@ -77,12 +75,12 @@ else
+ 			MACHINE_CFLAGS += -msse4.1
+ 		endif
+ 	endif
+-	ifeq ($(shell test $(GCC_MINOR_VERSION) -lt 3 && echo 1), 1)
++	ifeq ($(shell test $(GCC_VERSION) -lt 430 && echo 1), 1)
+ 		MACHINE_CFLAGS := $(filter-out -msse% -mssse%,$(MACHINE_CFLAGS))
+ 		MACHINE_CFLAGS := $(patsubst -march=core2,-march=generic,$(MACHINE_CFLAGS))
+ 		MACHINE_CFLAGS += -msse3
+ 	endif
+-	ifeq ($(shell test $(GCC_MINOR_VERSION) -lt 2 && echo 1), 1)
++	ifeq ($(shell test $(GCC_VERSION) -lt 420 && echo 1), 1)
+ 		MACHINE_CFLAGS := $(filter-out -march% -mtune% -msse%,$(MACHINE_CFLAGS))
+ 	endif
+ endif
+-- 
+1.9.1
+
diff --git a/meta-isg/common/recipes-extended/dpdk/dpdk_1.8.0.bb b/meta-isg/common/recipes-extended/dpdk/dpdk_1.8.0.bb
index a6b2aed..82f801e 100644
--- a/meta-isg/common/recipes-extended/dpdk/dpdk_1.8.0.bb
+++ b/meta-isg/common/recipes-extended/dpdk/dpdk_1.8.0.bb
@@ -1,6 +1,13 @@
 include dpdk.inc
 
-SRC_URI += "file://dpdk-1.8.0-and-2.0.0-examples-add-config-variable-to-enable-disable-dpdk.patch"
+SRC_URI += "file://dpdk-1.8.0-and-2.0.0-examples-add-config-variable-to-enable-disable-dpdk.patch \
+            file://dpdk-1.8.0-and-2.0.0-ixgbe-fix-a-build-warning-being-treated-as-error.patch \
+            file://dpdk-1.8.0-kni-fix-build-with-kernel-3.19.patch \
+            file://dpdk-2.0.0-kni-fix-build-with-kernel-4.0.patch \
+            file://dpdk-2.0.0-kni-fix-igb-build-with-kernel-4.1.patch \
+            file://dpdk-2.0.0-kni-net-fix-build-with-kernel-4.1.patch \
+            file://dpdk-1.8.0-mk-rework-gcc-version-detection-to-permit-versions-n.patch \
+            "
 
 SRC_URI[dpdk.md5sum] = "11ad8785aaa869cc87265bcb8d828f22"
 SRC_URI[dpdk.sha256sum] = "9f5386830bd999355182e20408f3fc2cfa0802a4497fdded8d43202feede1939"
-- 
1.7.9.5



More information about the meta-intel mailing list