From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC325C433DF for ; Wed, 14 Oct 2020 09:08:32 +0000 (UTC) Received: from dpdk.org (dpdk.org [92.243.14.124]) by mail.kernel.org (Postfix) with ESMTP id E6DB920878 for ; Wed, 14 Oct 2020 09:08:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E6DB920878 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CE6CB1D955; Wed, 14 Oct 2020 11:08:29 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id E9FB51D666 for ; Wed, 14 Oct 2020 11:08:26 +0200 (CEST) IronPort-SDR: A+ureIujP5Zty5QWXVbuDvyMyDj2BYijinEHf7LvmX30CRJ/OMZyFZZa+HRJEpVjdMX8SwKf+/ dFVl21K/hkkg== X-IronPort-AV: E=McAfee;i="6000,8403,9773"; a="183584054" X-IronPort-AV: E=Sophos;i="5.77,374,1596524400"; d="scan'208";a="183584054" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Oct 2020 02:08:24 -0700 IronPort-SDR: DTRRjDAOdWq12B6h6ZKmiTBEFZz+42LcMx+kx9SmXQ9w5fDbHLyTivjd4xAhSX4jrVT0ivYZza /OxBdXE3ituQ== X-IronPort-AV: E=Sophos;i="5.77,374,1596524400"; d="scan'208";a="520307178" Received: from cfitzp2-mobl1.ger.corp.intel.com (HELO [10.251.84.158]) ([10.251.84.158]) by fmsmga006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Oct 2020 02:08:22 -0700 To: "Guo, Jia" , "dev@dpdk.org" Cc: "Ma, Liang J" , "Xing, Beilei" , "Hunt, David" , "Ananyev, Konstantin" , "jerinjacobk@gmail.com" , "Richardson, Bruce" , "thomas@monjalon.net" , "McDaniel, Timothy" , "Eads, Gage" , "Macnamara, Chris" References: <1601647919-25312-1-git-send-email-liang.j.ma@intel.com> <78bfa354463be2c3560ee97c369ae7266e0fb50f.1602258833.git.anatoly.burakov@intel.com> From: "Burakov, Anatoly" Message-ID: Date: Wed, 14 Oct 2020 10:08:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v5 07/10] net/i40e: implement power management 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" On 14-Oct-20 4:19 AM, Guo, Jia wrote: > >> -----Original Message----- >> From: Burakov, Anatoly >> Sent: Saturday, October 10, 2020 12:02 AM >> To: dev@dpdk.org >> Cc: Ma, Liang J ; Xing, Beilei ; >> Guo, Jia ; Hunt, David ; >> Ananyev, Konstantin ; >> jerinjacobk@gmail.com; Richardson, Bruce ; >> thomas@monjalon.net; McDaniel, Timothy ; >> Eads, Gage ; Macnamara, Chris >> >> Subject: [PATCH v5 07/10] net/i40e: implement power management API >> >> From: Liang Ma >> >> Implement support for the power management API by implementing a >> `get_wake_addr` function that will return an address of an RX ring's status bit. >> >> Signed-off-by: Liang Ma >> Signed-off-by: Anatoly Burakov >> --- >> drivers/net/i40e/i40e_ethdev.c | 1 + >> drivers/net/i40e/i40e_rxtx.c | 23 +++++++++++++++++++++++ >> drivers/net/i40e/i40e_rxtx.h | 2 ++ >> 3 files changed, 26 insertions(+) >> >> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c >> index 943cfe71dc..cab86f8ec9 100644 >> --- a/drivers/net/i40e/i40e_ethdev.c >> +++ b/drivers/net/i40e/i40e_ethdev.c >> @@ -513,6 +513,7 @@ static const struct eth_dev_ops i40e_eth_dev_ops = { >> .mtu_set = i40e_dev_mtu_set, >> .tm_ops_get = i40e_tm_ops_get, >> .tx_done_cleanup = i40e_tx_done_cleanup, >> + .get_wake_addr = i40e_get_wake_addr, >> }; >> >> /* store statistics names and its offset in stats structure */ diff --git >> a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index >> 322fc1ed75..c17f27292f 100644 >> --- a/drivers/net/i40e/i40e_rxtx.c >> +++ b/drivers/net/i40e/i40e_rxtx.c >> @@ -71,6 +71,29 @@ >> #define I40E_TX_OFFLOAD_NOTSUP_MASK \ >> (PKT_TX_OFFLOAD_MASK ^ I40E_TX_OFFLOAD_MASK) >> >> +int >> +i40e_get_wake_addr(void *rx_queue, volatile void **tail_desc_addr, >> + uint64_t *expected, uint64_t *mask) >> +{ >> + struct i40e_rx_queue *rxq = rx_queue; >> + volatile union i40e_rx_desc *rxdp; >> + uint16_t desc; >> + >> + desc = rxq->rx_tail; >> + rxdp = &rxq->rx_ring[desc]; >> + /* watch for changes in status bit */ >> + *tail_desc_addr = &rxdp->wb.qword1.status_error_len; >> + >> + /* >> + * we expect the DD bit to be set to 1 if this descriptor was already >> + * written to. >> + */ >> + *expected = rte_cpu_to_le_64(1 << >> I40E_RX_DESC_STATUS_DD_SHIFT); >> + *mask = rte_cpu_to_le_64(1 << I40E_RX_DESC_STATUS_DD_SHIFT); >> + >> + return 0; > > Suppose that it will always success to get wake addr in i40e, right? Yes. We've already checked all the parameters (queue etc.) in ethdev, so once we're here, that means there's no way this could fail as far as i can tell. > >> +} >> + >> static inline void >> i40e_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile union i40e_rx_desc >> *rxdp) { diff --git a/drivers/net/i40e/i40e_rxtx.h >> b/drivers/net/i40e/i40e_rxtx.h index 57d7b4160b..f23a2073e3 100644 >> --- a/drivers/net/i40e/i40e_rxtx.h >> +++ b/drivers/net/i40e/i40e_rxtx.h >> @@ -248,6 +248,8 @@ uint16_t i40e_recv_scattered_pkts_vec_avx2(void >> *rx_queue, >> struct rte_mbuf **rx_pkts, uint16_t nb_pkts); uint16_t >> i40e_xmit_pkts_vec_avx2(void *tx_queue, struct rte_mbuf **tx_pkts, >> uint16_t nb_pkts); >> +int i40e_get_wake_addr(void *rx_queue, volatile void **tail_desc_addr, >> + uint64_t *expected, uint64_t *value); >> >> /* For each value it means, datasheet of hardware can tell more details >> * >> -- >> 2.17.1 -- Thanks, Anatoly