eal: fix formatting of hotplug error message
[dpdk.git] / lib / librte_eal / common / eal_common_proc.c
index 0974e32..b46d644 100644 (file)
@@ -37,6 +37,7 @@ static int mp_fd = -1;
 static char mp_filter[PATH_MAX];   /* Filter for secondary process sockets */
 static char mp_dir_path[PATH_MAX]; /* The directory path for all mp sockets */
 static pthread_mutex_t mp_mutex_action = PTHREAD_MUTEX_INITIALIZER;
+static char peer_name[PATH_MAX];
 
 struct action_entry {
        TAILQ_ENTRY(action_entry) next;
@@ -511,9 +512,9 @@ async_reply_handle(void *arg)
 static int
 open_socket_fd(void)
 {
-       char peer_name[PATH_MAX] = {0};
        struct sockaddr_un un;
 
+       peer_name[0] = '\0';
        if (rte_eal_process_type() == RTE_PROC_SECONDARY)
                snprintf(peer_name, sizeof(peer_name),
                                "%d_%"PRIx64, getpid(), rte_rdtsc());
@@ -542,27 +543,17 @@ open_socket_fd(void)
        return mp_fd;
 }
 
-static int
-unlink_sockets(const char *filter)
+static void
+close_socket_fd(void)
 {
-       int dir_fd;
-       DIR *mp_dir;
-       struct dirent *ent;
-
-       mp_dir = opendir(mp_dir_path);
-       if (!mp_dir) {
-               RTE_LOG(ERR, EAL, "Unable to open directory %s\n", mp_dir_path);
-               return -1;
-       }
-       dir_fd = dirfd(mp_dir);
+       char path[PATH_MAX];
 
-       while ((ent = readdir(mp_dir))) {
-               if (fnmatch(filter, ent->d_name, 0) == 0)
-                       unlinkat(dir_fd, ent->d_name, 0);
-       }
+       if (mp_fd < 0)
+               return;
 
-       closedir(mp_dir);
-       return 0;
+       close(mp_fd);
+       create_socket_path(peer_name, path, sizeof(path));
+       unlink(path);
 }
 
 int
@@ -572,6 +563,14 @@ rte_mp_channel_init(void)
        int dir_fd;
        pthread_t mp_handle_tid;
 
+       /* in no shared files mode, we do not have secondary processes support,
+        * so no need to initialize IPC.
+        */
+       if (internal_config.no_shconf) {
+               RTE_LOG(DEBUG, EAL, "No shared files mode enabled, IPC will be disabled\n");
+               return 0;
+       }
+
        /* create filter path */
        create_socket_path("*", path, sizeof(path));
        strlcpy(mp_filter, basename(path), sizeof(mp_filter));
@@ -595,13 +594,6 @@ rte_mp_channel_init(void)
                return -1;
        }
 
-       if (rte_eal_process_type() == RTE_PROC_PRIMARY &&
-                       unlink_sockets(mp_filter)) {
-               RTE_LOG(ERR, EAL, "failed to unlink mp sockets\n");
-               close(dir_fd);
-               return -1;
-       }
-
        if (open_socket_fd() < 0) {
                close(dir_fd);
                return -1;
@@ -624,6 +616,12 @@ rte_mp_channel_init(void)
        return 0;
 }
 
+void
+rte_mp_channel_cleanup(void)
+{
+       close_socket_fd();
+}
+
 /**
  * Return -1, as fail to send message and it's caused by the local side.
  * Return 0, as fail to send message and it's caused by the remote side.
@@ -792,7 +790,7 @@ mp_request_async(const char *dst, struct rte_mp_msg *req,
 {
        struct rte_mp_msg *reply_msg;
        struct pending_request *pending_req, *exist;
-       int ret;
+       int ret = -1;
 
        pending_req = calloc(1, sizeof(*pending_req));
        reply_msg = calloc(1, sizeof(*reply_msg));
@@ -829,16 +827,17 @@ mp_request_async(const char *dst, struct rte_mp_msg *req,
                ret = 0;
                goto fail;
        }
-       TAILQ_INSERT_TAIL(&pending_requests.requests, pending_req, next);
-
        param->user_reply.nb_sent++;
 
+       /* if alarm set fails, we simply ignore the reply */
        if (rte_eal_alarm_set(ts->tv_sec * 1000000 + ts->tv_nsec / 1000,
                              async_reply_handle, pending_req) < 0) {
                RTE_LOG(ERR, EAL, "Fail to set alarm for request %s:%s\n",
                        dst, req->name);
-               rte_panic("Fix the above shit to properly free all memory\n");
+               ret = -1;
+               goto fail;
        }
+       TAILQ_INSERT_TAIL(&pending_requests.requests, pending_req, next);
 
        return 0;
 fail:
@@ -930,8 +929,18 @@ rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 
        if (check_input(req) == false)
                return -1;
+
+       reply->nb_sent = 0;
+       reply->nb_received = 0;
+       reply->msgs = NULL;
+
+       if (internal_config.no_shconf) {
+               RTE_LOG(DEBUG, EAL, "No shared files mode enabled, IPC is disabled\n");
+               return 0;
+       }
+
        if (gettimeofday(&now, NULL) < 0) {
-               RTE_LOG(ERR, EAL, "Faile to get current time\n");
+               RTE_LOG(ERR, EAL, "Failed to get current time\n");
                rte_errno = errno;
                return -1;
        }
@@ -940,10 +949,6 @@ rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
        end.tv_sec = now.tv_sec + ts->tv_sec +
                        (now.tv_usec * 1000 + ts->tv_nsec) / 1000000000;
 
-       reply->nb_sent = 0;
-       reply->nb_received = 0;
-       reply->msgs = NULL;
-
        /* for secondary process, send request to the primary process only */
        if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
                pthread_mutex_lock(&pending_requests.lock);
@@ -1014,6 +1019,12 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 
        if (check_input(req) == false)
                return -1;
+
+       if (internal_config.no_shconf) {
+               RTE_LOG(DEBUG, EAL, "No shared files mode enabled, IPC is disabled\n");
+               return 0;
+       }
+
        if (gettimeofday(&now, NULL) < 0) {
                RTE_LOG(ERR, EAL, "Faile to get current time\n");
                rte_errno = errno;
@@ -1152,5 +1163,10 @@ rte_mp_reply(struct rte_mp_msg *msg, const char *peer)
                return -1;
        }
 
+       if (internal_config.no_shconf) {
+               RTE_LOG(DEBUG, EAL, "No shared files mode enabled, IPC is disabled\n");
+               return 0;
+       }
+
        return mp_send(msg, peer, MP_REP);
 }