Accepting request 395036 from home:markoschandras:network-fixes
- Create DPDK packages for 32 bit x86(bsc#977639). - Add upstream patch for the ixgbe driver * 0007-ixgbe-fix-VLAN-filter-missing-brackets.patch: Fix VLAN filtering logic by adding the missing brackets in the 'if' statement. - DPDK is most common vhost-user backend, Adding upstream patches to help qemu vm live migration with vhost-user (fate#320713). [+ 0004-54f9e32-vhost-handle-dirty-pages-logging-request.patch + 0005-d293dac-vhost-claim-support-of-guest-announce.patch + 0006-d639996-vhost-enable-log_shmfd-protocol-feature.patch] OBS-URL: https://build.opensuse.org/request/show/395036 OBS-URL: https://build.opensuse.org/package/show/network/dpdk?expand=0&rev=2
This commit is contained in:
parent
2d571212a5
commit
07199cc622
152
0004-54f9e32-vhost-handle-dirty-pages-logging-request.patch
Normal file
152
0004-54f9e32-vhost-handle-dirty-pages-logging-request.patch
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
commit 54f9e32305d4a8d30c2a4ae059d310189b312498
|
||||||
|
Author: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||||
|
Date: Fri Jan 29 12:57:56 2016 +0800
|
||||||
|
|
||||||
|
vhost: handle dirty pages logging request
|
||||||
|
|
||||||
|
VHOST_USER_SET_LOG_BASE request is used to tell the backend (dpdk
|
||||||
|
vhost-user) where we should log dirty pages, and how big the log
|
||||||
|
buffer is.
|
||||||
|
|
||||||
|
This request introduces a new payload:
|
||||||
|
|
||||||
|
typedef struct VhostUserLog {
|
||||||
|
uint64_t mmap_size;
|
||||||
|
uint64_t mmap_offset;
|
||||||
|
} VhostUserLog;
|
||||||
|
|
||||||
|
Also, a fd is delivered from QEMU by ancillary data.
|
||||||
|
|
||||||
|
With those info given, an area of memory is mmaped, assigned
|
||||||
|
to dev->log_base, for logging dirty pages.
|
||||||
|
|
||||||
|
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||||
|
Signed-off-by: Victor Kaplansky <victork@redhat.com>
|
||||||
|
Tested-by: Pavel Fedin <p.fedin@samsung.com>
|
||||||
|
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/rte_virtio_net.h
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/rte_virtio_net.h
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/rte_virtio_net.h
|
||||||
|
@@ -129,7 +129,9 @@ struct virtio_net {
|
||||||
|
char ifname[IF_NAME_SZ]; /**< Name of the tap device or socket path. */
|
||||||
|
uint32_t virt_qp_nb; /**< number of queue pair we have allocated */
|
||||||
|
void *priv; /**< private context */
|
||||||
|
- uint64_t reserved[64]; /**< Reserve some spaces for future extension. */
|
||||||
|
+ uint64_t log_size; /**< Size of log area */
|
||||||
|
+ uint64_t log_base; /**< Where dirty pages are logged */
|
||||||
|
+ uint64_t reserved[62]; /**< Reserve some spaces for future extension. */
|
||||||
|
struct vhost_virtqueue *virtqueue[VHOST_MAX_QUEUE_PAIRS * 2]; /**< Contains all virtqueue information. */
|
||||||
|
} __rte_cache_aligned;
|
||||||
|
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/vhost_user/vhost-net-user.c
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/vhost_user/vhost-net-user.c
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/vhost_user/vhost-net-user.c
|
||||||
|
@@ -388,9 +388,12 @@ vserver_message_handler(int connfd, void
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VHOST_USER_SET_LOG_BASE:
|
||||||
|
- RTE_LOG(INFO, VHOST_CONFIG, "not implemented.\n");
|
||||||
|
- break;
|
||||||
|
+ user_set_log_base(ctx, &msg);
|
||||||
|
|
||||||
|
+ /* it needs a reply */
|
||||||
|
+ msg.size = sizeof(msg.payload.u64);
|
||||||
|
+ send_vhost_message(connfd, &msg);
|
||||||
|
+ break;
|
||||||
|
case VHOST_USER_SET_LOG_FD:
|
||||||
|
close(msg.fds[0]);
|
||||||
|
RTE_LOG(INFO, VHOST_CONFIG, "not implemented.\n");
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/vhost_user/vhost-net-user.h
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/vhost_user/vhost-net-user.h
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/vhost_user/vhost-net-user.h
|
||||||
|
@@ -83,6 +83,11 @@ typedef struct VhostUserMemory {
|
||||||
|
VhostUserMemoryRegion regions[VHOST_MEMORY_MAX_NREGIONS];
|
||||||
|
} VhostUserMemory;
|
||||||
|
|
||||||
|
+typedef struct VhostUserLog {
|
||||||
|
+ uint64_t mmap_size;
|
||||||
|
+ uint64_t mmap_offset;
|
||||||
|
+} VhostUserLog;
|
||||||
|
+
|
||||||
|
typedef struct VhostUserMsg {
|
||||||
|
VhostUserRequest request;
|
||||||
|
|
||||||
|
@@ -97,6 +102,7 @@ typedef struct VhostUserMsg {
|
||||||
|
struct vhost_vring_state state;
|
||||||
|
struct vhost_vring_addr addr;
|
||||||
|
VhostUserMemory memory;
|
||||||
|
+ VhostUserLog log;
|
||||||
|
} payload;
|
||||||
|
int fds[VHOST_MEMORY_MAX_NREGIONS];
|
||||||
|
} __attribute((packed)) VhostUserMsg;
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/vhost_user/virtio-net-user.c
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/vhost_user/virtio-net-user.c
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/vhost_user/virtio-net-user.c
|
||||||
|
@@ -365,3 +365,51 @@ user_set_protocol_features(struct vhost_
|
||||||
|
|
||||||
|
dev->protocol_features = protocol_features;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+user_set_log_base(struct vhost_device_ctx ctx,
|
||||||
|
+ struct VhostUserMsg *msg)
|
||||||
|
+{
|
||||||
|
+ struct virtio_net *dev;
|
||||||
|
+ int fd = msg->fds[0];
|
||||||
|
+ uint64_t size, off;
|
||||||
|
+ void *addr;
|
||||||
|
+
|
||||||
|
+ dev = get_device(ctx);
|
||||||
|
+ if (!dev)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (fd < 0) {
|
||||||
|
+ RTE_LOG(ERR, VHOST_CONFIG, "invalid log fd: %d\n", fd);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (msg->size != sizeof(VhostUserLog)) {
|
||||||
|
+ RTE_LOG(ERR, VHOST_CONFIG,
|
||||||
|
+ "invalid log base msg size: %"PRId32" != %d\n",
|
||||||
|
+ msg->size, (int)sizeof(VhostUserLog));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ size = msg->payload.log.mmap_size;
|
||||||
|
+ off = msg->payload.log.mmap_offset;
|
||||||
|
+ RTE_LOG(INFO, VHOST_CONFIG,
|
||||||
|
+ "log mmap size: %"PRId64", offset: %"PRId64"\n",
|
||||||
|
+ size, off);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * mmap from 0 to workaround a hugepage mmap bug: mmap will
|
||||||
|
+ * fail when offset is not page size aligned.
|
||||||
|
+ */
|
||||||
|
+ addr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||||
|
+ if (addr == MAP_FAILED) {
|
||||||
|
+ RTE_LOG(ERR, VHOST_CONFIG, "mmap log base failed!\n");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* TODO: unmap on stop */
|
||||||
|
+ dev->log_base = (uint64_t)(uintptr_t)addr + off;
|
||||||
|
+ dev->log_size = size;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||||
|
@@ -49,6 +49,7 @@ void user_set_vring_kick(struct vhost_de
|
||||||
|
|
||||||
|
void user_set_protocol_features(struct vhost_device_ctx ctx,
|
||||||
|
uint64_t protocol_features);
|
||||||
|
+int user_set_log_base(struct vhost_device_ctx ctx, struct VhostUserMsg *);
|
||||||
|
|
||||||
|
int user_get_vring_base(struct vhost_device_ctx, struct vhost_vring_state *);
|
||||||
|
|
28
0005-d293dac-vhost-claim-support-of-guest-announce.patch
Normal file
28
0005-d293dac-vhost-claim-support-of-guest-announce.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
commit d293dac8f30e46f0cb66fbcce2977d73d56fe103
|
||||||
|
Author: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||||
|
Date: Fri Jan 29 12:58:00 2016 +0800
|
||||||
|
|
||||||
|
vhost: claim support of guest announce
|
||||||
|
|
||||||
|
It's actually a feature already enabled in Linux kernel (since v3.5).
|
||||||
|
What we need to do is simply to claim that we support such feature,
|
||||||
|
and nothing else.
|
||||||
|
|
||||||
|
With that, the guest will send an ARP message after live migration
|
||||||
|
to notify the switches about the new location of migrated VM.
|
||||||
|
|
||||||
|
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||||
|
Tested-by: Pavel Fedin <p.fedin@samsung.com>
|
||||||
|
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/virtio-net.c
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/virtio-net.c
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/virtio-net.c
|
||||||
|
@@ -74,6 +74,7 @@ static struct virtio_net_config_ll *ll_r
|
||||||
|
#define VHOST_SUPPORTED_FEATURES ((1ULL << VIRTIO_NET_F_MRG_RXBUF) | \
|
||||||
|
(1ULL << VIRTIO_NET_F_CTRL_VQ) | \
|
||||||
|
(1ULL << VIRTIO_NET_F_CTRL_RX) | \
|
||||||
|
+ (1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE) | \
|
||||||
|
(VHOST_SUPPORTS_MQ) | \
|
||||||
|
(1ULL << VIRTIO_F_VERSION_1) | \
|
||||||
|
(1ULL << VHOST_F_LOG_ALL) | \
|
33
0006-d639996-vhost-enable-log_shmfd-protocol-feature.patch
Normal file
33
0006-d639996-vhost-enable-log_shmfd-protocol-feature.patch
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
commit d639996a74fa71a9553bcef7cb2b2e9bb0fd5203
|
||||||
|
Author: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||||
|
Date: Fri Jan 29 12:58:02 2016 +0800
|
||||||
|
|
||||||
|
vhost: enable log_shmfd protocol feature
|
||||||
|
|
||||||
|
To claim that we support vhost-user live migration support:
|
||||||
|
SET_LOG_BASE request will be send only when this feature flag
|
||||||
|
is set.
|
||||||
|
|
||||||
|
Besides this flag, we actually need another feature flag set
|
||||||
|
to make vhost-user live migration work: VHOST_F_LOG_ALL.
|
||||||
|
Which, however, has been enabled long time ago.
|
||||||
|
|
||||||
|
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||||
|
Tested-by: Pavel Fedin <p.fedin@samsung.com>
|
||||||
|
|
||||||
|
Index: dpdk-2.2.0/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||||
|
===================================================================
|
||||||
|
--- dpdk-2.2.0.orig/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||||
|
+++ dpdk-2.2.0/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||||
|
@@ -38,8 +38,10 @@
|
||||||
|
#include "vhost-net-user.h"
|
||||||
|
|
||||||
|
#define VHOST_USER_PROTOCOL_F_MQ 0
|
||||||
|
+#define VHOST_USER_PROTOCOL_F_LOG_SHMFD 1
|
||||||
|
|
||||||
|
-#define VHOST_USER_PROTOCOL_FEATURES (1ULL << VHOST_USER_PROTOCOL_F_MQ)
|
||||||
|
+#define VHOST_USER_PROTOCOL_FEATURES ((1ULL << VHOST_USER_PROTOCOL_F_MQ) | \
|
||||||
|
+ (1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD))
|
||||||
|
|
||||||
|
int user_set_mem_table(struct vhost_device_ctx, struct VhostUserMsg *);
|
||||||
|
|
33
0007-ixgbe-fix-VLAN-filter-missing-brackets.patch
Normal file
33
0007-ixgbe-fix-VLAN-filter-missing-brackets.patch
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
From c0de18e856d8c6b4e98ca198091ec7c3528c38e4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aaron Conole <aconole@redhat.com>
|
||||||
|
Date: Tue, 22 Mar 2016 17:37:15 -0400
|
||||||
|
Subject: [PATCH] ixgbe: fix VLAN filter missing brackets
|
||||||
|
|
||||||
|
The ixgbe vlan filter code has an if check with an incorrect whitespace.
|
||||||
|
|
||||||
|
Fixes: fe3a45fd4104 ("ixgbe: add VMDq support")
|
||||||
|
|
||||||
|
Signed-off-by: Aaron Conole <aconole@redhat.com>
|
||||||
|
Acked-by: Panu Matilainen <pmatilai@redhat.com>
|
||||||
|
Acked-by: Helin Zhang <helin.zhang@intel.com>
|
||||||
|
---
|
||||||
|
drivers/net/ixgbe/ixgbe_ethdev.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: dpdk/drivers/net/ixgbe/ixgbe_ethdev.c
|
||||||
|
===================================================================
|
||||||
|
--- dpdk.orig/drivers/net/ixgbe/ixgbe_ethdev.c
|
||||||
|
+++ dpdk/drivers/net/ixgbe/ixgbe_ethdev.c
|
||||||
|
@@ -4258,10 +4258,11 @@ ixgbe_set_pool_vlan_filter(struct rte_et
|
||||||
|
if (ixgbe_vmdq_mode_check(hw) < 0)
|
||||||
|
return (-ENOTSUP);
|
||||||
|
for (pool_idx = 0; pool_idx < ETH_64_POOLS; pool_idx++) {
|
||||||
|
- if (pool_mask & ((uint64_t)(1ULL << pool_idx)))
|
||||||
|
+ if (pool_mask & ((uint64_t)(1ULL << pool_idx))) {
|
||||||
|
ret = hw->mac.ops.set_vfta(hw,vlan,pool_idx,vlan_on);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
20
dpdk.changes
20
dpdk.changes
@ -1,4 +1,24 @@
|
|||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
Thu Apr 28 14:39:36 CEST 2016 - ndas@suse.de
|
||||||
|
|
||||||
|
- Create DPDK packages for 32 bit x86(bsc#977639).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Apr 27 14:55:37 UTC 2016 - mchandras@suse.de
|
||||||
|
|
||||||
|
- Add upstream patch for the ixgbe driver
|
||||||
|
* 0007-ixgbe-fix-VLAN-filter-missing-brackets.patch: Fix VLAN
|
||||||
|
filtering logic by adding the missing brackets in the 'if' statement.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 19 10:45:29 CEST 2016 - ndas@suse.de
|
||||||
|
|
||||||
|
- DPDK is most common vhost-user backend, Adding upstream patches to
|
||||||
|
help qemu vm live migration with vhost-user (fate#320713).
|
||||||
|
[+ 0004-54f9e32-vhost-handle-dirty-pages-logging-request.patch
|
||||||
|
+ 0005-d293dac-vhost-claim-support-of-guest-announce.patch
|
||||||
|
+ 0006-d639996-vhost-enable-log_shmfd-protocol-feature.patch]
|
||||||
|
-------------------------------------------------------------------
|
||||||
Mon Apr 18 08:45:58 UTC 2016 - mchandras@suse.de
|
Mon Apr 18 08:45:58 UTC 2016 - mchandras@suse.de
|
||||||
|
|
||||||
- Use fdupes to manage duplicate files
|
- Use fdupes to manage duplicate files
|
||||||
|
26
dpdk.spec
26
dpdk.spec
@ -17,7 +17,12 @@
|
|||||||
|
|
||||||
|
|
||||||
%define machine native
|
%define machine native
|
||||||
|
%ifarch x86_64
|
||||||
%define target x86_64-%{machine}-linuxapp-gcc
|
%define target x86_64-%{machine}-linuxapp-gcc
|
||||||
|
%else if %ix86
|
||||||
|
%define target i686-%{machine}-linuxapp-gcc
|
||||||
|
%endif
|
||||||
|
|
||||||
%bcond_without shared
|
%bcond_without shared
|
||||||
# Add option to build without examples
|
# Add option to build without examples
|
||||||
%bcond_without examples
|
%bcond_without examples
|
||||||
@ -34,10 +39,15 @@ Source: http://dpdk.org/browse/dpdk/snapshot/dpdk-stable-%{version}.tar.
|
|||||||
Patch1: 0001-enic-fix-Type-punning-and-strict-aliasing-warning.patch
|
Patch1: 0001-enic-fix-Type-punning-and-strict-aliasing-warning.patch
|
||||||
Patch2: 0002-examples-ip_pipeline-fix-implicit-declaration-of-fun.patch
|
Patch2: 0002-examples-ip_pipeline-fix-implicit-declaration-of-fun.patch
|
||||||
Patch3: 0003-mk-fix-external-shared-library-dependencies-of-libraries.patch
|
Patch3: 0003-mk-fix-external-shared-library-dependencies-of-libraries.patch
|
||||||
# PATCH-FIX-UPSTREAM: 0004-mk-fix-gcc-5-version-on-suse.patch
|
Patch4: 0004-54f9e32-vhost-handle-dirty-pages-logging-request.patch
|
||||||
Patch4: 0004-mk-fix-gcc-5-version-on-suse.patch
|
Patch5: 0005-d293dac-vhost-claim-support-of-guest-announce.patch
|
||||||
BuildRequires: fdupes
|
Patch6: 0006-d639996-vhost-enable-log_shmfd-protocol-feature.patch
|
||||||
|
#PATCH-FIX-UPSTREAM 0007-ixgbe-fix-VLAN-filter-missing-brackets.patch
|
||||||
|
Patch7: 0007-ixgbe-fix-VLAN-filter-missing-brackets.patch
|
||||||
|
# PATCH-FIX-UPSTREAM: 0099-mk-fix-gcc-5-version-on-suse.patch
|
||||||
|
Patch99: 0099-mk-fix-gcc-5-version-on-suse.patch
|
||||||
BuildRequires: doxygen
|
BuildRequires: doxygen
|
||||||
|
BuildRequires: fdupes
|
||||||
BuildRequires: libnuma-devel
|
BuildRequires: libnuma-devel
|
||||||
BuildRequires: libpcap-devel
|
BuildRequires: libpcap-devel
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
@ -46,7 +56,7 @@ BuildRequires: zlib-devel
|
|||||||
# other techniques, carefully crafted x86 assembly instructions. As such it
|
# other techniques, carefully crafted x86 assembly instructions. As such it
|
||||||
# currently (and likely never will) run on non-x86 platforms
|
# currently (and likely never will) run on non-x86 platforms
|
||||||
#
|
#
|
||||||
ExclusiveArch: x86_64
|
ExclusiveArch: x86_64 %ix86
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The Data Plane Development Kit is a set of libraries and drivers for
|
The Data Plane Development Kit is a set of libraries and drivers for
|
||||||
@ -101,7 +111,11 @@ as L2 and L3 forwarding.
|
|||||||
%patch1 -p1 -z .enic
|
%patch1 -p1 -z .enic
|
||||||
%patch2 -p1 -z .examples
|
%patch2 -p1 -z .examples
|
||||||
%patch3 -p1 -z .dtneeded
|
%patch3 -p1 -z .dtneeded
|
||||||
%patch4 -p1 -z .rtetoolchain
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch99 -p1 -z .rtetoolchain
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# set up a method for modifying the resulting .config file
|
# set up a method for modifying the resulting .config file
|
||||||
@ -227,7 +241,7 @@ mkdir %{buildroot}%{_docdir}/
|
|||||||
mv %{buildroot}%{_datadir}/doc/dpdk %{buildroot}%{_docdir}/
|
mv %{buildroot}%{_datadir}/doc/dpdk %{buildroot}%{_docdir}/
|
||||||
|
|
||||||
# Remove duplicates
|
# Remove duplicates
|
||||||
%fdupes %{buildroot}/%{_prefix}
|
%fdupes %{buildroot}/%{_prefix}
|
||||||
|
|
||||||
%post devel -p /sbin/ldconfig
|
%post devel -p /sbin/ldconfig
|
||||||
%postun devel -p /sbin/ldconfig
|
%postun devel -p /sbin/ldconfig
|
||||||
|
Loading…
Reference in New Issue
Block a user