summaryrefslogtreecommitdiffstats
path: root/dpdk
diff options
context:
space:
mode:
Diffstat (limited to 'dpdk')
-rw-r--r--dpdk/Makefile485
-rw-r--r--dpdk/README34
-rwxr-xr-xdpdk/deb/debian/compat1
-rw-r--r--dpdk/deb/debian/control18
-rw-r--r--dpdk/deb/debian/dkms/Makefile10
-rwxr-xr-xdpdk/deb/debian/rules40
-rw-r--r--dpdk/deb/debian/vpp-dpdk-dkms.dkms8
-rw-r--r--dpdk/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch13
-rw-r--r--dpdk/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch29
-rw-r--r--dpdk/dpdk-18.05_patches/0001-i40evf-don-t-reset-device_info-data.patch28
-rw-r--r--dpdk/dpdk-18.05_patches/0002-ixgbe-link-wait-longer.patch13
-rw-r--r--dpdk/dpdk-18.08_patches/0001-net-mlx5-support-externally-allocated-mempool.patch270
-rw-r--r--dpdk/dpdk-18.08_patches/0002-mlx4-support-externally-allocated-mempool.patch250
-rw-r--r--dpdk/dpdk-18.08_patches/0003-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch39
-rw-r--r--dpdk/rpm/vpp-dpdk.spec26
15 files changed, 0 insertions, 1264 deletions
diff --git a/dpdk/Makefile b/dpdk/Makefile
deleted file mode 100644
index 9f7faa3477a..00000000000
--- a/dpdk/Makefile
+++ /dev/null
@@ -1,485 +0,0 @@
-# Copyright (c) 2015 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Scripts require non-POSIX parts of bash
-SHELL := /bin/bash
-
-DPDK_BUILD_DIR ?= $(CURDIR)/_build
-DPDK_INSTALL_DIR ?= $(CURDIR)/_install
-DPDK_PKTMBUF_HEADROOM ?= 128
-DPDK_CACHE_LINE_SIZE ?= 64
-DPDK_DOWNLOAD_DIR ?= $(HOME)/Downloads
-DPDK_DEBUG ?= n
-DPDK_MLX4_PMD ?= n
-DPDK_MLX5_PMD ?= n
-DPDK_TAP_PMD ?= n
-DPDK_FAILSAFE_PMD ?= n
-
-B := $(DPDK_BUILD_DIR)
-I := $(DPDK_INSTALL_DIR)
-DPDK_VERSION ?= 18.08
-PKG_SUFFIX ?= vpp3
-DPDK_BASE_URL ?= http://fast.dpdk.org/rel
-DPDK_TARBALL := dpdk-$(DPDK_VERSION).tar.xz
-DPDK_TAR_URL := $(DPDK_BASE_URL)/$(DPDK_TARBALL)
-DPDK_18.05_TARBALL_MD5_CKSUM := 9fc86367cd9407ff6a8dfea56c4eddc4
-DPDK_18.08_TARBALL_MD5_CKSUM := da5e7fb25ab063c47e53929fb8c58be5
-MACHINE=$(shell uname -m)
-
-# replace dot with space, and if 3rd word exists we deal with stable dpdk rel
-ifeq ($(word 3,$(subst ., ,$(DPDK_VERSION))),)
-DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION)
-else
-DPDK_SOURCE := $(B)/dpdk-stable-$(DPDK_VERSION)
-endif
-
-NASM_BASE_URL := http://www.nasm.us/pub/nasm/releasebuilds
-NASM_VER := 2.13.03
-NASM_TARBALL := nasm-$(NASM_VER).tar.xz
-NASM_TAR_URL := $(NASM_BASE_URL)/$(NASM_VER)/$(NASM_TARBALL)
-NASM_SOURCE := $(B)/nasm-$(NASM_VER)
-
-ifneq (,$(findstring 18.02,$(DPDK_VERSION)))
-IPSEC_MB_VER ?= 0.48
-else
-IPSEC_MB_VER ?= 0.49
-endif
-
-ifeq ($(MACHINE),$(filter $(MACHINE),x86_64))
- AESNI ?= y
-$(info Building IPSec-MB $(IPSEC_MB_VER) library)
-else
- AESNI ?= N
-endif
-
-AESNIMB_LIB_TARBALL := v$(IPSEC_MB_VER).tar.gz
-AESNIMB_LIB_TARBALL_URL := http://github.com/01org/intel-ipsec-mb/archive/$(AESNIMB_LIB_TARBALL)
-AESNIMB_LIB_SOURCE := $(B)/intel-ipsec-mb-$(IPSEC_MB_VER)
-
-ifneq (,$(findstring clang,$(CC)))
-DPDK_CC=clang
-else ifneq (,$(findstring icc,$(CC)))
-DPDK_CC=icc
-else
-DPDK_CC=gcc
-endif
-
-##############################################################################
-# Intel x86
-##############################################################################
-ifeq ($(MACHINE),$(filter $(MACHINE),x86_64 i686))
-DPDK_TARGET ?= $(MACHINE)-native-linuxapp-$(DPDK_CC)
-DPDK_MACHINE ?= nhm
-DPDK_TUNE ?= core-avx2
-
-##############################################################################
-# ARM64
-##############################################################################
-else ifeq ($(MACHINE),aarch64)
-CROSS :=
-export CROSS
-DPDK_TARGET ?= arm64-armv8a-linuxapp-$(DPDK_CC)
-DPDK_MACHINE ?= armv8a
-DPDK_TUNE ?= generic
-
-CPU_IMP_ARM = 0x41
-CPU_IMP_CAVIUM = 0x43
-
-CPU_PART_ARM_CORTEX_A53 = 0xd03
-CPU_PART_ARM_CORTEX_A57 = 0xd07
-CPU_PART_ARM_CORTEX_A72 = 0xd08
-CPU_PART_ARM_CORTEX_A73 = 0xd09
-
-CPU_PART_CAVIUM_THUNDERX = 0x0a1
-CPU_PART_CAVIUM_THUNDERX_81XX = 0x0a2
-CPU_PART_CAVIUM_THUNDERX_83XX = 0x0a3
-
-MIDR_IMPLEMENTER=$(shell awk '/implementer/ {print $$4;exit}' /proc/cpuinfo)
-MIDR_PARTNUM=$(shell awk '/part/ {print $$4;exit}' /proc/cpuinfo)
-
-ifeq ($(MIDR_IMPLEMENTER),$(CPU_IMP_ARM))
-##############################################################################
-# Arm Cortex
-##############################################################################
-CPU_PART_ARM_TUNE := $(CPU_PART_ARM_CORTEX_A53)/cortex-a53 \
- $(CPU_PART_ARM_CORTEX_A57)/cortex-a57 \
- $(CPU_PART_ARM_CORTEX_A72)/cortex-a72 \
- $(CPU_PART_ARM_CORTEX_A73)/cortex-a73
-CPU_TUNE = $(notdir $(filter $(MIDR_PARTNUM)/%,$(CPU_PART_ARM_TUNE)))
-ifneq ($(CPU_TUNE),)
-DPDK_TUNE = $(CPU_TUNE)
-else
-$(warning Unknown Arm CPU)
-endif
-
-else ifeq ($(MIDR_IMPLEMENTER),$(CPU_IMP_CAVIUM))
-##############################################################################
-# Cavium ThunderX
-##############################################################################
-ifneq (,$(findstring $(MIDR_PARTNUM),$(CPU_PART_CAVIUM_THUNDERX) \
- $(CPU_PART_CAVIUM_THUNDERX_81XX) $(CPU_PART_CAVIUM_THUNDERX_83XX)))
-DPDK_TARGET = arm64-thunderx-linuxapp-$(DPDK_CC)
-DPDK_MACHINE = thunderx
-DPDK_CACHE_LINE_SIZE := 128
-else
-$(warning Unknown Cavium CPU)
-endif
-endif
-
-##############################################################################
-# Unknown platform
-##############################################################################
-else
-$(error Unknown platform)
-endif
-
-# /proc/cpuinfo does not exist on platforms without a /proc and on some
-# platforms, notably inside containers, it has no content. In those cases
-# we assume there's 1 processor; we use 2*ncpu for the -j option.
-# NB: GNU Make 4.2 will let us use '$(file </proc/cpuinfo)' to both test
-# for file presence and content; for now this will have to do.
-JOBS := $(if $(shell [ -f /proc/cpuinfo ] && head /proc/cpuinfo),\
- $(shell grep -c ^processor /proc/cpuinfo), 2)
-
-# compiler/linker custom arguments
-ifeq ($(DPDK_CC),clang)
-DPDK_CPU_CFLAGS := -fPIE -fPIC
-else
-DPDK_CPU_CFLAGS := -pie -fPIC
-endif
-
-ifeq ($(DPDK_DEBUG),n)
-DPDK_EXTRA_CFLAGS := -g -mtune=$(DPDK_TUNE)
-else
-DPDK_EXTRA_CFLAGS := -g -O0
-endif
-
-# -Wimplicit-fallthrough was introduced starting from GCC 7,
-# and it requires newer version of ccache.
-# Disable fallthrough warning for old ccache version.
-ifeq ($(DPDK_CC),gcc)
-GCC_VER_V = "7.0.0"
-CCACHE_VER_V = "3.4.1"
-GCC_VER = $(shell gcc --version | grep ^gcc | sed 's/^.* //g')
-CCACHE_VER = $(shell ccache --version | grep ^ccache | sed 's/^.* //g')
-ifeq ($(shell expr "$(GCC_VER)" ">=" "$(GCC_VER_V)"),1)
-ifeq ($(shell expr "$(CCACHE_VER)" "<" "$(CCACHE_VER_V)"),1)
-DPDK_EXTRA_CFLAGS += -Wimplicit-fallthrough=0
-endif
-endif
-endif
-
-ifeq ($(AESNI),y)
-IPSEC_MB_BUILD_PATH := $(B)/intel-ipsec-mb-$(IPSEC_MB_VER)
-DPDK_EXTRA_CFLAGS += -L$(IPSEC_MB_BUILD_PATH) -I$(IPSEC_MB_BUILD_PATH)
-endif
-
-DPDK_MAKE_EXTRA_ARGS += AESNI_MULTI_BUFFER_LIB_PATH=$(AESNIMB_LIB_SOURCE)
-
-# assemble DPDK make arguments
-DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
- T=$(DPDK_TARGET) \
- RTE_CONFIG_TEMPLATE=../custom-config \
- EXTRA_CFLAGS="$(DPDK_EXTRA_CFLAGS)" \
- EXTRA_LDFLAGS="$(DPDK_EXTRA_LDFLAGS)" \
- CPU_CFLAGS="$(DPDK_CPU_CFLAGS)" \
- DESTDIR=$(I) \
- $(DPDK_MAKE_EXTRA_ARGS)
-
-define set
-@if grep -q CONFIG_$1 $@ ; \
- then sed -i -e 's/.*\(CONFIG_$1=\).*/\1$2/' $@ ; \
- else echo CONFIG_$1=$2 >> $@ ; \
-fi
-endef
-
-all: build
-
-$(B)/custom-config: $(B)/.patch.ok Makefile
- @echo --- generating custom config from $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) ---
- @cpp -undef -ffreestanding -x assembler-with-cpp $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) $@
- $(call set,RTE_MACHINE,$(DPDK_MACHINE))
- @# modify options
- $(call set,RTE_MAX_LCORE,256)
- $(call set,RTE_PKTMBUF_HEADROOM,$(DPDK_PKTMBUF_HEADROOM))
- $(call set,RTE_CACHE_LINE_SIZE,$(DPDK_CACHE_LINE_SIZE))
- $(call set,RTE_LIBEAL_USE_HPET,y)
- $(call set,RTE_BUILD_COMBINE_LIBS,y)
- $(call set,RTE_PCI_CONFIG,y)
- $(call set,RTE_PCI_EXTENDED_TAG,"on")
- $(call set,RTE_PCI_MAX_READ_REQUEST_SIZE,4096)
- @# enable debug init for device drivers
- $(call set,RTE_LIBRTE_I40E_DEBUG_INIT,$(DPDK_DEBUG))
- $(call set,RTE_LIBRTE_IXGBE_DEBUG_INIT,$(DPDK_DEBUG))
- $(call set,RTE_LIBRTE_E1000_DEBUG_INIT,$(DPDK_DEBUG))
- $(call set,RTE_LIBRTE_VIRTIO_DEBUG_INIT,$(DPDK_DEBUG))
- $(call set,RTE_LIBRTE_VMXNET3_DEBUG_INIT,$(DPDK_DEBUG))
- $(call set,RTE_LIBRTE_PMD_BOND,y)
- $(call set,RTE_LIBRTE_IP_FRAG,y)
- $(call set,RTE_LIBRTE_PMD_QAT,y)
- $(call set,RTE_LIBRTE_PMD_AESNI_MB,$(AESNI))
- $(call set,RTE_LIBRTE_PMD_AESNI_GCM,$(AESNI))
- $(call set,RTE_LIBRTE_MLX4_PMD,$(DPDK_MLX4_PMD))
- $(call set,RTE_LIBRTE_MLX5_PMD,$(DPDK_MLX5_PMD))
- $(call set,RTE_LIBRTE_PMD_SOFTNIC,n)
- $(call set,RTE_LIBRTE_MLX4_DLOPEN_DEPS,$(DPDK_MLX4_PMD))
- $(call set,RTE_LIBRTE_MLX5_DLOPEN_DEPS,$(DPDK_MLX5_PMD))
- $(call set,RTE_LIBRTE_PMD_TAP,$(DPDK_TAP_PMD))
- $(call set,RTE_LIBRTE_PMD_FAILSAFE,$(DPDK_FAILSAFE_PMD))
- @# not needed
- $(call set,RTE_LIBRTE_CFGFILE,n)
- $(call set,RTE_LIBRTE_LPM,n)
- $(call set,RTE_LIBRTE_ACL,n)
- $(call set,RTE_LIBRTE_POWER,n)
- $(call set,RTE_LIBRTE_DISTRIBUTOR,n)
- $(call set,RTE_LIBRTE_PORT,n)
- $(call set,RTE_LIBRTE_TABLE,n)
- $(call set,RTE_LIBRTE_PIPELINE,n)
- $(call set,RTE_LIBRTE_FLOW_CLASSIFY,n)
- $(call set,RTE_KNI_KMOD,n)
- $(call set,RTE_EAL_IGB_UIO,n)
- @# currently broken in 18.02
- $(call set,RTE_LIBRTE_DPAA_BUS,n)
- $(call set,RTE_LIBRTE_DPAA_MEMPOOL,n)
- $(call set,RTE_LIBRTE_DPAA_PMD,n)
- $(call set,RTE_LIBRTE_PMD_DPAA_SEC,n)
- $(call set,RTE_LIBRTE_PMD_DPAA_EVENTDEV,n)
- @rm -f .config.ok
-
-$(CURDIR)/$(DPDK_TARBALL):
- @if [ -e $(DPDK_DOWNLOAD_DIR)/$(DPDK_TARBALL) ] ; \
- then cp $(DPDK_DOWNLOAD_DIR)/$(DPDK_TARBALL) $(CURDIR) ; \
- else curl -o $(CURDIR)/$(DPDK_TARBALL) -LO $(DPDK_TAR_URL) ; \
- fi
- @rm -f $(B)/.download.ok
-
-$(CURDIR)/$(NASM_TARBALL):
- @if [ -e $(DPDK_DOWNLOAD_DIR)/$(NASM_TARBALL) ] ; \
- then cp $(DPDK_DOWNLOAD_DIR)/$(NASM_TARBALL) $(CURDIR) ; \
- else curl -o $(CURDIR)/$(NASM_TARBALL) -LO $(NASM_TAR_URL) ; \
- fi
-
-$(CURDIR)/$(AESNIMB_LIB_TARBALL):
- @if [ -e $(DPDK_DOWNLOAD_DIR)/$(AESNIMB_LIB_TARBALL) ] ; \
- then cp $(DPDK_DOWNLOAD_DIR)/$(AESNIMB_LIB_TARBALL) $(CURDIR) ; \
- else curl -o $@ -LO $(AESNIMB_LIB_TARBALL_URL) ; \
- fi
-
-DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL)
-ifeq ($(AESNI),y)
-DPDK_DOWNLOADS += $(CURDIR)/$(NASM_TARBALL)
-DPDK_DOWNLOADS += $(CURDIR)/$(AESNIMB_LIB_TARBALL)
-endif
-
-$(B)/.download.ok: $(DPDK_DOWNLOADS)
- @mkdir -p $(B)
- @openssl md5 $< | cut -f 2 -d " " - > $(B)/$(DPDK_TARBALL).md5sum
- @([ "$$(<$(B)/$(DPDK_TARBALL).md5sum)" = "$(DPDK_$(DPDK_VERSION)_TARBALL_MD5_CKSUM)" ] || \
- ( echo "Bad Checksum! Please remove $< and retry" && \
- rm $(B)/$(DPDK_TARBALL).md5sum && false ))
- @touch $@
-
-.PHONY: download
-download: $(B)/.download.ok
-
-$(B)/.extract.ok: $(B)/.download.ok
- @echo --- extracting $(DPDK_TARBALL) ---
- @tar --directory $(B) --extract --file $(CURDIR)/$(DPDK_TARBALL)
-ifeq ($(AESNI),y)
- @echo --- extracting $(NASM_TARBALL) ---
- @tar --directory $(B) --extract --file $(CURDIR)/$(NASM_TARBALL)
- @echo --- extracting $(AESNIMB_LIB_TARBALL) ---
- @tar --directory $(B) --extract --file $(CURDIR)/$(AESNIMB_LIB_TARBALL)
-endif
- @touch $@
-
-.PHONY: extract
-extract: $(B)/.extract.ok
-
-$(B)/.patch.ok: $(B)/.extract.ok
-ifneq ($(wildcard $(CURDIR)/dpdk-$(DPDK_VERSION)_patches/*.patch),)
- @echo --- patching ---
- @for f in $(CURDIR)/dpdk-$(DPDK_VERSION)_patches/*.patch ; do \
- echo Applying patch: $$(basename $$f) ; \
- patch -p1 -d $(DPDK_SOURCE) < $$f ; \
- done
-endif
- @touch $@
-
-.PHONY: patch
-patch: $(B)/.patch.ok
-
-$(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
- @make $(DPDK_MAKE_ARGS) config
- @touch $@
-
-.PHONY: config
-config: $(B)/.config.ok
-
-.PHONY: build-nasm
-build-nasm:
- cd $(NASM_SOURCE) && sh configure && make -j
-
-.PHONY: build-ipsec-mb
-build-ipsec-mb:
- mkdir -p $(I)/lib/
- # Do not build GCM stuff if we are building ISA_L
- make -C $(AESNIMB_LIB_SOURCE) -j SHARED=n \
- EXTRA_CFLAGS=-fPIC NASM=$(NASM_SOURCE)/nasm
- cp $(AESNIMB_LIB_SOURCE)/libIPSec_MB.a $(I)/lib/
-
-.PHONY: build-dpdk
-build-dpdk:
- @if [ ! -e $(B)/.config.ok ] ; then echo 'Please run "make config" first' && false ; fi
- @make $(DPDK_MAKE_ARGS) install
-
-# Order matters
-ifeq ($(AESNI),y)
-BUILD_TARGETS += build-nasm
-BUILD_TARGETS += build-ipsec-mb
-endif
-BUILD_TARGETS += build-dpdk
-
-$(B)/.build.ok: $(BUILD_TARGETS)
- @touch $@
-
-.PHONY: build
-build: $(B)/.build.ok
-
-.PHONY: install
-install: $(B)/.build.ok
-
-.PHONY: clean
-clean:
- @rm -rf $(B) $(I)
-
-##############################################################################
-# .deb packaging
-##############################################################################
-
-DEB_ARCH=$(shell dpkg --print-architecture 2> /dev/null)
-DEV_DEB=vpp-dpdk-dev_$(DPDK_VERSION)-$(PKG_SUFFIX)_$(DEB_ARCH).deb
-INSTALLED_DEB_VER=$(shell dpkg-query --showformat='$${Version}' --show vpp-dpdk-dev 2> /dev/null)
-
-.PHONY: build-deb install-deb check-deb
-
-deb/debian/changelog: Makefile
- @echo "vpp-dpdk ($(DPDK_VERSION)-$(PKG_SUFFIX)) unstable; urgency=low" > $@
- @echo "" >> $@
- @echo " * DPDK Release $(DPDK_VERSION)" >> $@
- @echo "" >> $@
- @echo " -- VPP Dev <vpp-dev@lists.fd.io> $(shell date -R)" >> $@
-
-$(DEV_DEB): deb/debian/changelog
- @cd deb && dpkg-buildpackage -b -uc -us
- git clean -fdx deb
-
-build-deb: $(DEV_DEB)
-
-install-deb:
-ifneq ($(INSTALLED_DEB_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
- @echo "=========================================================="
- @echo " Out of date DPDK package installed."
- @echo " Installed: $(INSTALLED_DEB_VER)"
- @echo " Needed: $(DPDK_VERSION)-$(PKG_SUFFIX)"
- @echo "=========================================================="
- @make $(DEV_DEB)
- @sudo dpkg -i $(DEV_DEB)
-else
- @echo "=========================================================="
- @echo " Up-to-date DPDK package already installed"
- @echo "=========================================================="
-endif
-
-check-deb:
-ifneq ($(INSTALLED_DEB_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
- @echo "=========================================================="
- @echo " Outdated DPDK package detected:"
- @echo " Installed: vpp-dpdk-dev $(INSTALLED_DEB_VER)"
- @echo " Current: vpp-dpdk-dev $(DPDK_VERSION)-$(PKG_SUFFIX)"
- @echo ""
- @echo " Please upgrade by invoking 'make dpdk-install-dev'"
- @echo " from the top level directory."
- @echo "=========================================================="
-endif
-
-##############################################################################
-# .rpm packaging
-##############################################################################
-
-RPM_ARCH=$(shell rpm --eval "%{_arch}" 2> /dev/null)
-DEV_RPM=vpp-dpdk-devel-$(DPDK_VERSION)-$(PKG_SUFFIX).$(RPM_ARCH).rpm
-INSTALLED_RPM_VER=$(shell rpm -q --queryformat '%{VERSION}-%{RELEASE}' vpp-dpdk-devel 2> /dev/null | grep -v "not inst")
-
-.PHONY: build-rpm install-rpm check-rpm
-
-$(DEV_RPM): Makefile rpm/vpp-dpdk.spec
- @rpmbuild -bb \
- --define "_topdir $(CURDIR)/rpm" \
- --define "_version $(DPDK_VERSION)" \
- --define "_release $(PKG_SUFFIX)" \
- $(CURDIR)/rpm/vpp-dpdk.spec
- mv rpm/RPMS/$(RPM_ARCH)/*.rpm .
- git clean -fdx rpm
-
-build-rpm: $(DEV_RPM)
-
-install-rpm:
-ifneq ($(INSTALLED_RPM_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
- @$(MAKE) $(DEV_RPM)
- sudo rpm -Uih $(DEV_RPM)
-else
- @echo "=========================================================="
- @echo " Up-to-date DPDK package already installed"
- @echo "=========================================================="
-endif
-
-check-rpm:
-ifneq ($(INSTALLED_RPM_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
- @echo "=========================================================="
- @echo " Outdated DPDK package detected:"
- @echo " Installed: vpp-dpdk-devel $(INSTALLED_RPM_VER)"
- @echo " Current: vpp-dpdk-devel $(DPDK_VERSION)-$(PKG_SUFFIX)"
- @echo ""
- @echo " Please upgrade by invoking 'make dpdk-install-dev'"
- @echo " from the top level directory."
- @echo "=========================================================="
-endif
-
-##############################################################################
-# ebuild support
-##############################################################################
-
-.PHONY: ebuild-build ebuild-install
-
-ebuild-build:
-ifeq ($(INSTALLED_DEB_VER)$(INSTALLED_RPM_VER),)
- @echo "=========================================================="
- @echo "Building DPDK from source. Consider installing development"
- @echo "package by invoking 'make dpdk-install-dev' from the"
- @echo "top level directory"
- @echo "=========================================================="
- make config
-else
-ifneq ($(INSTALLED_DEB_VER),)
- make check-deb
-endif
-ifneq ($(INSTALLED_RPM_VER),)
- make check-rpm
-endif
-endif
-
-ebuild-install:
-ifeq ($(INSTALLED_DEB_VER)$(INSTALLED_RPM_VER),)
- make install
-endif
diff --git a/dpdk/README b/dpdk/README
deleted file mode 100644
index 95154dc235f..00000000000
--- a/dpdk/README
+++ /dev/null
@@ -1,34 +0,0 @@
-
-Changes needed to DPDK are stored here as git patch files. Maintaining these
-files using “git format-patch” and “git am” will make it simpler to manage
-these changes. Patches made to DPDK should only be temporary until they are
-accepted upstream and made available in the next DPDK release.
-
-The following is the method used to generate these patches:
-
-1. Git clone the DPDK to a new directory:
- # git clone http://dpdk.org/git/dpdk dpdk
-
-2. Create a branch based on the DPDK release you wish to patch.
-Note, “git tag” will show you all the release tags. The following example is
-for DPDK release tag “v2.2.0” and will create a branch named “two_dot_two”.
- # cd dpdk
- # git checkout -b two_dot_two v2.2.0
-
-3. Apply all the existing VPP DPDK patches to this new branch.
- # git am <VPP directory>/dpdk/dpdk-2.2.0_patches/*
-
-4. Make your changes and commit your change to your DPDK repository.
- # <edit files>
- # git commit -s
-
-5. Create the patch files with format-patch. This creates all the patch files
-for your branch (two_dot_two), with your latest commits as the last ones.
- # git format-patch master..two_dot_two
-
-6. Copy, add and commit the new patches into the VPP patches directory.
- # cp <new patch files> <VPP directory>/dpdk/dpdk-2.2.0_patches
- # cd <VPP directory>
- # git add dpdk/dpdk-2.2.0_patches/<new patch files>
- # git commit -s
-
diff --git a/dpdk/deb/debian/compat b/dpdk/deb/debian/compat
deleted file mode 100755
index ec635144f60..00000000000
--- a/dpdk/deb/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-9
diff --git a/dpdk/deb/debian/control b/dpdk/deb/debian/control
deleted file mode 100644
index 9ffa1a0a25d..00000000000
--- a/dpdk/deb/debian/control
+++ /dev/null
@@ -1,18 +0,0 @@
-Source: vpp-dpdk
-Section: net
-Priority: extra
-Maintainer: vpp-dev@lists.fd.io
-Build-Depends: debhelper (>= 9), dkms
-Standards-Version: 3.9.4
-
-Package: vpp-dpdk-dev
-Architecture: any
-Depends: ${shlibs:Depends}
-Description: DPDK Development Package for VPP
-Conflicts: dpdk, dpdk-dev, libdpdk-dev
-
-Package: vpp-dpdk-dkms
-Architecture: any
-Depends: ${misc:Depends}
-Description: DPDK Development Package for VPP - Kernel Modules
-Conflicts: dpdk-igb-uio-dkms
diff --git a/dpdk/deb/debian/dkms/Makefile b/dpdk/deb/debian/dkms/Makefile
deleted file mode 100644
index 452c7c265e9..00000000000
--- a/dpdk/deb/debian/dkms/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-obj-m:=igb_uio.o
-
-CONFIG_MODULE_SIG=n
-
-EXTRA_CFLAGS += -Winline -I$(PWD)
-
-default:
- $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
-clean:
- $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
diff --git a/dpdk/deb/debian/rules b/dpdk/deb/debian/rules
deleted file mode 100755
index 7ef6ba1518e..00000000000
--- a/dpdk/deb/debian/rules
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/make -f
-DH_VERBOSE = 1
-PKG=vpp-dpdk
-
-VERSION = $(shell dpkg-parsechangelog | sed -nr '/^Version:/s/Version: //p')
-BASE_VER = $(word 1, $(subst -, ,$(VERSION)))
-
-export DPDK_BUILD_DIR=$(CURDIR)/_build
-export DPDK_INSTALL_DIR=$(CURDIR)/debian/tmp/usr
-
-SRC=$(wildcard _build/dpdk*$(BASE_VER))
-
-MAKE_ARGS=-C ..
-
-include /usr/share/dpkg/default.mk
-
-%:
- dh $@ --with dkms
-
-override_dh_clean:
- make $(MAKE_ARGS) clean
-
-override_dh_auto_configure:
- make $(MAKE_ARGS) config
-
-override_dh_install:
- make $(MAKE_ARGS) install
- dh_install -p$(PKG)-dkms \
- $(SRC)/lib/librte_eal/common/include/rte_pci_dev_feature_defs.h \
- $(SRC)/lib/librte_eal/common/include/rte_pci_dev_features.h \
- $(wildcard $(SRC)/*/*/*/igb_uio/igb_uio.c) \
- $(wildcard $(SRC)/*/*/*/igb_uio/compat.h) \
- $(wildcard $(SRC)/*/*/igb_uio/igb_uio.c) \
- $(wildcard $(SRC)/*/*/igb_uio/compat.h) \
- debian/dkms/Makefile \
- /usr/src/$(PKG)-dkms-$(VERSION)
- dh_install -p$(PKG)-dev --autodest /usr
-
-override_dh_dkms:
- dh_dkms -p$(PKG)-dkms -V $(VERSION)
diff --git a/dpdk/deb/debian/vpp-dpdk-dkms.dkms b/dpdk/deb/debian/vpp-dpdk-dkms.dkms
deleted file mode 100644
index a166c313861..00000000000
--- a/dpdk/deb/debian/vpp-dpdk-dkms.dkms
+++ /dev/null
@@ -1,8 +0,0 @@
-PACKAGE_VERSION=#MODULE_VERSION#
-PACKAGE_NAME="vpp-dpdk-dkms"
-CLEAN="make clean"
-BUILT_MODULE_NAME[0]="igb_uio"
-BUILT_MODULE_LOCATION[0]="./"
-DEST_MODULE_LOCATION[0]="/kernel/net"
-MAKE[1]="make"
-AUTOINSTALL="yes"
diff --git a/dpdk/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch b/dpdk/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch
deleted file mode 100644
index fb71e94c7ba..00000000000
--- a/dpdk/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
-index e7e9256e5..2fb0a072c 100644
---- a/drivers/net/ixgbe/base/ixgbe_common.c
-+++ b/drivers/net/ixgbe/base/ixgbe_common.c
-@@ -5296,7 +5296,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
- * Section 73.10.2, we may have to wait up to 500ms if KR is
- * attempted. 82599 uses the same timing for 10g SFI.
- */
-- for (i = 0; i < 5; i++) {
-+ for (i = 0; i < 10; i++) {
- /* Wait for the link partner to also set speed */
- msec_delay(100);
-
diff --git a/dpdk/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch b/dpdk/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch
deleted file mode 100644
index 32d2c783cde..00000000000
--- a/dpdk/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From b01857dfdb4e46b8c7d306c608c58ebbabc252ec Mon Sep 17 00:00:00 2001
-From: Lee Roberts <lee.roberts@hpe.com>
-Date: Fri, 9 Mar 2018 10:49:34 -0700
-Subject: [PATCH] assign QAT cryptodev to correct NUMA node
-
-rte_cryptodev_pmd_init_params should use NUMA node of the QAT device
-for its socket_id rather than the socket_id of the initializing process.
-
-Signed-off-by: Lee Roberts <lee.roberts@hpe.com>
----
- drivers/crypto/qat/rte_qat_cryptodev.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c b/drivers/crypto/qat/rte_qat_cryptodev.c
-index bf83740..82641aa 100644
---- a/drivers/crypto/qat/rte_qat_cryptodev.c
-+++ b/drivers/crypto/qat/rte_qat_cryptodev.c
-@@ -130,7 +130,7 @@ static int crypto_qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
- {
- struct rte_cryptodev_pmd_init_params init_params = {
- .name = "",
-- .socket_id = rte_socket_id(),
-+ .socket_id = pci_dev->device.numa_node,
- .private_data_size = sizeof(struct qat_pmd_private),
- .max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS
- };
---
-1.9.1
-
diff --git a/dpdk/dpdk-18.05_patches/0001-i40evf-don-t-reset-device_info-data.patch b/dpdk/dpdk-18.05_patches/0001-i40evf-don-t-reset-device_info-data.patch
deleted file mode 100644
index b737461a99b..00000000000
--- a/dpdk/dpdk-18.05_patches/0001-i40evf-don-t-reset-device_info-data.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 65a8641604212d58defd71491c900d84d662a086 Mon Sep 17 00:00:00 2001
-From: Damjan Marion <damarion@cisco.com>
-Date: Wed, 6 Jun 2018 21:57:58 +0200
-Subject: [PATCH] i40evf: don't reset device_info data
-
-At this point valid data is already set by rte_eth_get_device_info.
-device field becomes zero and consumer is not able retrieve pci data.
-
-Signed-off-by: Damjan Marion <damarion@cisco.com>
----
- drivers/net/i40e/i40e_ethdev_vf.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
-index 804e44530..86b38d202 100644
---- a/drivers/net/i40e/i40e_ethdev_vf.c
-+++ b/drivers/net/i40e/i40e_ethdev_vf.c
-@@ -2182,7 +2182,6 @@ i40evf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
- {
- struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
-
-- memset(dev_info, 0, sizeof(*dev_info));
- dev_info->max_rx_queues = vf->vsi_res->num_queue_pairs;
- dev_info->max_tx_queues = vf->vsi_res->num_queue_pairs;
- dev_info->min_rx_bufsize = I40E_BUF_SIZE_MIN;
---
-2.17.1
-
diff --git a/dpdk/dpdk-18.05_patches/0002-ixgbe-link-wait-longer.patch b/dpdk/dpdk-18.05_patches/0002-ixgbe-link-wait-longer.patch
deleted file mode 100644
index fb71e94c7ba..00000000000
--- a/dpdk/dpdk-18.05_patches/0002-ixgbe-link-wait-longer.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
-index e7e9256e5..2fb0a072c 100644
---- a/drivers/net/ixgbe/base/ixgbe_common.c
-+++ b/drivers/net/ixgbe/base/ixgbe_common.c
-@@ -5296,7 +5296,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
- * Section 73.10.2, we may have to wait up to 500ms if KR is
- * attempted. 82599 uses the same timing for 10g SFI.
- */
-- for (i = 0; i < 5; i++) {
-+ for (i = 0; i < 10; i++) {
- /* Wait for the link partner to also set speed */
- msec_delay(100);
-
diff --git a/dpdk/dpdk-18.08_patches/0001-net-mlx5-support-externally-allocated-mempool.patch b/dpdk/dpdk-18.08_patches/0001-net-mlx5-support-externally-allocated-mempool.patch
deleted file mode 100644
index 87c9cf92469..00000000000
--- a/dpdk/dpdk-18.08_patches/0001-net-mlx5-support-externally-allocated-mempool.patch
+++ /dev/null
@@ -1,270 +0,0 @@
-From bd42c77c457146bede32333558b4e0414b30683e Mon Sep 17 00:00:00 2001
-From: Yongseok Koh <yskoh@mellanox.com>
-Date: Fri, 24 Aug 2018 16:46:49 -0700
-Subject: [PATCH] net/mlx5: support externally allocated mempool
-
-When MLX PMD registers memory for DMA, it accesses the global memseg list
-of DPDK to maximize the range of registration so that LKey search can be
-more efficient. Granularity of MR registration is per page.
-
-Externally allocated memory shouldn't be used for DMA because it can't be
-searched in the memseg list and free event can't be tracked by DPDK.
-However, if the external memory is static (allocated on startup and never
-freed), such memory can also be registered by little tweak in the code.
-
-Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
----
- drivers/net/mlx5/mlx5_mr.c | 155 +++++++++++++++++++++++++++++++++++++++++++
- drivers/net/mlx5/mlx5_rxtx.h | 35 +++++++++-
- 2 files changed, 189 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c
-index 08105a443..876622e91 100644
---- a/drivers/net/mlx5/mlx5_mr.c
-+++ b/drivers/net/mlx5/mlx5_mr.c
-@@ -277,6 +277,23 @@ mr_find_next_chunk(struct mlx5_mr *mr, struct mlx5_mr_cache *entry,
- uintptr_t end = 0;
- uint32_t idx = 0;
-
-+ /* MR for external memory doesn't have memseg list. */
-+ if (mr->msl == NULL) {
-+ struct ibv_mr *ibv_mr = mr->ibv_mr;
-+
-+ assert(mr->ms_bmp_n == 1);
-+ assert(mr->ms_n == 1);
-+ assert(base_idx == 0);
-+ /*
-+ * Can't search it from memseg list but get it directly from
-+ * verbs MR as there's only one chunk.
-+ */
-+ entry->start = (uintptr_t)ibv_mr->addr;
-+ entry->end = (uintptr_t)ibv_mr->addr + mr->ibv_mr->length;
-+ entry->lkey = rte_cpu_to_be_32(mr->ibv_mr->lkey);
-+ /* Returning 1 ends iteration. */
-+ return 1;
-+ }
- for (idx = base_idx; idx < mr->ms_bmp_n; ++idx) {
- if (rte_bitmap_get(mr->ms_bmp, idx)) {
- const struct rte_memseg_list *msl;
-@@ -818,6 +835,7 @@ mlx5_mr_mem_event_free_cb(struct rte_eth_dev *dev, const void *addr, size_t len)
- mr = mr_lookup_dev_list(dev, &entry, start);
- if (mr == NULL)
- continue;
-+ assert(mr->msl); /* Can't be external memory. */
- ms = rte_mem_virt2memseg((void *)start, msl);
- assert(ms != NULL);
- assert(msl->page_sz == ms->hugepage_sz);
-@@ -1070,6 +1088,139 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl)
- (void *)mr_ctrl, mr_ctrl->cur_gen);
- }
-
-+/**
-+ * Called during rte_mempool_mem_iter() by mlx5_mr_update_ext_mp().
-+ *
-+ * Externally allocated chunk is registered and a MR is created for the chunk.
-+ * The MR object is added to the global list. If memseg list of a MR object
-+ * (mr->msl) is null, the MR object can be regarded as externally allocated
-+ * memory.
-+ *
-+ * Once external memory is registered, it should be static. If the memory is
-+ * freed and the virtual address range has different physical memory mapped
-+ * again, it may cause crash on device due to the wrong translation entry. PMD
-+ * can't track the free event of the external memory for now.
-+ */
-+static void
-+mlx5_mr_update_ext_mp_cb(struct rte_mempool *mp, void *opaque,
-+ struct rte_mempool_memhdr *memhdr,
-+ unsigned mem_idx __rte_unused)
-+{
-+ struct mr_update_mp_data *data = opaque;
-+ struct rte_eth_dev *dev = data->dev;
-+ struct priv *priv = dev->data->dev_private;
-+ struct mlx5_mr_ctrl *mr_ctrl = data->mr_ctrl;
-+ struct mlx5_mr *mr = NULL;
-+ uintptr_t addr = (uintptr_t)memhdr->addr;
-+ size_t len = memhdr->len;
-+ struct mlx5_mr_cache entry;
-+ uint32_t lkey;
-+
-+ /* If already registered, it should return. */
-+ rte_rwlock_read_lock(&priv->mr.rwlock);
-+ lkey = mr_lookup_dev(dev, &entry, addr);
-+ rte_rwlock_read_unlock(&priv->mr.rwlock);
-+ if (lkey != UINT32_MAX)
-+ return;
-+ mr = rte_zmalloc_socket(NULL,
-+ RTE_ALIGN_CEIL(sizeof(*mr),
-+ RTE_CACHE_LINE_SIZE),
-+ RTE_CACHE_LINE_SIZE, mp->socket_id);
-+ if (mr == NULL) {
-+ DRV_LOG(WARNING,
-+ "port %u unable to allocate memory for a new MR of"
-+ " mempool (%s).",
-+ dev->data->port_id, mp->name);
-+ data->ret = -1;
-+ return;
-+ }
-+ DRV_LOG(DEBUG, "port %u register MR for chunk #%d of mempool (%s)",
-+ dev->data->port_id, mem_idx, mp->name);
-+ mr->ibv_mr = mlx5_glue->reg_mr(priv->pd, (void *)addr, len,
-+ IBV_ACCESS_LOCAL_WRITE);
-+ if (mr->ibv_mr == NULL) {
-+ DRV_LOG(WARNING,
-+ "port %u fail to create a verbs MR for address (%p)",
-+ dev->data->port_id, (void *)addr);
-+ rte_free(mr);
-+ data->ret = -1;
-+ return;
-+ }
-+ mr->msl = NULL; /* Mark it is external memory. */
-+ mr->ms_bmp = NULL;
-+ mr->ms_n = 1;
-+ mr->ms_bmp_n = 1;
-+ rte_rwlock_write_lock(&priv->mr.rwlock);
-+ LIST_INSERT_HEAD(&priv->mr.mr_list, mr, mr);
-+ DRV_LOG(DEBUG,
-+ "port %u MR CREATED (%p) for external memory %p:\n"
-+ " [0x%" PRIxPTR ", 0x%" PRIxPTR "),"
-+ " lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u",
-+ dev->data->port_id, (void *)mr, (void *)addr,
-+ addr, addr + len, rte_cpu_to_be_32(mr->ibv_mr->lkey),
-+ mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n);
-+ /* Insert to the global cache table. */
-+ mr_insert_dev_cache(dev, mr);
-+ rte_rwlock_write_unlock(&priv->mr.rwlock);
-+ /* Insert to the local cache table */
-+ mlx5_mr_addr2mr_bh(dev, mr_ctrl, addr);
-+}
-+
-+/**
-+ * Register MR for entire memory chunks in a Mempool having externally allocated
-+ * memory and fill in local cache.
-+ *
-+ * @param dev
-+ * Pointer to Ethernet device.
-+ * @param mr_ctrl
-+ * Pointer to per-queue MR control structure.
-+ * @param mp
-+ * Pointer to registering Mempool.
-+ *
-+ * @return
-+ * 0 on success, -1 on failure.
-+ */
-+static uint32_t
-+mlx5_mr_update_ext_mp(struct rte_eth_dev *dev, struct mlx5_mr_ctrl *mr_ctrl,
-+ struct rte_mempool *mp)
-+{
-+ struct mr_update_mp_data data = {
-+ .dev = dev,
-+ .mr_ctrl = mr_ctrl,
-+ .ret = 0,
-+ };
-+
-+ rte_mempool_mem_iter(mp, mlx5_mr_update_ext_mp_cb, &data);
-+ return data.ret;
-+}
-+
-+/**
-+ * Register MR entire memory chunks in a Mempool having externally allocated
-+ * memory and search LKey of the address to return.
-+ *
-+ * @param dev
-+ * Pointer to Ethernet device.
-+ * @param addr
-+ * Search key.
-+ * @param mp
-+ * Pointer to registering Mempool where addr belongs.
-+ *
-+ * @return
-+ * LKey for address on success, UINT32_MAX on failure.
-+ */
-+uint32_t
-+mlx5_tx_update_ext_mp(struct mlx5_txq_data *txq, uintptr_t addr,
-+ struct rte_mempool *mp)
-+{
-+ struct mlx5_txq_ctrl *txq_ctrl =
-+ container_of(txq, struct mlx5_txq_ctrl, txq);
-+ struct mlx5_mr_ctrl *mr_ctrl = &txq->mr_ctrl;
-+ struct priv *priv = txq_ctrl->priv;
-+
-+ mlx5_mr_update_ext_mp(ETH_DEV(priv), mr_ctrl, mp);
-+ return mlx5_tx_addr2mr_bh(txq, addr);
-+}
-+
- /* Called during rte_mempool_mem_iter() by mlx5_mr_update_mp(). */
- static void
- mlx5_mr_update_mp_cb(struct rte_mempool *mp __rte_unused, void *opaque,
-@@ -1113,6 +1264,10 @@ mlx5_mr_update_mp(struct rte_eth_dev *dev, struct mlx5_mr_ctrl *mr_ctrl,
- };
-
- rte_mempool_mem_iter(mp, mlx5_mr_update_mp_cb, &data);
-+ if (data.ret < 0 && rte_errno == ENXIO) {
-+ /* Mempool may have externally allocated memory. */
-+ return mlx5_mr_update_ext_mp(dev, mr_ctrl, mp);
-+ }
- return data.ret;
- }
-
-diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h
-index f53bb43c3..b61c23b33 100644
---- a/drivers/net/mlx5/mlx5_rxtx.h
-+++ b/drivers/net/mlx5/mlx5_rxtx.h
-@@ -347,6 +347,8 @@ uint16_t mlx5_rx_burst_vec(void *dpdk_txq, struct rte_mbuf **pkts,
- void mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl);
- uint32_t mlx5_rx_addr2mr_bh(struct mlx5_rxq_data *rxq, uintptr_t addr);
- uint32_t mlx5_tx_addr2mr_bh(struct mlx5_txq_data *txq, uintptr_t addr);
-+uint32_t mlx5_tx_update_ext_mp(struct mlx5_txq_data *txq, uintptr_t addr,
-+ struct rte_mempool *mp);
-
- #ifndef NDEBUG
- /**
-@@ -534,6 +536,24 @@ mlx5_tx_complete(struct mlx5_txq_data *txq)
- }
-
- /**
-+ * Get Memory Pool (MP) from mbuf. If mbuf is indirect, the pool from which the
-+ * cloned mbuf is allocated is returned instead.
-+ *
-+ * @param buf
-+ * Pointer to mbuf.
-+ *
-+ * @return
-+ * Memory pool where data is located for given mbuf.
-+ */
-+static struct rte_mempool *
-+mlx5_mb2mp(struct rte_mbuf *buf)
-+{
-+ if (unlikely(RTE_MBUF_INDIRECT(buf)))
-+ return rte_mbuf_from_indirect(buf)->pool;
-+ return buf->pool;
-+}
-+
-+/**
- * Query LKey from a packet buffer for Rx. No need to flush local caches for Rx
- * as mempool is pre-configured and static.
- *
-@@ -591,7 +611,20 @@ mlx5_tx_addr2mr(struct mlx5_txq_data *txq, uintptr_t addr)
- return mlx5_tx_addr2mr_bh(txq, addr);
- }
-
--#define mlx5_tx_mb2mr(rxq, mb) mlx5_tx_addr2mr(rxq, (uintptr_t)((mb)->buf_addr))
-+static __rte_always_inline uint32_t
-+mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb)
-+{
-+ uintptr_t addr = (uintptr_t)mb->buf_addr;
-+ uint32_t lkey = mlx5_tx_addr2mr(txq, addr);
-+
-+ if (likely(lkey != UINT32_MAX))
-+ return lkey;
-+ if (rte_errno == ENXIO) {
-+ /* Mempool may have externally allocated memory. */
-+ lkey = mlx5_tx_update_ext_mp(txq, addr, mlx5_mb2mp(mb));
-+ }
-+ return lkey;
-+}
-
- /**
- * Ring TX queue doorbell and flush the update if requested.
---
-2.11.0
-
diff --git a/dpdk/dpdk-18.08_patches/0002-mlx4-support-externally-allocated-mempool.patch b/dpdk/dpdk-18.08_patches/0002-mlx4-support-externally-allocated-mempool.patch
deleted file mode 100644
index b32862335e5..00000000000
--- a/dpdk/dpdk-18.08_patches/0002-mlx4-support-externally-allocated-mempool.patch
+++ /dev/null
@@ -1,250 +0,0 @@
-From c947fd2ec67e9bbacb8b106f320f6e6bae5a9731 Mon Sep 17 00:00:00 2001
-From: Matthew Smith <mgsmith@netgate.com>
-Date: Tue, 28 Aug 2018 13:21:04 -0500
-Subject: [PATCH] mlx4: support externally allocated mempool
-
-Port Mellanox mlx5 PMD patch to work for mlx4 PMD.
-
-Signed-off-by: Matthew Smith <mgsmith@netgate.com>
----
- drivers/net/mlx4/mlx4_mr.c | 150 +++++++++++++++++++++++++++++++++++++++++++
- drivers/net/mlx4/mlx4_rxtx.h | 35 +++++++++-
- 2 files changed, 184 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/mlx4/mlx4_mr.c b/drivers/net/mlx4/mlx4_mr.c
-index d23d3c613..55e5555ce 100644
---- a/drivers/net/mlx4/mlx4_mr.c
-+++ b/drivers/net/mlx4/mlx4_mr.c
-@@ -289,6 +289,23 @@ mr_find_next_chunk(struct mlx4_mr *mr, struct mlx4_mr_cache *entry,
- uintptr_t end = 0;
- uint32_t idx = 0;
-
-+ /* MR for external memory doesn't have memseg list. */
-+ if (mr->msl == NULL) {
-+ struct ibv_mr *ibv_mr = mr->ibv_mr;
-+
-+ assert(mr->ms_bmp_n == 1);
-+ assert(mr->ms_n == 1);
-+ assert(base_idx == 0);
-+ /*
-+ * Can't search it from memseg list but get it directly from
-+ * verbs MR as there's only one chunk.
-+ */
-+ entry->start = (uintptr_t)ibv_mr->addr;
-+ entry->end = (uintptr_t)ibv_mr->addr + mr->ibv_mr->length;
-+ entry->lkey = rte_cpu_to_be_32(mr->ibv_mr->lkey);
-+ /* Returning 1 ends iteration. */
-+ return 1;
-+ }
- for (idx = base_idx; idx < mr->ms_bmp_n; ++idx) {
- if (rte_bitmap_get(mr->ms_bmp, idx)) {
- const struct rte_memseg_list *msl;
-@@ -809,6 +826,7 @@ mlx4_mr_mem_event_free_cb(struct rte_eth_dev *dev, const void *addr, size_t len)
- mr = mr_lookup_dev_list(dev, &entry, start);
- if (mr == NULL)
- continue;
-+ assert(mr->msl); /* Can't be external memory. */
- ms = rte_mem_virt2memseg((void *)start, msl);
- assert(ms != NULL);
- assert(msl->page_sz == ms->hugepage_sz);
-@@ -1055,6 +1073,134 @@ mlx4_mr_flush_local_cache(struct mlx4_mr_ctrl *mr_ctrl)
- (void *)mr_ctrl, mr_ctrl->cur_gen);
- }
-
-+/**
-+ * Called during rte_mempool_mem_iter() by mlx4_mr_update_ext_mp().
-+ *
-+ * Externally allocated chunk is registered and a MR is created for the chunk.
-+ * The MR object is added to the global list. If memseg list of a MR object
-+ * (mr->msl) is null, the MR object can be regarded as externally allocated
-+ * memory.
-+ *
-+ * Once external memory is registered, it should be static. If the memory is
-+ * freed and the virtual address range has different physical memory mapped
-+ * again, it may cause crash on device due to the wrong translation entry. PMD
-+ * can't track the free event of the external memory for now.
-+ */
-+static void
-+mlx4_mr_update_ext_mp_cb(struct rte_mempool *mp, void *opaque,
-+ struct rte_mempool_memhdr *memhdr,
-+ unsigned mem_idx __rte_unused)
-+{
-+ struct mr_update_mp_data *data = opaque;
-+ struct rte_eth_dev *dev = data->dev;
-+ struct priv *priv = dev->data->dev_private;
-+ struct mlx4_mr_ctrl *mr_ctrl = data->mr_ctrl;
-+ struct mlx4_mr *mr = NULL;
-+ uintptr_t addr = (uintptr_t)memhdr->addr;
-+ size_t len = memhdr->len;
-+ struct mlx4_mr_cache entry;
-+ uint32_t lkey;
-+
-+ /* If already registered, it should return. */
-+ rte_rwlock_read_lock(&priv->mr.rwlock);
-+ lkey = mr_lookup_dev(dev, &entry, addr);
-+ rte_rwlock_read_unlock(&priv->mr.rwlock);
-+ if (lkey != UINT32_MAX)
-+ return;
-+ mr = rte_zmalloc_socket(NULL,
-+ RTE_ALIGN_CEIL(sizeof(*mr),
-+ RTE_CACHE_LINE_SIZE),
-+ RTE_CACHE_LINE_SIZE, mp->socket_id);
-+ if (mr == NULL) {
-+ WARN("port %u unable to allocate memory for a new MR of"
-+ " mempool (%s).",
-+ dev->data->port_id, mp->name);
-+ data->ret = -1;
-+ return;
-+ }
-+ DEBUG("port %u register MR for chunk #%d of mempool (%s)",
-+ dev->data->port_id, mem_idx, mp->name);
-+ mr->ibv_mr = mlx4_glue->reg_mr(priv->pd, (void *)addr, len,
-+ IBV_ACCESS_LOCAL_WRITE);
-+ if (mr->ibv_mr == NULL) {
-+ WARN("port %u fail to create a verbs MR for address (%p)",
-+ dev->data->port_id, (void *)addr);
-+ rte_free(mr);
-+ data->ret = -1;
-+ return;
-+ }
-+ mr->msl = NULL; /* Mark it is external memory. */
-+ mr->ms_bmp = NULL;
-+ mr->ms_n = 1;
-+ mr->ms_bmp_n = 1;
-+ rte_rwlock_write_lock(&priv->mr.rwlock);
-+ LIST_INSERT_HEAD(&priv->mr.mr_list, mr, mr);
-+ DEBUG("port %u MR CREATED (%p) for external memory %p:\n"
-+ " [0x%" PRIxPTR ", 0x%" PRIxPTR "),"
-+ " lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u",
-+ dev->data->port_id, (void *)mr, (void *)addr,
-+ addr, addr + len, rte_cpu_to_be_32(mr->ibv_mr->lkey),
-+ mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n);
-+ /* Insert to the global cache table. */
-+ mr_insert_dev_cache(dev, mr);
-+ rte_rwlock_write_unlock(&priv->mr.rwlock);
-+ /* Insert to the local cache table */
-+ mlx4_mr_addr2mr_bh(dev, mr_ctrl, addr);
-+}
-+
-+/**
-+ * Register MR for entire memory chunks in a Mempool having externally allocated
-+ * memory and fill in local cache.
-+ *
-+ * @param dev
-+ * Pointer to Ethernet device.
-+ * @param mr_ctrl
-+ * Pointer to per-queue MR control structure.
-+ * @param mp
-+ * Pointer to registering Mempool.
-+ *
-+ * @return
-+ * 0 on success, -1 on failure.
-+ */
-+static uint32_t
-+mlx4_mr_update_ext_mp(struct rte_eth_dev *dev, struct mlx4_mr_ctrl *mr_ctrl,
-+ struct rte_mempool *mp)
-+{
-+ struct mr_update_mp_data data = {
-+ .dev = dev,
-+ .mr_ctrl = mr_ctrl,
-+ .ret = 0,
-+ };
-+
-+ rte_mempool_mem_iter(mp, mlx4_mr_update_ext_mp_cb, &data);
-+ return data.ret;
-+}
-+
-+/**
-+ * Register MR entire memory chunks in a Mempool having externally allocated
-+ * memory and search LKey of the address to return.
-+ *
-+ * @param dev
-+ * Pointer to Ethernet device.
-+ * @param addr
-+ * Search key.
-+ * @param mp
-+ * Pointer to registering Mempool where addr belongs.
-+ *
-+ * @return
-+ * LKey for address on success, UINT32_MAX on failure.
-+ */
-+uint32_t
-+mlx4_tx_update_ext_mp(struct txq *txq, uintptr_t addr,
-+ struct rte_mempool *mp)
-+{
-+ struct mlx4_mr_ctrl *mr_ctrl = &txq->mr_ctrl;
-+ struct priv *priv = txq->priv;
-+
-+ mlx4_mr_update_ext_mp(priv->dev, mr_ctrl, mp);
-+ return mlx4_tx_addr2mr_bh(txq, addr);
-+}
-+
- /* Called during rte_mempool_mem_iter() by mlx4_mr_update_mp(). */
- static void
- mlx4_mr_update_mp_cb(struct rte_mempool *mp __rte_unused, void *opaque,
-@@ -1098,6 +1244,10 @@ mlx4_mr_update_mp(struct rte_eth_dev *dev, struct mlx4_mr_ctrl *mr_ctrl,
- };
-
- rte_mempool_mem_iter(mp, mlx4_mr_update_mp_cb, &data);
-+ if (data.ret < 0 && rte_errno == ENXIO) {
-+ /* Mempool may have externally allocated memory. */
-+ return mlx4_mr_update_ext_mp(dev, mr_ctrl, mp);
-+ }
- return data.ret;
- }
-
-diff --git a/drivers/net/mlx4/mlx4_rxtx.h b/drivers/net/mlx4/mlx4_rxtx.h
-index ffa8abfca..1be060cda 100644
---- a/drivers/net/mlx4/mlx4_rxtx.h
-+++ b/drivers/net/mlx4/mlx4_rxtx.h
-@@ -163,6 +163,26 @@ void mlx4_tx_queue_release(void *dpdk_txq);
- void mlx4_mr_flush_local_cache(struct mlx4_mr_ctrl *mr_ctrl);
- uint32_t mlx4_rx_addr2mr_bh(struct rxq *rxq, uintptr_t addr);
- uint32_t mlx4_tx_addr2mr_bh(struct txq *txq, uintptr_t addr);
-+uint32_t mlx4_tx_update_ext_mp(struct txq *txq, uintptr_t addr,
-+ struct rte_mempool *mp);
-+
-+/**
-+ * Get Memory Pool (MP) from mbuf. If mbuf is indirect, the pool from which the
-+ * cloned mbuf is allocated is returned instead.
-+ *
-+ * @param buf
-+ * Pointer to mbuf.
-+ *
-+ * @return
-+ * Memory pool where data is located for given mbuf.
-+ */
-+static struct rte_mempool *
-+mlx4_mb2mp(struct rte_mbuf *buf)
-+{
-+ if (unlikely(RTE_MBUF_INDIRECT(buf)))
-+ return rte_mbuf_from_indirect(buf)->pool;
-+ return buf->pool;
-+}
-
- /**
- * Query LKey from a packet buffer for Rx. No need to flush local caches for Rx
-@@ -222,6 +242,19 @@ mlx4_tx_addr2mr(struct txq *txq, uintptr_t addr)
- return mlx4_tx_addr2mr_bh(txq, addr);
- }
-
--#define mlx4_tx_mb2mr(rxq, mb) mlx4_tx_addr2mr(rxq, (uintptr_t)((mb)->buf_addr))
-+static __rte_always_inline uint32_t
-+mlx4_tx_mb2mr(struct txq *txq, struct rte_mbuf *mb)
-+{
-+ uintptr_t addr = (uintptr_t)mb->buf_addr;
-+ uint32_t lkey = mlx4_tx_addr2mr(txq, addr);
-+
-+ if (likely(lkey != UINT32_MAX))
-+ return lkey;
-+ if (rte_errno == ENXIO) {
-+ /* Mempool may have externally allocated memory. */
-+ lkey = mlx4_tx_update_ext_mp(txq, addr, mlx4_mb2mp(mb));
-+ }
-+ return lkey;
-+}
-
- #endif /* MLX4_RXTX_H_ */
---
-2.15.2 (Apple Git-101.1)
-
diff --git a/dpdk/dpdk-18.08_patches/0003-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch b/dpdk/dpdk-18.08_patches/0003-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch
deleted file mode 100644
index 93d1601c677..00000000000
--- a/dpdk/dpdk-18.08_patches/0003-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From ba9b381c532fe57c726752b7db0ab45ab7726c90 Mon Sep 17 00:00:00 2001
-From: Matthew Smith <mgsmith@netgate.com>
-Date: Fri, 13 Jul 2018 16:35:57 -0500
-Subject: [PATCH] ixgbe: wait longer for link after fiber MAC setup
-
-After setting up the link on a fiber port, the maximum wait time for
-the link to come up is 500 ms in ixgbe_setup_mac_link_multispeed_fiber().
-On an x550 SFP+ port, this is often not sufficiently long for the link
-to come up. This can result in never being able to retrieve accurate
-link status for the port using rte_eth_link_get_nowait().
-
-Increase the maximum wait time in ixgbe_setup_mac_link_multispeed_fiber()
-to 1 s.
-
-Bugzilla ID: 69
-Fixes: f3430431abaf ("ixgbe/base: add SFP+ dual-speed support")
-Cc: stable@dpdk.org
-
-Signed-off-by: Matthew Smith <mgsmith@netgate.com>
----
- drivers/net/ixgbe/base/ixgbe_common.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
-index e7e9256e5..2fb0a072c 100644
---- a/drivers/net/ixgbe/base/ixgbe_common.c
-+++ b/drivers/net/ixgbe/base/ixgbe_common.c
-@@ -5296,7 +5296,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
- * Section 73.10.2, we may have to wait up to 500ms if KR is
- * attempted. 82599 uses the same timing for 10g SFI.
- */
-- for (i = 0; i < 5; i++) {
-+ for (i = 0; i < 10; i++) {
- /* Wait for the link partner to also set speed */
- msec_delay(100);
-
---
-2.15.2 (Apple Git-101.1)
-
diff --git a/dpdk/rpm/vpp-dpdk.spec b/dpdk/rpm/vpp-dpdk.spec
deleted file mode 100644
index 93e423584cb..00000000000
--- a/dpdk/rpm/vpp-dpdk.spec
+++ /dev/null
@@ -1,26 +0,0 @@
-%define _make_args -C ../.. DPDK_BUILD_DIR=%{_topdir}/tmp DPDK_INSTALL_DIR=%{buildroot}/usr
-
-Name: vpp-dpdk
-Version: %{_version}
-Release: %{_release}
-Summary: DPDK development packages for VPP
-License: BSD
-
-%description
-
-%package devel
-Summary: DPDK development package for VPP
-Group: Development/Libraries
-
-%description devel
-
-%install
-make %{_make_args} config
-make %{_make_args} install
-
-%files devel
-/usr/bin/*
-/usr/include/dpdk/*
-/usr/lib/*
-/usr/sbin/*
-/usr/share/dpdk