X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Fmalloc_mp.c;h=1f212f8349936773a467e824ab918670ca0febd6;hb=028669bc9f0d;hp=f3a13353b1f4c549cbe6cb6d7f2a8dd194b1c3e2;hpb=fba0ca227453ee6a60f674884531fb3817ca8a17;p=dpdk.git diff --git a/lib/librte_eal/common/malloc_mp.c b/lib/librte_eal/common/malloc_mp.c index f3a13353b1..1f212f8349 100644 --- a/lib/librte_eal/common/malloc_mp.c +++ b/lib/librte_eal/common/malloc_mp.c @@ -10,6 +10,7 @@ #include #include "eal_memalloc.h" +#include "eal_memcfg.h" #include "malloc_elem.h" #include "malloc_mp.h" @@ -501,7 +502,7 @@ handle_rollback_response(const struct rte_mp_msg *request, /* lock the request */ pthread_mutex_lock(&mp_request_list.lock); - memset(&msg, 0, sizeof(0)); + memset(&msg, 0, sizeof(msg)); entry = find_request_by_id(mpreq->id); if (entry == NULL) { @@ -573,7 +574,7 @@ request_sync(void) struct rte_mp_reply reply; struct malloc_mp_req *req = (struct malloc_mp_req *)msg.param; struct timespec ts; - int i, ret; + int i, ret = -1; memset(&msg, 0, sizeof(msg)); memset(&reply, 0, sizeof(reply)); @@ -596,14 +597,16 @@ request_sync(void) ret = rte_mp_request_sync(&msg, &reply, &ts); } while (ret != 0 && rte_errno == EEXIST); if (ret != 0) { - RTE_LOG(ERR, EAL, "Could not send sync request to secondary process\n"); - ret = -1; + /* if IPC is unsupported, behave as if the call succeeded */ + if (rte_errno != ENOTSUP) + RTE_LOG(ERR, EAL, "Could not send sync request to secondary process\n"); + else + ret = 0; goto out; } if (reply.nb_received != reply.nb_sent) { RTE_LOG(ERR, EAL, "Not all secondaries have responded\n"); - ret = -1; goto out; } @@ -612,17 +615,14 @@ request_sync(void) (struct malloc_mp_req *)reply.msgs[i].param; if (resp->t != REQ_TYPE_SYNC) { RTE_LOG(ERR, EAL, "Unexpected response from secondary\n"); - ret = -1; goto out; } if (resp->id != req->id) { RTE_LOG(ERR, EAL, "Wrong request ID\n"); - ret = -1; goto out; } if (resp->result != REQ_RESULT_SUCCESS) { RTE_LOG(ERR, EAL, "Secondary process failed to synchronize\n"); - ret = -1; goto out; } } @@ -722,7 +722,9 @@ int register_mp_requests(void) { if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - if (rte_mp_action_register(MP_ACTION_REQUEST, handle_request)) { + /* it's OK for primary to not support IPC */ + if (rte_mp_action_register(MP_ACTION_REQUEST, handle_request) && + rte_errno != ENOTSUP) { RTE_LOG(ERR, EAL, "Couldn't register '%s' action\n", MP_ACTION_REQUEST); return -1;