From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by dpdk.org (Postfix) with ESMTP id 56AE3A84E for ; Fri, 26 Jan 2018 14:17:02 +0100 (CET) Received: by mail-wr0-f193.google.com with SMTP id 36so524596wrh.1 for ; Fri, 26 Jan 2018 05:17:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DV9FwB3AYd5V10OFro+t7mzhLHBcca5tbA+iBZk5CTA=; b=I9LqAR+DyVbxvIYepVFkiA4mcdgAwOGOn6vB5HLASKREgCy8iDE2XuU2Jlb+a1NFfO p9gBMGfUVb/zPtvYUs1s5+5PaswW3c6kqv+YWMxRG4j2bIYKkOMKKtBbMjuTDcLcWu5Q mGioGGPGJu7Lhy8MVNClmz3/eQpbVc4uNRS5B78B44F5+eO394BzJ65OFUEfT++9KSe2 yVuaDPrCJBdVyLzFkqZ0ZJMms/HtFdiTJ373qwbaXV2Hq+VjeAgE0418qjPzAsEH/2my ZtzCw+FIZEHO5HcKLZAyrKrQts1NJJNj+ePWNINCtyee3aJsYL6/+AL03QfE/1C/1+ei MXlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DV9FwB3AYd5V10OFro+t7mzhLHBcca5tbA+iBZk5CTA=; b=ZUhWwsW9rjRjmVF7pi1mea7Tx40k3fSx682J2kAmewn/PRyXDcdq17XxpqMOh5rJdf jYQi5bYsL40k+htbMVvW+oaJhegTAADbt3at2u1+vmkuB+wsk7e4/DRKUZAGEOt0qO5O oxLweFv3z9ItkHbgFYAtmzgeB2fwtNZcejFAkOLFlqyU76g5Sn8a19sDSjq0mUOEcVcB Nt5V/hFSmFwqAvWEUhX0BqLEt9ZRlurDjkOp0lYoI/G8mbtR0GouewE4PvuobJ4uTEKl fCU+q/pJrjE6MRD5Hmf/zi/KjF4mHkr0254MooaUgNJVBzDQRvD3ebcQa5wElyhAHS7O IJwA== X-Gm-Message-State: AKwxyteXQoIF/CYWALoKFaV12HHjpy9wHyoxXg8IYOHOdM/zd5Hab8aS VBmJSvDjRKhe7Q9M54ThY2o= X-Google-Smtp-Source: AH8x225JM712nvL6hjolifNFzkgW7WaaONY+CgbQdwJhTPeQ2pZqvywOg44LE97/YiBc2PTnq4FNGA== X-Received: by 10.223.185.21 with SMTP id k21mr12551329wrf.37.1516972622062; Fri, 26 Jan 2018 05:17:02 -0800 (PST) Received: from localhost ([2a00:23c5:bef3:400:9531:588b:44ae:bec4]) by smtp.gmail.com with ESMTPSA id y52sm6466623wrb.52.2018.01.26.05.17.01 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 26 Jan 2018 05:17:01 -0800 (PST) From: luca.boccassi@gmail.com To: Junjie Chen Cc: Maxime Coquelin , Yuanhan Liu , dpdk stable Date: Fri, 26 Jan 2018 13:13:31 +0000 Message-Id: <20180126131332.15346-61-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180126131332.15346-1-luca.boccassi@gmail.com> References: <20180126131332.15346-1-luca.boccassi@gmail.com> Subject: [dpdk-stable] patch 'vhost: fix mbuf free' has been queued to LTS release 16.11.5 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jan 2018 13:17:02 -0000 Hi, FYI, your patch has been queued to LTS release 16.11.5 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 01/28/18. So please shout if anyone has objections. Thanks. Luca Boccassi --- >>From 57abdf63ae7623eaa169729547d0d0336f49695c Mon Sep 17 00:00:00 2001 From: Junjie Chen Date: Wed, 17 Jan 2018 10:45:53 -0500 Subject: [PATCH] vhost: fix mbuf free [ upstream commit 3ebd930588b7847906e08e2645a35761a90abf2a ] dequeue zero copy change buf_addr and buf_iova of mbuf, and return to mbuf pool without restore them, it breaks vm memory if others allocate mbuf from same pool since mbuf reset doesn't reset buf_addr and buf_iova. Fixes: b0a985d1f340 ("vhost: add dequeue zero copy") Signed-off-by: Junjie Chen Reviewed-by: Maxime Coquelin Acked-by: Yuanhan Liu --- lib/librte_vhost/virtio_net.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c index 83a0082e5..db194507e 100644 --- a/lib/librte_vhost/virtio_net.c +++ b/lib/librte_vhost/virtio_net.c @@ -1028,6 +1028,22 @@ mbuf_is_consumed(struct rte_mbuf *m) return true; } +static inline void __attribute__((always_inline)) +restore_mbuf(struct rte_mbuf *m) +{ + uint32_t mbuf_size, priv_size; + + while (m) { + priv_size = rte_pktmbuf_priv_size(m->pool); + mbuf_size = sizeof(struct rte_mbuf) + priv_size; + /* start of buffer is after mbuf structure and priv data */ + + m->buf_addr = (char *)m + mbuf_size; + m->buf_physaddr = rte_mempool_virt2phy(NULL, m) + mbuf_size; + m = m->next; + } +} + uint16_t rte_vhost_dequeue_burst(int vid, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count) @@ -1070,6 +1086,7 @@ rte_vhost_dequeue_burst(int vid, uint16_t queue_id, nr_updated += 1; TAILQ_REMOVE(&vq->zmbuf_list, zmbuf, next); + restore_mbuf(zmbuf->mbuf); rte_pktmbuf_free(zmbuf->mbuf); put_zmbuf(zmbuf); vq->nr_zmbuf -= 1; -- 2.14.2