From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 17213A034E; Wed, 6 May 2020 21:52:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 08B311DAE4; Wed, 6 May 2020 21:52:36 +0200 (CEST) Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) by dpdk.org (Postfix) with ESMTP id 0D39D1DAE0 for ; Wed, 6 May 2020 21:52:33 +0200 (CEST) Received: by mail-pf1-f196.google.com with SMTP id y25so1589076pfn.5 for ; Wed, 06 May 2020 12:52:33 -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=fIZ5vffQKrcqzuRihAS9zQpoBRDYJOS2j2Y1Zo5vZf0=; b=WEMsiaPg/REhp1C6XOhQeXd2WKmnHOeO5EL4sxqueFaZpqojiBRXamyCNjlVwnrRwf phQygjXGjN4wiYIZKuqP1Iqx51Q2VRuoAtyDD8BIpYO94qzoENGElr76AjQgKy0CXCCT eyWOxhnIy6/ndpa9m87SucBMvDESMtAd+aM04eNy8Co6sDOqw1x88jmND7b/949KJx51 7Bzb4tdX7bOQvL39WS771onyVB/ji/kOnEpr7FmwHYG5EKaPfUmkLo0azhzyWO6DjfNT GCbks0nmBiAW/E0CLMjpHC/uy6Ki1wRPRqNFlo7ZlhI4J9FAgkcDnBSyXW81FSsillT5 BipA== 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=fIZ5vffQKrcqzuRihAS9zQpoBRDYJOS2j2Y1Zo5vZf0=; b=Wko4VM0OhzY4F2au2P3Hvad9mMMfuBCSD2uTUmlYcG9O4jWu3/b3NgYWkYF0/BQPoD VR8/2VhKnLuIvtnSSBMfcr2kRfyYDadV74B2XzOxEGXGhoKyvctxcrJ+I+THR+RCzej/ Dtt3wxY5JmM0FZ29JHSFHuaajUrydxAQGQfByxeqq59AWrfjJ+2sYGIdEoIbket5/UU/ IOWsIJ855P0x7ICilvurvxm714xnubDuOhBdj4X9a82Iij1vkcLxTKw/DcUKWEu2cM9E zqNJfd51RSCVNZlekZnBP6bukpmeLU7qLiSRzPdN2TB/QMtcASJHOaO137G8/CPZRMf6 vsCw== X-Gm-Message-State: AGi0PuakyP80WozHDE3ULHZdC2QMMQqJQTpzh8PBL7gdYFYVcdb1qDDf JAA9E35I4hDqyVFdY5CVyjmB1kx4OA23Jw== X-Google-Smtp-Source: APiQypL20UoTKyKTgWkVkQo656zEaOPZFo76AmXogDhQiWEleFW5en5Ic61zGgx/fNKTLk4F07EHDg== X-Received: by 2002:a63:6546:: with SMTP id z67mr8275326pgb.10.1588794752632; Wed, 06 May 2020 12:52:32 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id w69sm2655604pff.168.2020.05.06.12.52.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2020 12:52:31 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 6 May 2020 12:52:19 -0700 Message-Id: <20200506195221.26306-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200506195221.26306-1-stephen@networkplumber.org> References: <20200506192730.21613-1-stephen@networkplumber.org> <20200506195221.26306-1-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2 2/4] net/netvsc: implement rx/tx descriptor status functions 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" These functions are useful for applications and debugging. The netvsc PMD also transparently handles the rx/tx descriptor functions for underlying VF device. Signed-off-by: Stephen Hemminger --- drivers/net/netvsc/hn_ethdev.c | 3 +++ drivers/net/netvsc/hn_rxtx.c | 39 ++++++++++++++++++++++++++++++++++ drivers/net/netvsc/hn_var.h | 5 +++++ 3 files changed, 47 insertions(+) diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index b890fa3befa8..675a49e66a57 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -875,8 +875,11 @@ static const struct eth_dev_ops hn_eth_dev_ops = { .tx_queue_setup = hn_dev_tx_queue_setup, .tx_queue_release = hn_dev_tx_queue_release, .tx_done_cleanup = hn_dev_tx_done_cleanup, + .tx_descriptor_status = hn_dev_tx_descriptor_status, .rx_queue_setup = hn_dev_rx_queue_setup, .rx_queue_release = hn_dev_rx_queue_release, + .rx_queue_count = hn_dev_rx_queue_count, + .rx_descriptor_status = hn_dev_rx_queue_status, .link_update = hn_dev_link_update, .stats_get = hn_dev_stats_get, .stats_reset = hn_dev_stats_reset, diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index 668f48fcbf15..537fd0125687 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -369,6 +369,20 @@ hn_dev_tx_queue_release(void *arg) rte_free(txq); } +int hn_dev_tx_descriptor_status(void *arg, uint16_t offset) +{ + const struct hn_tx_queue *txq = arg; + uint16_t used; + + hn_process_events(txq->hv, txq->queue_id, 0); + + used = rte_mempool_in_use_count(txq->txdesc_pool); + if (offset < used) + return RTE_ETH_TX_DESC_FULL; + else + return RTE_ETH_TX_DESC_DONE; +} + static void hn_nvs_send_completed(struct rte_eth_dev *dev, uint16_t queue_id, unsigned long xactid, const struct hn_nvs_rndis_ack *ack) @@ -966,6 +980,31 @@ hn_dev_rx_queue_release(void *arg) hn_rx_queue_free(rxq, true); } +/* + * Get the number of used descriptor in a rx queue + * For this device that means how many packets are pending in the ring. + */ +uint32_t +hn_dev_rx_queue_count(struct rte_eth_dev *dev, uint16_t queue_id) +{ + struct hn_rx_queue *rxq = dev->data->rx_queues[queue_id]; + + return rte_ring_count(rxq->rx_ring); +} + +int hn_dev_rx_queue_status(void *arg, uint16_t offset) +{ + const struct hn_rx_queue *rxq = arg; + + hn_process_events(rxq->hv, rxq->queue_id, 0); + if (offset >= rxq->rx_ring->capacity) + return -EINVAL; + else if (offset < rte_ring_count(rxq->rx_ring)) + return RTE_ETH_RX_DESC_DONE; + else + return RTE_ETH_RX_DESC_AVAIL; +} + int hn_dev_tx_done_cleanup(void *arg, uint32_t free_cnt) { diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h index 93168d2e0102..ded0d4c60a04 100644 --- a/drivers/net/netvsc/hn_var.h +++ b/drivers/net/netvsc/hn_var.h @@ -169,6 +169,7 @@ void hn_dev_tx_queue_release(void *arg); void hn_dev_tx_queue_info(struct rte_eth_dev *dev, uint16_t queue_idx, struct rte_eth_txq_info *qinfo); int hn_dev_tx_done_cleanup(void *arg, uint32_t free_cnt); +int hn_dev_tx_descriptor_status(void *arg, uint16_t offset); struct hn_rx_queue *hn_rx_queue_alloc(struct hn_data *hv, uint16_t queue_id, @@ -181,6 +182,8 @@ int hn_dev_rx_queue_setup(struct rte_eth_dev *dev, void hn_dev_rx_queue_info(struct rte_eth_dev *dev, uint16_t queue_id, struct rte_eth_rxq_info *qinfo); void hn_dev_rx_queue_release(void *arg); +uint32_t hn_dev_rx_queue_count(struct rte_eth_dev *dev, uint16_t queue_id); +int hn_dev_rx_queue_status(void *rxq, uint16_t offset); void hn_dev_free_queues(struct rte_eth_dev *dev); /* Check if VF is attached */ @@ -231,6 +234,8 @@ int hn_vf_tx_queue_setup(struct rte_eth_dev *dev, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); void hn_vf_tx_queue_release(struct hn_data *hv, uint16_t queue_id); +int hn_vf_tx_queue_status(struct hn_data *hv, uint16_t queue_id, uint16_t offset); + int hn_vf_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id, -- 2.20.1