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 97869A034E; Wed, 6 May 2020 21:28:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1368D1DA45; Wed, 6 May 2020 21:27:53 +0200 (CEST) Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by dpdk.org (Postfix) with ESMTP id E5A7B1D9FC for ; Wed, 6 May 2020 21:27:49 +0200 (CEST) Received: by mail-pl1-f196.google.com with SMTP id s10so941508plr.1 for ; Wed, 06 May 2020 12:27:49 -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=kTmb/AeAlAB1y3uJXNINs0q6dLfVuLP5uSfwVW6dGar1gM+VgcEfuh5yYhqWqfkVPv qgRrdeOtRHMa7KaXW5jljJU5fdXQL/K2uWukT91xBp0d1YRyM1C069NuQPa05dx9nLOS JCQsir0XAX5tKA9C92kkDfgFq/m9k/3nawVFc91L5Ij9oY1dlEaUDiA01Bj2jIihb86g bjW0Rdx5UZv6zAP+/cz+zvq9Ld+fCTe97Oh4f9l1w+Za6N3fMBhEcCRVgV8hh9JcEAHh 4zDOqPS9tEoN1gBEul98hAT/St9qL2gn5xI99d3sc/kgAlNTo2v6LyKTHE9XuJNjQAWm 9LAg== 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=svsz0UOXOEPWUoAfVuhtHe/tqUoJWMeo0hBrZW4h+htF6iObLjdg1RUGmZ2zeziyoQ Ks82yc9jWE4p2rCTDtFjibBZ3woKEIiwQpWJavsx5yDlExpUMMoWixiCGD4cUeM/42pv k8R0ENVZuxxv80CimB6IOq2xyVKvs0W+WubaNFgq0dUV5iRFUivrMTxpq43YCxMpijWC brchb+yJagMANKExOMdjJdYdifv2BFPkQaJL35y0tIzQh0F7QF/ZxQmu2dFRq4lC/0VY vqDvRvuBvoH2jhV/FpmcuAFC0FLGshOvU1CMcMGN7QO2XnfddPpXtt2bySA/KKof6KRO akXQ== X-Gm-Message-State: AGi0PuYX77siIT9EbPTsQs4xoE0lsJLs62A+QZSCdkpJaNejdPbSnmJu lxrtqypyz56n7I3MlmYIoNwEY5D0YAIzIg== X-Google-Smtp-Source: APiQypINnFeqp29MfHVC3ze/12OUdVedlgLYrhKF6jokW03/+79HUHLvmD0GFh1eU0phWVFayFh3vA== X-Received: by 2002:a17:902:8303:: with SMTP id bd3mr9532780plb.217.1588793268465; Wed, 06 May 2020 12:27:48 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id i15sm2105511pgj.30.2020.05.06.12.27.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 May 2020 12:27:47 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Wed, 6 May 2020 12:27:28 -0700 Message-Id: <20200506192730.21613-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200506192730.21613-1-stephen@networkplumber.org> References: <20200506192730.21613-1-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 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