X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fhns3%2Fhns3_mp.c;h=3342a781ada74723e4ffb16bebe3c0b57e37c270;hb=2b6d6d71a0992220043b2f5c3b885c486e7921b7;hp=596c31064af9508675807d9f4c7b288db22a154d;hpb=23d4b61fee5dc75ced7938169dc87a6174a093aa;p=dpdk.git diff --git a/drivers/net/hns3/hns3_mp.c b/drivers/net/hns3/hns3_mp.c index 596c31064a..3342a781ad 100644 --- a/drivers/net/hns3/hns3_mp.c +++ b/drivers/net/hns3/hns3_mp.c @@ -2,10 +2,8 @@ * Copyright(c) 2018-2019 Hisilicon Limited. */ -#include - #include -#include +#include #include #include @@ -14,6 +12,8 @@ #include "hns3_rxtx.h" #include "hns3_mp.h" +static bool hns3_inited; + /* * Initialize IPC message. * @@ -78,7 +78,7 @@ mp_secondary_handle(const struct rte_mp_msg *mp_msg, const void *peer) if (!rte_eth_dev_is_valid_port(param->port_id)) { rte_errno = ENODEV; - PMD_INIT_LOG(ERR, "port %u invalid port ID", param->port_id); + PMD_INIT_LOG(ERR, "port %d invalid port ID", param->port_id); return -rte_errno; } dev = &rte_eth_devices[param->port_id]; @@ -192,9 +192,20 @@ void hns3_mp_req_stop_rxtx(struct rte_eth_dev *dev) /* * Initialize by primary process. */ -void hns3_mp_init_primary(void) +int hns3_mp_init_primary(void) { - rte_mp_action_register(HNS3_MP_NAME, mp_primary_handle); + int ret; + + if (!hns3_inited) { + /* primary is allowed to not support IPC */ + ret = rte_mp_action_register(HNS3_MP_NAME, mp_primary_handle); + if (ret && rte_errno != ENOTSUP) + return ret; + + hns3_inited = true; + } + + return 0; } /* @@ -202,13 +213,24 @@ void hns3_mp_init_primary(void) */ void hns3_mp_uninit_primary(void) { - rte_mp_action_unregister(HNS3_MP_NAME); + if (hns3_inited) + rte_mp_action_unregister(HNS3_MP_NAME); } /* * Initialize by secondary process. */ -void hns3_mp_init_secondary(void) +int hns3_mp_init_secondary(void) { - rte_mp_action_register(HNS3_MP_NAME, mp_secondary_handle); + int ret; + + if (!hns3_inited) { + ret = rte_mp_action_register(HNS3_MP_NAME, mp_secondary_handle); + if (ret) + return ret; + + hns3_inited = true; + } + + return 0; }