From patchwork Mon Oct 18 14:16:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 101933 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5E3C8A0C43; Mon, 18 Oct 2021 08:12:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 258FA410E4; Mon, 18 Oct 2021 08:12:39 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 98A5240DF5 for ; Mon, 18 Oct 2021 08:12:35 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10140"; a="228058131" X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="228058131" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Oct 2021 23:12:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="482593200" Received: from limiao-icelake.sh.intel.com ([10.67.115.117]) by orsmga007.jf.intel.com with ESMTP; 17 Oct 2021 23:12:33 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Mon, 18 Oct 2021 14:16:34 +0000 Message-Id: <20211018141638.5916-2-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211018141638.5916-1-miao.li@intel.com> References: <20211015170911.478394-1-miao.li@intel.com> <20211018141638.5916-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 1/5] net/virtio: implement rte_power_monitor API 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 Sender: "dev" This patch implements rte_power_monitor API in virtio PMD to reduce power consumption when no packet come in. According to current semantics of power monitor, this commit adds a callback function to decide whether aborts the sleep by checking current value against the expected value and virtio_get_monitor_addr to provide address to monitor. When no packet come in, the value of address will not be changed and the running core will sleep. Once packets arrive, the value of address will be changed and the running core will wakeup. Signed-off-by: Miao Li Reviewed-by: Chenbo Xia Acked-by: David Hunt --- doc/guides/rel_notes/release_21_11.rst | 4 ++ drivers/net/virtio/virtio_ethdev.c | 56 ++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst index d5435a64aa..c298844898 100644 --- a/doc/guides/rel_notes/release_21_11.rst +++ b/doc/guides/rel_notes/release_21_11.rst @@ -80,6 +80,10 @@ New Features Added macros ETH_RSS_IPV4_CHKSUM and ETH_RSS_L4_CHKSUM, now IPv4 and TCP/UDP/SCTP header checksum field can be used as input set for RSS. +* **Updated virtio PMD.** + + Implement rte_power_monitor API in virtio PMD. + * **Updated af_packet ethdev driver.** * Default VLAN strip behavior was changed. VLAN tag won't be stripped diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 6aa36b3f39..1227f3f1f4 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -74,6 +74,8 @@ static int virtio_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr); static int virtio_intr_disable(struct rte_eth_dev *dev); +static int virtio_get_monitor_addr(void *rx_queue, + struct rte_power_monitor_cond *pmc); static int virtio_dev_queue_stats_mapping_set( struct rte_eth_dev *eth_dev, @@ -982,6 +984,7 @@ static const struct eth_dev_ops virtio_eth_dev_ops = { .mac_addr_add = virtio_mac_addr_add, .mac_addr_remove = virtio_mac_addr_remove, .mac_addr_set = virtio_mac_addr_set, + .get_monitor_addr = virtio_get_monitor_addr, }; /* @@ -1313,6 +1316,59 @@ virtio_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr) return 0; } +#define CLB_VAL_IDX 0 +#define CLB_MSK_IDX 1 +#define CLB_MATCH_IDX 2 +static int +virtio_monitor_callback(const uint64_t value, + const uint64_t opaque[RTE_POWER_MONITOR_OPAQUE_SZ]) +{ + const uint64_t m = opaque[CLB_MSK_IDX]; + const uint64_t v = opaque[CLB_VAL_IDX]; + const uint64_t c = opaque[CLB_MATCH_IDX]; + + if (c) + return (value & m) == v ? -1 : 0; + else + return (value & m) == v ? 0 : -1; +} + +static int +virtio_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc) +{ + struct virtnet_rx *rxvq = rx_queue; + struct virtqueue *vq = virtnet_rxq_to_vq(rxvq); + struct virtio_hw *hw; + + if (vq == NULL) + return -EINVAL; + + hw = vq->hw; + if (virtio_with_packed_queue(hw)) { + struct vring_packed_desc *desc; + desc = vq->vq_packed.ring.desc; + pmc->addr = &desc[vq->vq_used_cons_idx].flags; + if (vq->vq_packed.used_wrap_counter) + pmc->opaque[CLB_VAL_IDX] = + VRING_PACKED_DESC_F_AVAIL_USED; + else + pmc->opaque[CLB_VAL_IDX] = 0; + pmc->opaque[CLB_MSK_IDX] = VRING_PACKED_DESC_F_AVAIL_USED; + pmc->opaque[CLB_MATCH_IDX] = 1; + pmc->size = sizeof(desc[vq->vq_used_cons_idx].flags); + } else { + pmc->addr = &vq->vq_split.ring.used->idx; + pmc->opaque[CLB_VAL_IDX] = vq->vq_used_cons_idx + & (vq->vq_nentries - 1); + pmc->opaque[CLB_MSK_IDX] = vq->vq_nentries - 1; + pmc->opaque[CLB_MATCH_IDX] = 0; + pmc->size = sizeof(vq->vq_split.ring.used->idx); + } + pmc->fn = virtio_monitor_callback; + + return 0; +} + static int virtio_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) { From patchwork Mon Oct 18 14:16:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 101934 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 72825A0C43; Mon, 18 Oct 2021 08:12:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2EC82410EE; Mon, 18 Oct 2021 08:12:41 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 9EC1A40DF5 for ; Mon, 18 Oct 2021 08:12:38 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10140"; a="228058133" X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="228058133" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Oct 2021 23:12:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="482593215" Received: from limiao-icelake.sh.intel.com ([10.67.115.117]) by orsmga007.jf.intel.com with ESMTP; 17 Oct 2021 23:12:36 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Mon, 18 Oct 2021 14:16:35 +0000 Message-Id: <20211018141638.5916-3-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211018141638.5916-1-miao.li@intel.com> References: <20211015170911.478394-1-miao.li@intel.com> <20211018141638.5916-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 2/5] vhost: implement rte_power_monitor API 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 Sender: "dev" This patch defines rte_vhost_power_monitor_cond which is used to pass some information to vhost driver. The information is including the address to monitor, the expected value, the mask to extract value read from 'addr', the value size of monitor address, the match flag used to distinguish the value used to match something or not match something. Vhost driver can use these information to fill rte_power_monitor_cond. Signed-off-by: Miao Li Reviewed-by: Chenbo Xia Acked-by: David Hunt --- doc/guides/rel_notes/release_21_11.rst | 4 +++ lib/vhost/rte_vhost.h | 42 ++++++++++++++++++++++++++ lib/vhost/version.map | 3 ++ lib/vhost/vhost.c | 38 +++++++++++++++++++++++ 4 files changed, 87 insertions(+) diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst index c298844898..a497674352 100644 --- a/doc/guides/rel_notes/release_21_11.rst +++ b/doc/guides/rel_notes/release_21_11.rst @@ -80,6 +80,10 @@ New Features Added macros ETH_RSS_IPV4_CHKSUM and ETH_RSS_L4_CHKSUM, now IPv4 and TCP/UDP/SCTP header checksum field can be used as input set for RSS. +* **Added power monitor API in vhost library.** + + Added an API to support power monitor in vhost library. + * **Updated virtio PMD.** Implement rte_power_monitor API in virtio PMD. diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h index fd372d5259..6f0915b98f 100644 --- a/lib/vhost/rte_vhost.h +++ b/lib/vhost/rte_vhost.h @@ -292,6 +292,31 @@ struct vhost_device_ops { void *reserved[1]; /**< Reserved for future extension */ }; +/** + * Power monitor condition. + */ +struct rte_vhost_power_monitor_cond { + /**< Address to monitor for changes */ + volatile void *addr; + /**< If the `mask` is non-zero, location pointed + * to by `addr` will be read and masked, then + * compared with this value. + */ + uint64_t val; + /**< 64-bit mask to extract value read from `addr` */ + uint64_t mask; + /**< Data size (in bytes) that will be read from the + * monitored memory location (`addr`). + */ + uint8_t size; + /**< If 1, and masked value that read from 'addr' equals + * 'val', the driver should skip core sleep. If 0, and + * masked value that read from 'addr' does not equal 'val', + * the driver should skip core sleep. + */ + uint8_t match; +}; + /** * Convert guest physical address to host virtual address * @@ -903,6 +928,23 @@ int rte_vhost_vring_call(int vid, uint16_t vring_idx); */ uint32_t rte_vhost_rx_queue_count(int vid, uint16_t qid); +/** + * Get power monitor address of the vhost device + * + * @param vid + * vhost device ID + * @param queue_id + * vhost queue ID + * @param pmc + * power monitor condition + * @return + * 0 on success, -1 on failure + */ +__rte_experimental +int +rte_vhost_get_monitor_addr(int vid, uint16_t queue_id, + struct rte_vhost_power_monitor_cond *pmc); + /** * Get log base and log size of the vhost device * diff --git a/lib/vhost/version.map b/lib/vhost/version.map index 8ebde3f694..c8599ddb97 100644 --- a/lib/vhost/version.map +++ b/lib/vhost/version.map @@ -85,4 +85,7 @@ EXPERIMENTAL { rte_vhost_async_channel_register_thread_unsafe; rte_vhost_async_channel_unregister_thread_unsafe; rte_vhost_clear_queue_thread_unsafe; + + # added in 21.11 + rte_vhost_get_monitor_addr; }; diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index 9540522dac..36c896c9e2 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -1889,5 +1889,43 @@ rte_vhost_async_get_inflight(int vid, uint16_t queue_id) return ret; } +int +rte_vhost_get_monitor_addr(int vid, uint16_t queue_id, + struct rte_vhost_power_monitor_cond *pmc) +{ + struct virtio_net *dev = get_device(vid); + struct vhost_virtqueue *vq; + + if (dev == NULL) + return -1; + if (queue_id >= VHOST_MAX_VRING) + return -1; + + vq = dev->virtqueue[queue_id]; + if (vq == NULL) + return -1; + + if (vq_is_packed(dev)) { + struct vring_packed_desc *desc; + desc = vq->desc_packed; + pmc->addr = &desc[vq->last_avail_idx].flags; + if (vq->avail_wrap_counter) + pmc->val = VRING_DESC_F_AVAIL; + else + pmc->val = VRING_DESC_F_USED; + pmc->mask = VRING_DESC_F_AVAIL | VRING_DESC_F_USED; + pmc->size = sizeof(desc[vq->last_avail_idx].flags); + pmc->match = 1; + } else { + pmc->addr = &vq->avail->idx; + pmc->val = vq->last_avail_idx & (vq->size - 1); + pmc->mask = vq->size - 1; + pmc->size = sizeof(vq->avail->idx); + pmc->match = 0; + } + + return 0; +} + RTE_LOG_REGISTER_SUFFIX(vhost_config_log_level, config, INFO); RTE_LOG_REGISTER_SUFFIX(vhost_data_log_level, data, WARNING); From patchwork Mon Oct 18 14:16:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 101935 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 35C9FA0C43; Mon, 18 Oct 2021 08:12:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2C6F1410F1; Mon, 18 Oct 2021 08:12:45 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id DCE72410EA for ; Mon, 18 Oct 2021 08:12:40 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10140"; a="228058135" X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="228058135" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Oct 2021 23:12:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="482593225" Received: from limiao-icelake.sh.intel.com ([10.67.115.117]) by orsmga007.jf.intel.com with ESMTP; 17 Oct 2021 23:12:39 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Mon, 18 Oct 2021 14:16:36 +0000 Message-Id: <20211018141638.5916-4-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211018141638.5916-1-miao.li@intel.com> References: <20211015170911.478394-1-miao.li@intel.com> <20211018141638.5916-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 3/5] net/vhost: implement rte_power_monitor API 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 Sender: "dev" This patch implements rte_power_monitor API in vhost PMD to reduce power consumption when no packet come in. According to current semantics of power monitor, this commit adds a callback function to decide whether aborts the sleep by checking current value against the expected value and vhost_get_monitor_addr to provide address to monitor. When no packet come in, the value of address will not be changed and the running core will sleep. Once packets arrive, the value of address will be changed and the running core will wakeup. Signed-off-by: Miao Li Reviewed-by: Chenbo Xia Acked-by: David Hunt --- doc/guides/rel_notes/release_21_11.rst | 4 +++ drivers/net/vhost/rte_eth_vhost.c | 40 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst index a497674352..f3dc2cf219 100644 --- a/doc/guides/rel_notes/release_21_11.rst +++ b/doc/guides/rel_notes/release_21_11.rst @@ -84,6 +84,10 @@ New Features Added an API to support power monitor in vhost library. +* **Updated vhost PMD.** + + Implement rte_power_monitor API in vhost PMD. + * **Updated virtio PMD.** Implement rte_power_monitor API in virtio PMD. diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 2e24e5f7ff..c9947e4db7 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -1386,6 +1386,45 @@ eth_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) return rte_vhost_rx_queue_count(vq->vid, vq->virtqueue_id); } +#define CLB_VAL_IDX 0 +#define CLB_MSK_IDX 1 +#define CLB_MATCH_IDX 2 +static int +vhost_monitor_callback(const uint64_t value, + const uint64_t opaque[RTE_POWER_MONITOR_OPAQUE_SZ]) +{ + const uint64_t m = opaque[CLB_MSK_IDX]; + const uint64_t v = opaque[CLB_VAL_IDX]; + const uint64_t c = opaque[CLB_MATCH_IDX]; + + if (c) + return (value & m) == v ? -1 : 0; + else + return (value & m) == v ? 0 : -1; +} + +static int +vhost_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc) +{ + struct vhost_queue *vq = rx_queue; + struct rte_vhost_power_monitor_cond vhost_pmc; + int ret; + if (vq == NULL) + return -EINVAL; + ret = rte_vhost_get_monitor_addr(vq->vid, vq->virtqueue_id, + &vhost_pmc); + if (ret < 0) + return -EINVAL; + pmc->addr = vhost_pmc.addr; + pmc->opaque[CLB_VAL_IDX] = vhost_pmc.val; + pmc->opaque[CLB_MSK_IDX] = vhost_pmc.mask; + pmc->opaque[CLB_MATCH_IDX] = vhost_pmc.match; + pmc->size = vhost_pmc.size; + pmc->fn = vhost_monitor_callback; + + return 0; +} + static const struct eth_dev_ops ops = { .dev_start = eth_dev_start, .dev_stop = eth_dev_stop, @@ -1405,6 +1444,7 @@ static const struct eth_dev_ops ops = { .xstats_get_names = vhost_dev_xstats_get_names, .rx_queue_intr_enable = eth_rxq_intr_enable, .rx_queue_intr_disable = eth_rxq_intr_disable, + .get_monitor_addr = vhost_get_monitor_addr, }; static int From patchwork Mon Oct 18 14:16:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 101936 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C2734A0C43; Mon, 18 Oct 2021 08:12:57 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1BF70410FA; Mon, 18 Oct 2021 08:12:46 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id A3FE4410F1 for ; Mon, 18 Oct 2021 08:12:43 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10140"; a="228058138" X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="228058138" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Oct 2021 23:12:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="482593239" Received: from limiao-icelake.sh.intel.com ([10.67.115.117]) by orsmga007.jf.intel.com with ESMTP; 17 Oct 2021 23:12:41 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com, Anatoly Burakov Date: Mon, 18 Oct 2021 14:16:37 +0000 Message-Id: <20211018141638.5916-5-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211018141638.5916-1-miao.li@intel.com> References: <20211015170911.478394-1-miao.li@intel.com> <20211018141638.5916-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 4/5] power: modify return of queue_stopped 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 Sender: "dev" Since some vdevs like virtio and vhost do not support rxq_info_get and queue state inquiry, the error return value -ENOTSUP need to be ignored when queue_stopped cannot get rx queue information and rx queue state. This patch changes the return value of queue_stopped when rte_eth_rx_queue_info_get return -ENOTSUP to support vdevs which cannot provide rx queue information and rx queue state enable power management. Signed-off-by: Miao Li Acked-by: Anatoly Burakov Reviewed-by: Chenbo Xia --- lib/power/rte_power_pmd_mgmt.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c index 0ce40f0875..39a2b4cd23 100644 --- a/lib/power/rte_power_pmd_mgmt.c +++ b/lib/power/rte_power_pmd_mgmt.c @@ -382,8 +382,13 @@ queue_stopped(const uint16_t port_id, const uint16_t queue_id) { struct rte_eth_rxq_info qinfo; - if (rte_eth_rx_queue_info_get(port_id, queue_id, &qinfo) < 0) - return -1; + int ret = rte_eth_rx_queue_info_get(port_id, queue_id, &qinfo); + if (ret < 0) { + if (ret == -ENOTSUP) + return 1; + else + return -1; + } return qinfo.queue_state == RTE_ETH_QUEUE_STATE_STOPPED; } From patchwork Mon Oct 18 14:16:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 101937 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3792BA0C43; Mon, 18 Oct 2021 08:13:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4CBF5410E5; Mon, 18 Oct 2021 08:12:50 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 30D34410FE for ; Mon, 18 Oct 2021 08:12:45 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10140"; a="228058144" X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="228058144" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Oct 2021 23:12:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,381,1624345200"; d="scan'208";a="482593246" Received: from limiao-icelake.sh.intel.com ([10.67.115.117]) by orsmga007.jf.intel.com with ESMTP; 17 Oct 2021 23:12:44 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Mon, 18 Oct 2021 14:16:38 +0000 Message-Id: <20211018141638.5916-6-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211018141638.5916-1-miao.li@intel.com> References: <20211015170911.478394-1-miao.li@intel.com> <20211018141638.5916-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 5/5] examples/l3fwd-power: support virtio/vhost 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 Sender: "dev" In l3fwd-power, there is default port configuration which requires RSS and IPV4/UDP/TCP checksum. Once device does not support these, the l3fwd-power will exit and report an error. This patch updates the port configuration based on device capabilities after getting the device information to support devices like virtio and vhost. Signed-off-by: Miao Li Reviewed-by: Chenbo Xia Acked-by: David Hunt --- examples/l3fwd-power/main.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c index 73a3ab5bc0..5811908283 100644 --- a/examples/l3fwd-power/main.c +++ b/examples/l3fwd-power/main.c @@ -505,7 +505,15 @@ is_valid_ipv4_pkt(struct rte_ipv4_hdr *pkt, uint32_t link_len) return -1; /* 2. The IP checksum must be correct. */ - /* this is checked in H/W */ + /* if this is not checked in H/W, check it. */ + if ((port_conf.rxmode.offloads & DEV_RX_OFFLOAD_IPV4_CKSUM) == 0) { + uint16_t actual_cksum, expected_cksum; + actual_cksum = pkt->hdr_checksum; + pkt->hdr_checksum = 0; + expected_cksum = rte_ipv4_cksum(pkt); + if (actual_cksum != expected_cksum) + return -2; + } /* * 3. The IP version number must be 4. If the version number is not 4 @@ -2637,6 +2645,11 @@ main(int argc, char **argv) local_port_conf.rx_adv_conf.rss_conf.rss_hf); } + if (local_port_conf.rx_adv_conf.rss_conf.rss_hf == 0) + local_port_conf.rxmode.mq_mode = ETH_MQ_RX_NONE; + local_port_conf.rxmode.offloads &= dev_info.rx_offload_capa; + port_conf.rxmode.offloads = local_port_conf.rxmode.offloads; + ret = rte_eth_dev_configure(portid, nb_rx_queue, (uint16_t)n_tx_queue, &local_port_conf); if (ret < 0)