From patchwork Tue Jan 16 11:52:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rafal Kozik X-Patchwork-Id: 33792 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 F1D571B1AB; Tue, 16 Jan 2018 12:53:08 +0100 (CET) Received: from mail-lf0-f65.google.com (mail-lf0-f65.google.com [209.85.215.65]) by dpdk.org (Postfix) with ESMTP id B76361B022 for ; Tue, 16 Jan 2018 12:53:04 +0100 (CET) Received: by mail-lf0-f65.google.com with SMTP id a204so8776653lfa.2 for ; Tue, 16 Jan 2018 03:53:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CyN/Tsnt+gfF6XbK76Cb+Rdbo30aZVIHGj0m3/4un48=; b=1w9HjFQouMNdzJUMwOEVpA+WApOIEVIVJkCW96nIZlXec1RrN8SUixq/SpAl+2202T 0+uUN9/gKUrlyMAiuM7Ab0EflIO7dZSJCyp385uDYD76VNNIBZrp1/GxDy9dha76EGXl hfSFtKYFSQS/gR9kB0bp3Zu0Orf8UfCEGHGyFrLQgGDIbMIRvR/5Hvcr8/5Qh+SIgOc+ Qmia9GLbzjczuec04dc2KGaTjqtoIa69ogeYfNC5f3LH7hUgF+AvEDGj0N+PxzTx4caR l3Rd0BLGGX/DkeE+8k5jJk6kOqMlzS9TbPvh6MhvuF4SDGZYGL35HchHTEmomXZwBx7e irgg== 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=CyN/Tsnt+gfF6XbK76Cb+Rdbo30aZVIHGj0m3/4un48=; b=hyvv6+MmVJOok2gtVvyFzvjz4zyrqjGcVKRo4eGLYfN6kaYrBhUdNholEbbCfcODLp D/Q0AYlyd1es5kLA9zhHROkG6DOEsHU0TOBYyLZarUMAGezLGDQzmuD2loREHF2Drsa5 X2iH92CGlS1PBCDXsXLChIy/SuEcx7i1vwr+3FietN4vne0329oqh4SzOkLXkCHmmCAC FyiJgxdXyuyqNAZ8Evr99VJsaVQJmirH1o/cg4bjJhezjK17SDhgAGmyRYZyCAuy9kLp 7j8cA05VV5ZqgnFXd6ZZY5w8kNVEItCXoGXHHpAmS3q847XrjcXGJq0U6otMPAMvfXvW dmNw== X-Gm-Message-State: AKwxyteIPaCVsLr3+rNQ6XA2p7bxIVZ41t2TJlZ1HGlbQih1P2IO37Xq L5joB1sVUCEfVZ8feZjOgYhdmiCsheloyQ== X-Google-Smtp-Source: ACJfBot0rSfaf3/P9qvHZs/jjvFKhLRzbc57YB9RDTO1qKCU3FDVuYnewZNJ0FLisCk42ZxR4SGfQw== X-Received: by 10.25.147.11 with SMTP id v11mr14502214lfd.93.1516103584221; Tue, 16 Jan 2018 03:53:04 -0800 (PST) Received: from rafalkozik.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id u87sm353739lfk.8.2018.01.16.03.53.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 03:53:03 -0800 (PST) From: Rafal Kozik To: dev@dpdk.org Cc: mw@semihalf.com, mk@semihalf.com, gtzalik@amazon.com, evgenys@amazon.com, matua@amazon.com, igorch@amazon.com, Rafal Kozik Date: Tue, 16 Jan 2018 12:52:43 +0100 Message-Id: <1516103563-9275-3-git-send-email-rk@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516103563-9275-1-git-send-email-rk@semihalf.com> References: <1516103563-9275-1-git-send-email-rk@semihalf.com> Subject: [dpdk-dev] [PATCH 2/2] net/ena: convert to new Rx offloads API 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" Ethdev Rx offloads API has changed since: commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") This commit support the new Rx offloads API. Signed-off-by: Rafal Kozik Reviewed-By: Shahaf Shuler --- drivers/net/ena/ena_ethdev.c | 36 ++++++++++++++++++++++++++++++++++-- drivers/net/ena/ena_ethdev.h | 2 ++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 6473776..f069ca8 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -237,6 +237,8 @@ static int ena_rss_reta_query(struct rte_eth_dev *dev, static int ena_get_sset_count(struct rte_eth_dev *dev, int sset); static bool ena_are_tx_queue_offloads_allowed(struct ena_adapter *adapter, uint64_t offloads); +static bool ena_are_rx_queue_offloads_allowed(struct ena_adapter *adapter, + uint64_t offloads); static const struct eth_dev_ops ena_dev_ops = { .dev_configure = ena_dev_configure, @@ -766,7 +768,8 @@ static uint32_t ena_get_mtu_conf(struct ena_adapter *adapter) { uint32_t max_frame_len = adapter->max_mtu; - if (adapter->rte_eth_dev_data->dev_conf.rxmode.jumbo_frame == 1) + if (adapter->rte_eth_dev_data->dev_conf.rxmode.offloads & + DEV_RX_OFFLOAD_JUMBO_FRAME) max_frame_len = adapter->rte_eth_dev_data->dev_conf.rxmode.max_rx_pkt_len; @@ -1065,7 +1068,7 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, __rte_unused unsigned int socket_id, - __rte_unused const struct rte_eth_rxconf *rx_conf, + const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mp) { struct ena_com_create_io_ctx ctx = @@ -1101,6 +1104,11 @@ static int ena_rx_queue_setup(struct rte_eth_dev *dev, return -EINVAL; } + if (!ena_are_rx_queue_offloads_allowed(adapter, rx_conf->offloads)) { + RTE_LOG(ERR, PMD, "Unsupported queue offloads\n"); + return -EINVAL; + } + ena_qid = ENA_IO_RXQ_IDX(queue_idx); ctx.qid = ena_qid; @@ -1405,6 +1413,7 @@ static int ena_dev_configure(struct rte_eth_dev *dev) struct ena_adapter *adapter = (struct ena_adapter *)(dev->data->dev_private); uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads; + uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads; if ((tx_offloads & adapter->tx_supported_offloads) != tx_offloads) { RTE_LOG(ERR, PMD, "Some Tx offloads are not supported " @@ -1413,6 +1422,13 @@ static int ena_dev_configure(struct rte_eth_dev *dev) return -ENOTSUP; } + if ((rx_offloads & adapter->rx_supported_offloads) != rx_offloads) { + RTE_LOG(ERR, PMD, "Some Rx offloads are not supported " + "requested 0x%lx supported 0x%lx\n", + rx_offloads, adapter->rx_supported_offloads); + return -ENOTSUP; + } + if (!(adapter->state == ENA_ADAPTER_STATE_INIT || adapter->state == ENA_ADAPTER_STATE_STOPPED)) { PMD_INIT_LOG(ERR, "Illegal adapter state: %d", @@ -1434,6 +1450,7 @@ static int ena_dev_configure(struct rte_eth_dev *dev) } adapter->tx_selected_offloads = tx_offloads; + adapter->rx_selected_offloads = rx_offloads; return 0; } @@ -1475,6 +1492,19 @@ static bool ena_are_tx_queue_offloads_allowed(struct ena_adapter *adapter, return true; } +static bool ena_are_rx_queue_offloads_allowed(struct ena_adapter *adapter, + uint64_t offloads) +{ + uint64_t port_offloads = adapter->rx_selected_offloads; + + /* Check if port supports all requested offloads. + * True if all offloads selected for queue are set for port. + */ + if ((offloads & port_offloads) != offloads) + return false; + return true; +} + static void ena_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { @@ -1529,6 +1559,7 @@ static void ena_infos_get(struct rte_eth_dev *dev, /* Inform framework about available features */ dev_info->rx_offload_capa = rx_feat; + dev_info->rx_queue_offload_capa = rx_feat; dev_info->tx_offload_capa = tx_feat; dev_info->tx_queue_offload_capa = tx_feat; @@ -1541,6 +1572,7 @@ static void ena_infos_get(struct rte_eth_dev *dev, dev_info->reta_size = ENA_RX_RSS_TABLE_SIZE; adapter->tx_supported_offloads = tx_feat; + adapter->rx_supported_offloads = rx_feat; } static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 3e72777..394d05e 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -178,6 +178,8 @@ struct ena_adapter { uint64_t tx_supported_offloads; uint64_t tx_selected_offloads; + uint64_t rx_supported_offloads; + uint64_t rx_selected_offloads; }; #endif /* _ENA_ETHDEV_H_ */