diff options
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.patch | 63 |
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 */ |