On 22-Apr-19 6:51 PM, Yongseok Koh wrote:

On Apr 17, 2019, at 7:44 AM, Herakliusz Lipiec <herakliusz.lip...@intel.com> 
wrote:

When sending multiple requests, rte_mp_request_sync
can succeed sending a few of those requests, but then
fail on a later one and in the end return with rc=-1.
The upper layers - e.g. device hotplug - currently
handles this case as if no messages were sent and no
memory for response buffers was allocated, which is
not true. Fixed by always freeing reply message buffers.

Fixes: 9a8ab29b84d3 ("net/mlx5: replace IPC socket with EAL API")
Fixes: c18cf501a7af ("net/mlx5: enable secondary process to register DMA 
memory")
Cc: ys...@mellanox.com
Signed-off-by: Herakliusz Lipiec <herakliusz.lip...@intel.com>
---
drivers/net/mlx5/mlx5_mp.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_mp.c b/drivers/net/mlx5/mlx5_mp.c
index cea74adb6..c9915b1d5 100644
--- a/drivers/net/mlx5/mlx5_mp.c
+++ b/drivers/net/mlx5/mlx5_mp.c
@@ -258,6 +258,7 @@ mlx5_mp_req_mr_create(struct rte_eth_dev *dev, uintptr_t 
addr)
        if (ret) {
                DRV_LOG(ERR, "port %u request to primary process failed",
                        dev->data->port_id);
+               free(mp_rep.msgs);
                return -rte_errno;
        }
        assert(mp_rep.nb_received == 1);
@@ -295,7 +296,8 @@ mlx5_mp_req_verbs_cmd_fd(struct rte_eth_dev *dev)
        if (ret) {
                DRV_LOG(ERR, "port %u request to primary process failed",
                        dev->data->port_id);
-               return -rte_errno;
+               ret = -rte_errno;
+               goto exit;

These two requests will be made by a secondary process targeting to the primary.
Then, there's only one request in this case and we don't need to take care of 
that.
Right?

Same comment for mlx4.

Hi Yongseok,

mp_rep.msgs is potentially allocated regardless of whether you're in primary or secondary, and whether the call to mp_request_sync succeeded or failed. Hence, need to free in all cases.

See this patch: http://patches.dpdk.org/patch/52868/
and this bug: https://bugs.dpdk.org/show_bug.cgi?id=228


Thanks,
Yongseok

        }
        assert(mp_rep.nb_received == 1);
        mp_res = &mp_rep.msgs[0];
--
2.17.2





--
Thanks,
Anatoly

Reply via email to