From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7F61CA00C4; Wed, 4 May 2022 16:23:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 28FEA40C35; Wed, 4 May 2022 16:23:39 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 019BE4069F for ; Wed, 4 May 2022 16:23:37 +0200 (CEST) Received: from [192.168.108.214] (unknown [188.170.87.12]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 0B3A982; Wed, 4 May 2022 17:23:37 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 0B3A982 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1651674217; bh=80zrrshnAKx5jD4ADrg4LCLJ2hEgoFKj5HHBMEyx24I=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=V8cTbI8KLijRx24kwopffjUfxq7+PdBDzF6iJ2KMOE3iXr5+R8aR29bHAtI7g011u 70R2z1UalHaD50BIpObrTcbaVXE5qaFH51Zh06HNjfcXT6KjPhjwAlfk4CaHmXkSGd DfPaGK4BUaBhiUPWGW9sbdOzycXQX5vemfN1kpK8= Message-ID: <3c968a08-113b-37f2-dbc6-1d0b62e7f5b8@oktetlabs.ru> Date: Wed, 4 May 2022 17:23:36 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 Subject: Re: [PATCH 2/8] vmxnet3: implement reta query and reta update Content-Language: en-US To: Pankaj Gupta , jbehrens@vmware.com, yongwang@vmware.com Cc: dev@dpdk.org References: <20220503042257.15626-1-pagupta@vmware.com> <20220503042257.15626-3-pagupta@vmware.com> From: Andrew Rybchenko In-Reply-To: <20220503042257.15626-3-pagupta@vmware.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 5/3/22 07:22, Pankaj Gupta wrote: > Added reta query and reta update support for VMXNET3 > > Tested, using testpmd, for different hardware version on ESXi 7.0 Update 2. > > Signed-off-by: Pankaj Gupta > --- > drivers/net/vmxnet3/vmxnet3_ethdev.c | 67 ++++++++++++++++++++++++++++ > 1 file changed, 67 insertions(+) > > diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c > index a7e1e5fef5..eb65499cf2 100644 > --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c > +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c > @@ -95,6 +95,14 @@ static int vmxnet3_mac_addr_set(struct rte_eth_dev *dev, > struct rte_ether_addr *mac_addr); > static void vmxnet3_process_events(struct rte_eth_dev *dev); > static void vmxnet3_interrupt_handler(void *param); > +static int > +vmxnet3_rss_reta_update(struct rte_eth_dev *dev, > + struct rte_eth_rss_reta_entry64 *reta_conf, > + uint16_t reta_size); > +static int > +vmxnet3_rss_reta_query(struct rte_eth_dev *dev, > + struct rte_eth_rss_reta_entry64 *reta_conf, > + uint16_t reta_size); > static int vmxnet3_dev_rx_queue_intr_enable(struct rte_eth_dev *dev, > uint16_t queue_id); > static int vmxnet3_dev_rx_queue_intr_disable(struct rte_eth_dev *dev, > @@ -137,6 +145,8 @@ static const struct eth_dev_ops vmxnet3_eth_dev_ops = { > .tx_queue_release = vmxnet3_dev_tx_queue_release, > .rx_queue_intr_enable = vmxnet3_dev_rx_queue_intr_enable, > .rx_queue_intr_disable = vmxnet3_dev_rx_queue_intr_disable, > + .reta_update = vmxnet3_rss_reta_update, > + .reta_query = vmxnet3_rss_reta_query, > }; > > struct vmxnet3_xstats_name_off { > @@ -1696,3 +1706,60 @@ RTE_PMD_REGISTER_PCI_TABLE(net_vmxnet3, pci_id_vmxnet3_map); > RTE_PMD_REGISTER_KMOD_DEP(net_vmxnet3, "* igb_uio | uio_pci_generic | vfio-pci"); > RTE_LOG_REGISTER_SUFFIX(vmxnet3_logtype_init, init, NOTICE); > RTE_LOG_REGISTER_SUFFIX(vmxnet3_logtype_driver, driver, NOTICE); > + > +static int > +vmxnet3_rss_reta_update(struct rte_eth_dev *dev, > + struct rte_eth_rss_reta_entry64 *reta_conf, > + uint16_t reta_size) > +{ > + int i, idx, shift; > + struct vmxnet3_hw *hw = dev->data->dev_private; > + struct VMXNET3_RSSConf *dev_rss_conf = hw->rss_conf; > + > + if (reta_size != dev_rss_conf->indTableSize) { > + PMD_DRV_LOG(ERR, > + "The size of hash lookup table configured (%d) doesn't match " > + "the supported number (%d)", > + reta_size, dev_rss_conf->indTableSize); > + return -EINVAL; > + } > + > + for (i = 0; i < reta_size; i++) { > + idx = i / RTE_ETH_RETA_GROUP_SIZE; > + shift = i % RTE_ETH_RETA_GROUP_SIZE; > + if (reta_conf[idx].mask & (1ULL << shift)) Please, use RTE_BIT64(shift) > + dev_rss_conf->indTable[i] = (uint8_t)reta_conf[idx].reta[shift]; Not a problem, but as I understand explicit type cast is not required. > + } > + > + VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD, > + VMXNET3_CMD_UPDATE_RSSIDT); > + > + return 0; > +} > + > +static int > +vmxnet3_rss_reta_query(struct rte_eth_dev *dev, > + struct rte_eth_rss_reta_entry64 *reta_conf, > + uint16_t reta_size) > +{ > + int i, idx, shift; > + struct vmxnet3_hw *hw = dev->data->dev_private; > + struct VMXNET3_RSSConf *dev_rss_conf = hw->rss_conf; > + > + if (reta_size != dev_rss_conf->indTableSize) { > + PMD_DRV_LOG(ERR, > + "Size of requested hash lookup table (%d) doesn't " > + "match the configured size (%d)", > + reta_size, dev_rss_conf->indTableSize); > + return -EINVAL; > + } > + > + for (i = 0; i < reta_size; i++) { > + idx = i / RTE_ETH_RETA_GROUP_SIZE; > + shift = i % RTE_ETH_RETA_GROUP_SIZE; > + if (reta_conf[idx].mask & (1ULL << shift)) Use RTE_BIT64(shift) > + reta_conf[idx].reta[shift] = dev_rss_conf->indTable[i]; > + } > + > + return 0; > +}