From patchwork Wed Jan 17 08:26:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rafal Kozik X-Patchwork-Id: 33902 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 4A5541B1A4; Wed, 17 Jan 2018 09:26:07 +0100 (CET) Received: from mail-lf0-f68.google.com (mail-lf0-f68.google.com [209.85.215.68]) by dpdk.org (Postfix) with ESMTP id D69861B1A2 for ; Wed, 17 Jan 2018 09:26:05 +0100 (CET) Received: by mail-lf0-f68.google.com with SMTP id g72so15334439lfg.5 for ; Wed, 17 Jan 2018 00:26:05 -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=QcjoVxY8ek6X98pFLs87lelXVwGVO3pwV7NlzSs4YgA=; b=x0xx+7Q/TOBRFkKjqnBa/b442FT+W0jZWzfSkG10QLtwng1354wCQNrQYPFrQK+ZQv QeauU+IWkrnnFdOdoOjirPxN/FS516W7NbzhT6sZVvZjNixkwmEtgjXorACpXIHY6qCt mLYdr5guKBwDKTmXZ+9NhhVky3Wy6+JMmTl1lDlYnqrjRfQtbhNctQ1kPLzRpEQ7xVGx KVvaoN5lfYtxm3Gh63csBiUKj9GiIUO/4hZqY8RFLxdiI95ALZzHT+UkHl8dV/mgISw0 0sHczpwVoB1MTav+CBURYmk+waYlt+V7oT5mW7bFjUViB83Hs1K0YQGTV5KbZvm+V7mT kQTw== 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=QcjoVxY8ek6X98pFLs87lelXVwGVO3pwV7NlzSs4YgA=; b=jrsk70gwEfVn/KVylIFBcsiTTn4ALB1X6f6yt3R2GgklGOuJj5JPTp4gX+4Pf+/gjr 1FXaNhwI1v+obmvWCT6JINHmuDPl1pkKOEutGGaiq8Kf/TD/D3mihzY1dyQ6mDNqZ3eH UMhLnua2MaXrKfmTopL3Vzcn0W6NYbiIWM7qXnd4ckAkyD+7Evrs75uNjpvqvpqOXhfi AAPeZpjsQ/v6nWS9QIfNSpj/58Hv1c1LhZKZ6lxJCKEnhGMmNNhPDthqV/rkeICYCOkB n/IT1v8RACRKGlWqL2RTkpPWiut02mLp48J5N5GtZkLUMZtZl486fDBL+40uq6f2QDN+ l20A== X-Gm-Message-State: AKwxytfqE3QyQfUOBUHK+R6qpxmBgJ0cXtNnikWKlAEYQsmIMrDGgulP xlfOzlfhVFAs1imbxJW+WroQoRjIRgwXPg== X-Google-Smtp-Source: ACJfBounAss2RQekF8BD9hf8aV9OH645iDW3soYg7nmVHxLMKxzHt3HGiu1dvJvTHXzKjJUZEONsUg== X-Received: by 10.25.22.2 with SMTP id m2mr14998514lfi.21.1516177565320; Wed, 17 Jan 2018 00:26:05 -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 x18sm771752ljx.5.2018.01.17.00.26.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 17 Jan 2018 00:26:04 -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: Wed, 17 Jan 2018 09:26:00 +0100 Message-Id: <1516177560-8690-1-git-send-email-rk@semihalf.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516103563-9275-3-git-send-email-rk@semihalf.com> References: <1516103563-9275-3-git-send-email-rk@semihalf.com> Subject: [dpdk-dev] [PATCH v2 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 Acked-by: Michal Krawczyk --- v2: * Use PRIx64 in printf. 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 54ccc3d..1dfbe39 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; @@ -1066,7 +1069,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 = @@ -1102,6 +1105,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; @@ -1406,6 +1414,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 " @@ -1414,6 +1423,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%" PRIx64 " supported 0x%" PRIx64 "\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", @@ -1435,6 +1451,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; } @@ -1476,6 +1493,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) { @@ -1530,6 +1560,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; @@ -1542,6 +1573,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_ */