summaryrefslogtreecommitdiffstats
path: root/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch')
-rw-r--r--debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch b/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch
new file mode 100644
index 00000000..b756d8ff
--- /dev/null
+++ b/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch
@@ -0,0 +1,63 @@
+Description: backport of dpdk 16.07 fix for LP: #1570466
+
+Backported from this discussion
+http://dpdk.org/dev/patchwork/patch/12103/
+Not accepted yet, but likely to be accepted in some form once tested and
+confirmed.
+
+Update 2016-05-17:
+Moving to 16.04 this now applies as-is without modifications, dropping the
+former backport changes.
+
+Also along the discussion vserver-fh is now initialized with -1 to avoid
+accidentially deleting the first connected port if we delete another not yet
+connected port.
+
+Forwarded: yes (based on an upstream discussion)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-05-17
+
+Index: dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/vhost-net-user.c
++++ dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+@@ -310,6 +310,7 @@ vserver_new_vq_conn(int fd, void *dat, _
+ }
+
+ vdev_ctx.fh = fh;
++ vserver->fh = fh;
+ size = strnlen(vserver->path, PATH_MAX);
+ vhost_set_ifname(vdev_ctx, vserver->path,
+ size);
+@@ -486,6 +487,7 @@ rte_vhost_driver_register(const char *pa
+ }
+
+ vserver->path = strdup(path);
++ vserver->fh = -1;
+
+ ret = fdset_add(&g_vhost_server.fdset, vserver->listenfd,
+ vserver_new_vq_conn, NULL, vserver);
+@@ -520,6 +522,11 @@ rte_vhost_driver_unregister(const char *
+
+ for (i = 0; i < g_vhost_server.vserver_cnt; i++) {
+ if (!strcmp(g_vhost_server.server[i]->path, path)) {
++ struct vhost_device_ctx ctx;
++
++ ctx.fh = g_vhost_server.server[i]->fh;
++ vhost_destroy_device(ctx);
++
+ fdset_del(&g_vhost_server.fdset,
+ g_vhost_server.server[i]->listenfd);
+
+Index: dpdk/lib/librte_vhost/vhost_user/vhost-net-user.h
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/vhost-net-user.h
++++ dpdk/lib/librte_vhost/vhost_user/vhost-net-user.h
+@@ -43,6 +43,7 @@
+ struct vhost_server {
+ char *path; /**< The path the uds is bind to. */
+ int listenfd; /**< The listener sockfd. */
++ uint32_t fh;
+ };
+
+ /* refer to hw/virtio/vhost-user.c */