From patchwork Mon Apr 29 20:33:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53156 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 81E071B0FF; Mon, 29 Apr 2019 22:33:35 +0200 (CEST) Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by dpdk.org (Postfix) with ESMTP id E69321B0FC for ; Mon, 29 Apr 2019 22:33:30 +0200 (CEST) Received: by mail-pg1-f194.google.com with SMTP id k19so5727218pgh.0 for ; Mon, 29 Apr 2019 13:33:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i7DW84J98xtYsHSCazKAw1dQxO0fxpn1GAfMrRLtML4=; b=MMAZr4oOnQgudSdBJGfJ9s7z3n/fF9eX7qDAdVYs/PCyJYknaYVxR3hrE2l6cYMss0 Rn0V1GjaFsABnyRosDYB4pVCNHaRFOJ7vzmTU769T+V9c8wXcuNsWDxOF2JCG0924MTa rUWm058Gc6WTg3ApHJyrgg4bm80P2A8KO8oWLNxfEu/rmSGTs2eJmnrkX8CM8lLtOefJ xVykXm3cc+LLJNieGWnPBbgeNHstDvXbNTeKE3iYzgXZOd/qe2iSgvPIo80YtRz3NziE ucAWW6xAJTl2IfNu5/YoR5ucHW5X+EdqQHLERiE3nnhLeom5//hw209nXdMQqGxT2DAF bSqA== 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:mime-version:content-transfer-encoding; bh=i7DW84J98xtYsHSCazKAw1dQxO0fxpn1GAfMrRLtML4=; b=D9/ToB4le0H5aBlPtJ7Z2ZkQlzzI9TWfdZYxpG3cu4c1gQuZpfXuQNUEQGBAMDDm2M 4X09W62KVDVv0Drv7FYx3T4wH8hbd4vdYV61pFF7oRRe13sx9yXugY5fNGMynfK7laDO dNUBKDo64ujKvm6651hM+11T+RZkDaJraXRBkfW8qMhgKfeITIP2p0NhbDkbEV1kG3c4 DYLPFCFjKjpKTBONciomi6BUTLmEDNru+42934xhJwMFDwbB4KS5fH92QvZvJGVhBEOP oPZdEEX0KwvXMcV1pqIoSx2JuGTLB4vcmBnK37fkKqK+fHPcYW9N2WmB4FLSkS0+G+jT vF1g== X-Gm-Message-State: APjAAAWvZn8629dkUMjrZTVe8MdTnt+RLNVK3w+gpkNQ9zcgnf//Rn6T VHQ70gVaO/AzsaREOPobx+9pk34xf38= X-Google-Smtp-Source: APXvYqzsg5CcUyxH93GSan0cDrX/mujsOXe2qpS4IHP/NDmJjgYxpAzH3k0YLTcFIrZrYfaBKrjJyw== X-Received: by 2002:a62:594b:: with SMTP id n72mr10706084pfb.186.1556570009856; Mon, 29 Apr 2019 13:33:29 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id i4sm3557424pfa.44.2019.04.29.13.33.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Apr 2019 13:33:28 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Stephen Hemminger Date: Mon, 29 Apr 2019 13:33:24 -0700 Message-Id: <20190429203325.10696-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190429203325.10696-1-stephen@networkplumber.org> References: <20190429203325.10696-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/2] net/netvsc: reset mbuf port on VF receive X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Redo the receive logic to set m->port on packets received on VF. When using VF, still need to check for packets and completions arriving on the VMBus path even if application is not doing bursting (ie n_rx == 0). Also, fix comment. Signed-off-by: Stephen Hemminger --- drivers/net/netvsc/hn_rxtx.c | 47 +++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index c67e9ae25376..7856f7e6ec48 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -1393,6 +1393,24 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return nb_tx; } +static uint16_t +hn_recv_vf(uint16_t vf_port, const struct hn_rx_queue *rxq, + struct rte_mbuf **rx_pkts, uint16_t nb_pkts) +{ + uint16_t i, n; + + if (unlikely(nb_pkts == 0)) + return 0; + + n = rte_eth_rx_burst(vf_port, rxq->queue_id, rx_pkts, nb_pkts); + + /* relabel the received mbufs */ + for (i = 0; i < n; i++) + rx_pkts[i]->port = rxq->port_id; + + return n; +} + uint16_t hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { @@ -1404,30 +1422,21 @@ hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) if (unlikely(hv->closed)) return 0; - /* Transmit over VF if present and up */ + /* Receive from VF if present and up */ vf_dev = hn_get_vf_dev(hv); - if (vf_dev && vf_dev->data->dev_started) { - /* Normally, with SR-IOV the ring buffer will be empty */ + /* Check for new completions */ + if (likely(rte_ring_count(rxq->rx_ring) < nb_pkts)) hn_process_events(hv, rxq->queue_id, 0); - /* Get mbufs some bufs off of staging ring */ - nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring, - (void **)rx_pkts, - nb_pkts / 2, NULL); - /* And rest off of VF */ - nb_rcv += rte_eth_rx_burst(vf_dev->data->port_id, - rxq->queue_id, - rx_pkts + nb_rcv, nb_pkts - nb_rcv); - } else { - /* If receive ring is not full then get more */ - if (rte_ring_count(rxq->rx_ring) < nb_pkts) - hn_process_events(hv, rxq->queue_id, 0); + /* Always check the vmbus path for multicast and new flows */ + nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring, + (void **)rx_pkts, nb_pkts, NULL); - nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring, - (void **)rx_pkts, - nb_pkts, NULL); - } + /* If VF is available, check that as well */ + if (vf_dev && vf_dev->data->dev_started) + nb_rcv += hn_recv_vf(vf_dev->data->port_id, rxq, + rx_pkts + nb_rcv, nb_pkts - nb_rcv); return nb_rcv; }