The fdset is used by the AF_UNIX transport code but other transports may
not need it.  Move it to trans_af_unix.c and then make struct vhost_user
private again since nothing outside socket.c needs it.

Signed-off-by: Nikos Dragazis <ndraga...@arrikto.com>
Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
---
 lib/librte_vhost/socket.c        | 37 +++++++---------------------------
 lib/librte_vhost/trans_af_unix.c | 43 +++++++++++++++++++++++++++++++++++-----
 lib/librte_vhost/vhost.h         | 15 --------------
 3 files changed, 45 insertions(+), 50 deletions(-)

diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
index 373c01d..fc78b63 100644
--- a/lib/librte_vhost/socket.c
+++ b/lib/librte_vhost/socket.c
@@ -16,13 +16,14 @@
 #include "vhost.h"
 #include "vhost_user.h"
 
+#define MAX_VHOST_SOCKET 1024
+struct vhost_user {
+       struct vhost_user_socket *vsockets[MAX_VHOST_SOCKET];
+       int vsocket_cnt;
+       pthread_mutex_t mutex;
+};
+
 struct vhost_user vhost_user = {
-       .fdset = {
-               .fd = { [0 ... MAX_FDS - 1] = {-1, NULL, NULL, NULL, 0} },
-               .fd_mutex = PTHREAD_MUTEX_INITIALIZER,
-               .fd_pooling_mutex = PTHREAD_MUTEX_INITIALIZER,
-               .num = 0
-       },
        .vsocket_cnt = 0,
        .mutex = PTHREAD_MUTEX_INITIALIZER,
 };
@@ -484,7 +485,6 @@ int
 rte_vhost_driver_start(const char *path)
 {
        struct vhost_user_socket *vsocket;
-       static pthread_t fdset_tid;
 
        pthread_mutex_lock(&vhost_user.mutex);
        vsocket = find_vhost_user_socket(path);
@@ -493,28 +493,5 @@ rte_vhost_driver_start(const char *path)
        if (!vsocket)
                return -1;
 
-       if (fdset_tid == 0) {
-               /**
-                * create a pipe which will be waited by poll and notified to
-                * rebuild the wait list of poll.
-                */
-               if (fdset_pipe_init(&vhost_user.fdset) < 0) {
-                       RTE_LOG(ERR, VHOST_CONFIG,
-                               "failed to create pipe for vhost fdset\n");
-                       return -1;
-               }
-
-               int ret = rte_ctrl_thread_create(&fdset_tid,
-                       "vhost-events", NULL, fdset_event_dispatch,
-                       &vhost_user.fdset);
-               if (ret != 0) {
-                       RTE_LOG(ERR, VHOST_CONFIG,
-                               "failed to create fdset handling thread");
-
-                       fdset_pipe_uninit(&vhost_user.fdset);
-                       return -1;
-               }
-       }
-
        return vsocket->trans_ops->socket_start(vsocket);
 }
diff --git a/lib/librte_vhost/trans_af_unix.c b/lib/librte_vhost/trans_af_unix.c
index 00d5366..e8a4ef2 100644
--- a/lib/librte_vhost/trans_af_unix.c
+++ b/lib/librte_vhost/trans_af_unix.c
@@ -10,11 +10,19 @@
 
 #include <rte_log.h>
 
+#include "fd_man.h"
 #include "vhost.h"
 #include "vhost_user.h"
 
 #define MAX_VIRTIO_BACKLOG 128
 
+static struct fdset af_unix_fdset = {
+       .fd = { [0 ... MAX_FDS - 1] = {-1, NULL, NULL, NULL, 0} },
+       .fd_mutex = PTHREAD_MUTEX_INITIALIZER,
+       .fd_pooling_mutex = PTHREAD_MUTEX_INITIALIZER,
+       .num = 0
+};
+
 TAILQ_HEAD(vhost_user_connection_list, vhost_user_connection);
 
 struct vhost_user_connection {
@@ -189,7 +197,7 @@ vhost_user_add_connection(int fd, struct vhost_user_socket 
*vsocket)
        conn->connfd = fd;
        conn->vsocket = vsocket;
        conn->vid = vid;
-       ret = fdset_add(&vhost_user.fdset, fd, vhost_user_read_cb,
+       ret = fdset_add(&af_unix_fdset, fd, vhost_user_read_cb,
                        NULL, conn);
        if (ret < 0) {
                RTE_LOG(ERR, VHOST_CONFIG,
@@ -206,7 +214,7 @@ vhost_user_add_connection(int fd, struct vhost_user_socket 
*vsocket)
        TAILQ_INSERT_TAIL(&af_vsocket->conn_list, conn, next);
        pthread_mutex_unlock(&af_vsocket->conn_mutex);
 
-       fdset_pipe_notify(&vhost_user.fdset);
+       fdset_pipe_notify(&af_unix_fdset);
        return;
 
 err_cleanup:
@@ -330,7 +338,7 @@ vhost_user_start_server(struct vhost_user_socket *vsocket)
        if (ret < 0)
                goto err;
 
-       ret = fdset_add(&vhost_user.fdset, fd, vhost_user_server_new_connection,
+       ret = fdset_add(&af_unix_fdset, fd, vhost_user_server_new_connection,
                  NULL, vsocket);
        if (ret < 0) {
                RTE_LOG(ERR, VHOST_CONFIG,
@@ -556,7 +564,7 @@ af_unix_socket_cleanup(struct vhost_user_socket *vsocket)
        struct vhost_user_connection *conn, *next;
 
        if (vsocket->is_server) {
-               fdset_del(&vhost_user.fdset, af_vsocket->socket_fd);
+               fdset_del(&af_unix_fdset, af_vsocket->socket_fd);
                close(af_vsocket->socket_fd);
                unlink(vsocket->path);
        } else if (vsocket->reconnect) {
@@ -575,7 +583,7 @@ af_unix_socket_cleanup(struct vhost_user_socket *vsocket)
                 * conn_mutex lock, and try again since
                 * the r/wcb may use the conn_mutex lock.
                 */
-               if (fdset_try_del(&vhost_user.fdset,
+               if (fdset_try_del(&af_unix_fdset,
                                  conn->connfd) == -1) {
                        pthread_mutex_unlock(
                                        &af_vsocket->conn_mutex);
@@ -598,6 +606,31 @@ af_unix_socket_cleanup(struct vhost_user_socket *vsocket)
 static int
 af_unix_socket_start(struct vhost_user_socket *vsocket)
 {
+       static pthread_t fdset_tid;
+
+       if (fdset_tid == 0) {
+               /**
+                * create a pipe which will be waited by poll and notified to
+                * rebuild the wait list of poll.
+                */
+               if (fdset_pipe_init(&af_unix_fdset) < 0) {
+                       RTE_LOG(ERR, VHOST_CONFIG,
+                               "failed to create pipe for vhost fdset\n");
+                       return -1;
+               }
+
+               int ret = rte_ctrl_thread_create(&fdset_tid,
+                       "vhost-events", NULL, fdset_event_dispatch,
+                       &af_unix_fdset);
+               if (ret != 0) {
+                       RTE_LOG(ERR, VHOST_CONFIG,
+                               "failed to create fdset handling thread");
+
+                       fdset_pipe_uninit(&af_unix_fdset);
+                       return -1;
+               }
+       }
+
        if (vsocket->is_server)
                return vhost_user_start_server(vsocket);
        else
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index d8b5ec2..64b7f77 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -22,7 +22,6 @@
 #include <rte_rwlock.h>
 #include <rte_malloc.h>
 
-#include "fd_man.h"
 #include "rte_vhost.h"
 #include "rte_vdpa.h"
 
@@ -404,10 +403,6 @@ struct virtio_net {
        struct rte_vhost_user_extern_ops extern_ops;
 } __rte_cache_aligned;
 
-/* The vhost_user and vhost_user_socket declarations are temporary measures for
- * moving AF_UNIX code into trans_af_unix.c.  They will be cleaned up as
- * socket.c is untangled from trans_af_unix.c.
- */
 /*
  * Every time rte_vhost_driver_register() is invoked, an associated
  * vhost_user_socket struct will be created.
@@ -448,16 +443,6 @@ struct vhost_user_socket {
        struct vhost_transport_ops const *trans_ops;
 };
 
-#define MAX_VHOST_SOCKET 1024
-struct vhost_user {
-       struct vhost_user_socket *vsockets[MAX_VHOST_SOCKET];
-       struct fdset fdset;
-       int vsocket_cnt;
-       pthread_mutex_t mutex;
-};
-
-extern struct vhost_user vhost_user;
-
 static __rte_always_inline bool
 vq_is_packed(struct virtio_net *dev)
 {
-- 
2.7.4

Reply via email to