From 06123fdd6063e411ea78ed353f0d6114e500b1b3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BAlius=20Milan?= Date: Wed, 19 Feb 2020 09:19:16 +0100 Subject: [PATCH] net/memif: fix init when already connected MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch fixes the situation when there is already connected pair of memif interfaces and another slave tries to initiate the connection with (already occupied) master. Expected behavior is that the second slave is refused and gets disconnect message with reason: "Already connected", while old connection remains functional. Fixes: 09c7e63a71f9 ("net/memif: introduce memory interface PMD") Cc: stable@dpdk.org Signed-off-by: Július Milan Reviewed-by: Jakub Grajciar --- drivers/net/memif/memif_socket.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c index 8ce2cc9faf..67794cb6fa 100644 --- a/drivers/net/memif/memif_socket.c +++ b/drivers/net/memif/memif_socket.c @@ -204,6 +204,13 @@ memif_msg_receive_init(struct memif_control_channel *cc, memif_msg_t *msg) pmd = dev->data->dev_private; if (((pmd->flags & ETH_MEMIF_FLAG_DISABLED) == 0) && (pmd->id == i->id) && (pmd->role == MEMIF_ROLE_MASTER)) { + if (pmd->flags & (ETH_MEMIF_FLAG_CONNECTING | + ETH_MEMIF_FLAG_CONNECTED)) { + memif_msg_enq_disconnect(cc, + "Already connected", 0); + return -1; + } + /* assign control channel to device */ cc->dev = dev; pmd->cc = cc; @@ -215,12 +222,6 @@ memif_msg_receive_init(struct memif_control_channel *cc, memif_msg_t *msg) return -1; } - if (pmd->flags & (ETH_MEMIF_FLAG_CONNECTING | - ETH_MEMIF_FLAG_CONNECTED)) { - memif_msg_enq_disconnect(pmd->cc, - "Already connected", 0); - return -1; - } strlcpy(pmd->remote_name, (char *)i->name, sizeof(pmd->remote_name)); @@ -772,6 +773,7 @@ memif_intr_handler(void *arg) ret = memif_msg_receive(cc); /* if driver failed to assign device */ if (cc->dev == NULL) { + memif_msg_send_from_queue(cc); ret = rte_intr_callback_unregister_pending(&cc->intr_handle, memif_intr_handler, cc, -- 2.20.1