DPDK patches and discussions
 help / color / mirror / Atom feed
From: Michal Krawczyk <mk@semihalf.com>
To: dev@dpdk.org
Cc: gtzalik@amazon.com, igorch@amazon.com,
	Michal Krawczyk <mk@semihalf.com>,
	Marcin Wojtas <mw@semihalf.com>,
	Evgeny Schemeilin <evgenys@amazon.com>
Subject: [dpdk-dev] [PATCH 11/20] net/ena/base: check for RSS key configuration support
Date: Thu, 17 Sep 2020 07:30:26 +0200	[thread overview]
Message-ID: <20200917053035.1889989-12-mk@semihalf.com> (raw)
In-Reply-To: <20200917053035.1889989-1-mk@semihalf.com>

Setting RSS hash function could not be supported by the device. In that
situation there is no need to fill in default hash key or even allocate
hash key.

Signed-off-by: Michal Krawczyk <mk@semihalf.com>
Reviewed-by: Igor Chauskin <igorch@amazon.com>
Reviewed-by: Guy Tzalik <gtzalik@amazon.com>
---
 drivers/net/ena/base/ena_com.c                 | 13 ++++++++++---
 drivers/net/ena/base/ena_defs/ena_admin_defs.h | 15 ++++++++++++++-
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ena/base/ena_com.c b/drivers/net/ena/base/ena_com.c
index ea7d6788c9..9764bd2f48 100644
--- a/drivers/net/ena/base/ena_com.c
+++ b/drivers/net/ena/base/ena_com.c
@@ -1083,6 +1083,9 @@ static int ena_com_hash_key_allocate(struct ena_com_dev *ena_dev)
 {
 	struct ena_rss *rss = &ena_dev->rss;
 
+	if (!ena_com_check_supported_feature_id(ena_dev, ENA_ADMIN_RSS_HASH_FUNCTION))
+		return ENA_COM_UNSUPPORTED;
+
 	ENA_MEM_ALLOC_COHERENT(ena_dev->dmadev,
 			       sizeof(*rss->hash_key),
 			       rss->hash_key,
@@ -2719,12 +2722,16 @@ int ena_com_rss_init(struct ena_com_dev *ena_dev, u16 indr_tbl_log_size)
 	if (unlikely(rc))
 		goto err_indr_tbl;
 
+	/* The following function might return unsupported in case the
+	 * device doesn't support setting the key / hash function. We can safely
+	 * ignore this error and have indirection table support only.
+	 */
 	rc = ena_com_hash_key_allocate(ena_dev);
-	if (unlikely(rc))
+	if (likely(!rc))
+		ena_com_hash_key_fill_default_key(ena_dev);
+	else if (rc != ENA_COM_UNSUPPORTED)
 		goto err_hash_key;
 
-	ena_com_hash_key_fill_default_key(ena_dev);
-
 	rc = ena_com_hash_ctrl_init(ena_dev);
 	if (unlikely(rc))
 		goto err_hash_ctrl;
diff --git a/drivers/net/ena/base/ena_defs/ena_admin_defs.h b/drivers/net/ena/base/ena_defs/ena_admin_defs.h
index 9cea1c3905..30e5eead71 100644
--- a/drivers/net/ena/base/ena_defs/ena_admin_defs.h
+++ b/drivers/net/ena/base/ena_defs/ena_admin_defs.h
@@ -873,7 +873,8 @@ struct ena_admin_host_info {
 	 * 1 : rx_offset
 	 * 2 : interrupt_moderation
 	 * 3 : map_rx_buf_bidirectional
-	 * 31:4 : reserved
+	 * 4 : rss_configurable_function_key
+	 * 31:5 : reserved
 	 */
 	uint32_t driver_supported_features;
 };
@@ -1198,6 +1199,8 @@ struct ena_admin_ena_mmio_req_read_less_resp {
 #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK       BIT(2)
 #define ENA_ADMIN_HOST_INFO_MAP_RX_BUF_BIDIRECTIONAL_SHIFT  3
 #define ENA_ADMIN_HOST_INFO_MAP_RX_BUF_BIDIRECTIONAL_MASK   BIT(3)
+#define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT 4
+#define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK BIT(4)
 
 /* feature_rss_ind_table */
 #define ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK BIT(0)
@@ -1659,6 +1662,16 @@ static inline void set_ena_admin_host_info_map_rx_buf_bidirectional(struct ena_a
 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_MAP_RX_BUF_BIDIRECTIONAL_SHIFT) & ENA_ADMIN_HOST_INFO_MAP_RX_BUF_BIDIRECTIONAL_MASK;
 }
 
+static inline uint32_t get_ena_admin_host_info_rss_configurable_function_key(const struct ena_admin_host_info *p)
+{
+	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK) >> ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT;
+}
+
+static inline void set_ena_admin_host_info_rss_configurable_function_key(struct ena_admin_host_info *p, uint32_t val)
+{
+	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT) & ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK;
+}
+
 static inline uint8_t get_ena_admin_feature_rss_ind_table_one_entry_update(const struct ena_admin_feature_rss_ind_table *p)
 {
 	return p->flags & ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK;
-- 
2.25.1


  parent reply	other threads:[~2020-09-17  5:32 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-17  5:30 [dpdk-dev] [PATCH 00/20] Upgrade HAL and add ENI metrics support Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 01/20] net/ena/base: use min/max macros with type conversion Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 02/20] net/ena/base: specify operations of rte_delay Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 03/20] net/ena/base: support 'resource busy' admin status Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 04/20] net/ena/base: exponential delay in polling functions Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 05/20] net/ena/base: fix release of wait event Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 06/20] net/ena/base: remove MMIOWB_NOT_DEFINED ifdef Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 07/20] net/ena/base: rework setup of accelerated LLQ mode Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 08/20] net/ena/base: add ENI stats Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 09/20] net/ena/base: split RSS function and hash getters Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 10/20] net/ena/base: do not use hardcoded RSS key buffer size Michal Krawczyk
2020-09-17  5:30 ` Michal Krawczyk [this message]
2020-09-17  5:30 ` [dpdk-dev] [PATCH 12/20] net/ena/base: minor style adjustments Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 13/20] net/ena/base: add missing unlikely Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 14/20] net/ena/base: store admin stats as u64 Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 15/20] net/ena/base: add check for meta desc being NULL Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 16/20] net/ena/base: convert values to u32 before shifting Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 17/20] net/ena/base: simplify loop copying Rx descs Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 18/20] net/ena/base: update generation date and commit Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 19/20] net/ena: lock dynamic usages of the admin queue Michal Krawczyk
2020-09-17  5:30 ` [dpdk-dev] [PATCH 20/20] net/ena: expose ENI stats as additional xstats Michal Krawczyk
2020-09-17 17:02 ` [dpdk-dev] [PATCH 00/20] Upgrade HAL and add ENI metrics support Stephen Hemminger
2020-09-22 12:24   ` Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200917053035.1889989-12-mk@semihalf.com \
    --to=mk@semihalf.com \
    --cc=dev@dpdk.org \
    --cc=evgenys@amazon.com \
    --cc=gtzalik@amazon.com \
    --cc=igorch@amazon.com \
    --cc=mw@semihalf.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).