From patchwork Fri Sep 10 13:05:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 98540 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 20049A0547; Fri, 10 Sep 2021 07:03:55 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CC0D740DF4; Fri, 10 Sep 2021 07:03:51 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id 0006B4068C for ; Fri, 10 Sep 2021 07:03:49 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="208102002" X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="208102002" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 22:03:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="549003917" Received: from limiao-icelake.sh.intel.com ([10.67.115.199]) by fmsmga002.fm.intel.com with ESMTP; 09 Sep 2021 22:03:47 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Fri, 10 Sep 2021 13:05:44 +0000 Message-Id: <20210910130548.127017-2-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910130548.127017-1-miao.li@intel.com> References: <20210910130548.127017-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 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 --- drivers/net/virtio/virtio_ethdev.c | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index e58085a2c9..4ce49936f5 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -73,6 +73,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, @@ -975,6 +977,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, }; /* @@ -1306,6 +1309,60 @@ 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 +static int +virtio_packed_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]; + + return (value & m) == v ? -1 : 0; +} + +static int +virtio_split_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]; + + 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 = vq->hw; + if (vq == NULL) + return -EINVAL; + 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->fn = virtio_packed_monitor_callback; + pmc->size = sizeof(uint16_t); + } 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->fn = virtio_split_monitor_callback; + pmc->size = sizeof(uint16_t); + } + + return 0; +} + static int virtio_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) { From patchwork Fri Sep 10 13:05:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 98541 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 84B94A0547; Fri, 10 Sep 2021 07:04:00 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EF609410F5; Fri, 10 Sep 2021 07:03:53 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id 2F230410E8 for ; Fri, 10 Sep 2021 07:03:52 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="208102005" X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="208102005" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 22:03:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="549003920" Received: from limiao-icelake.sh.intel.com ([10.67.115.199]) by fmsmga002.fm.intel.com with ESMTP; 09 Sep 2021 22:03:50 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Fri, 10 Sep 2021 13:05:45 +0000 Message-Id: <20210910130548.127017-3-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910130548.127017-1-miao.li@intel.com> References: <20210910130548.127017-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/5] lib/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 flag used to distinguish packed ring or split ring. Vhost driver can use these information to fill rte_power_monitor_cond. Signed-off-by: Miao Li --- lib/vhost/rte_vhost.h | 33 +++++++++++++++++++++++++++++++++ lib/vhost/version.map | 3 +++ lib/vhost/vhost.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h index 8d875e9322..f58643b0a3 100644 --- a/lib/vhost/rte_vhost.h +++ b/lib/vhost/rte_vhost.h @@ -38,6 +38,8 @@ extern "C" { #define RTE_VHOST_USER_ASYNC_COPY (1ULL << 7) #define RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS (1ULL << 8) +#define VHOST_POWER_MONITOR_RING_PACKED (1ULL << 0) + /* Features. */ #ifndef VIRTIO_NET_F_GUEST_ANNOUNCE #define VIRTIO_NET_F_GUEST_ANNOUNCE 21 @@ -292,6 +294,20 @@ struct vhost_device_ops { void *reserved[1]; /**< Reserved for future extension */ }; +/** + * Power monitor condition. + */ +struct rte_vhost_power_monitor_cond { + volatile void *addr; /**< Address to monitor for changes */ + /**< If the `mask` is non-zero, location pointed + * to by `addr` will be read and compared + * against this value. + */ + uint64_t val; + uint64_t mask; /**< 64-bit mask to extract value read from `addr` */ + uint8_t flag; /**< if 1, vhost packed ring, otherwise split ring */ +}; + /** * Convert guest physical address to host virtual address * @@ -914,6 +930,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 c92a9d4962..0a9667ef1e 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 355ff37651..f7374d3f94 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -1886,5 +1886,35 @@ int 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 = 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->flag = VHOST_POWER_MONITOR_RING_PACKED; + } else { + pmc->addr = &vq->avail->idx; + pmc->val = vq->last_avail_idx & (vq->size - 1); + pmc->mask = vq->size - 1; + pmc->flag = 0; + } + if (pmc->addr == NULL) + return -1; + + return 0; +} + RTE_LOG_REGISTER_SUFFIX(vhost_config_log_level, config, INFO); RTE_LOG_REGISTER_SUFFIX(vhost_data_log_level, data, WARNING); From patchwork Fri Sep 10 13:05:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 98542 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 21A38A0547; Fri, 10 Sep 2021 07:04:06 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F64341121; Fri, 10 Sep 2021 07:03:55 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id 7668241104 for ; Fri, 10 Sep 2021 07:03:54 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="208102011" X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="208102011" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 22:03:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="549003929" Received: from limiao-icelake.sh.intel.com ([10.67.115.199]) by fmsmga002.fm.intel.com with ESMTP; 09 Sep 2021 22:03:52 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Fri, 10 Sep 2021 13:05:46 +0000 Message-Id: <20210910130548.127017-4-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910130548.127017-1-miao.li@intel.com> References: <20210910130548.127017-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 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 --- drivers/net/vhost/rte_eth_vhost.c | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index a202931e9a..dd31761995 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -1380,6 +1380,51 @@ 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 +static int +vhost_packed_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]; + + return (value & m) == v ? -1 : 0; +} + +static int +vhost_split_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]; + + 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; + if (vhost_pmc.flag & VHOST_POWER_MONITOR_RING_PACKED) + pmc->fn = vhost_packed_monitor_callback; + else + pmc->fn = vhost_split_monitor_callback; + pmc->size = sizeof(uint16_t); + return 0; +} + static const struct eth_dev_ops ops = { .dev_start = eth_dev_start, .dev_stop = eth_dev_stop, @@ -1399,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 Fri Sep 10 13:05:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 98543 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 65B17A0547; Fri, 10 Sep 2021 07:04:11 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 972C641130; Fri, 10 Sep 2021 07:03:57 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id BEB6E41130 for ; Fri, 10 Sep 2021 07:03:56 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="208102015" X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="208102015" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 22:03:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="549003937" Received: from limiao-icelake.sh.intel.com ([10.67.115.199]) by fmsmga002.fm.intel.com with ESMTP; 09 Sep 2021 22:03:55 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Fri, 10 Sep 2021 13:05:47 +0000 Message-Id: <20210910130548.127017-5-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910130548.127017-1-miao.li@intel.com> References: <20210910130548.127017-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 4/5] lib/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 --- 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 Fri Sep 10 13:05:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Miao" X-Patchwork-Id: 98544 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 D838CA0547; Fri, 10 Sep 2021 07:04:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BDB7B4113A; Fri, 10 Sep 2021 07:04:01 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id AE0A340DFD for ; Fri, 10 Sep 2021 07:04:00 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="208102029" X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="208102029" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 22:04:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="549003948" Received: from limiao-icelake.sh.intel.com ([10.67.115.199]) by fmsmga002.fm.intel.com with ESMTP; 09 Sep 2021 22:03:59 -0700 From: Miao Li To: dev@dpdk.org Cc: chenbo.xia@intel.com, maxime.coquelin@redhat.com, miao.li@intel.com Date: Fri, 10 Sep 2021 13:05:48 +0000 Message-Id: <20210910130548.127017-6-miao.li@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210910130548.127017-1-miao.li@intel.com> References: <20210910130548.127017-1-miao.li@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 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" This patch adds two command line arguments which will be needed when using virtio/vhost vdev. One argument sets rx offloads capabilities DEV_RX_OFFLOAD_VLAN_STRIP. The other argument sets DCB, PSS and VMDQ off for RX side. Signed-off-by: Miao Li --- examples/l3fwd-power/main.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c index aa7b8db44a..4e28008578 100644 --- a/examples/l3fwd-power/main.c +++ b/examples/l3fwd-power/main.c @@ -1811,6 +1811,8 @@ parse_args(int argc, char **argv) {"high-perf-cores", 1, 0, 0}, {"no-numa", 0, 0, 0}, {"enable-jumbo", 0, 0, 0}, + {"vlan-strip", 0, 0, 0}, + {"rx-none", 0, 0, 0}, {CMD_LINE_OPT_EMPTY_POLL, 1, 0, 0}, {CMD_LINE_OPT_PARSE_PTYPE, 0, 0, 0}, {CMD_LINE_OPT_LEGACY, 0, 0, 0}, @@ -1986,6 +1988,19 @@ parse_args(int argc, char **argv) (unsigned int)port_conf.rxmode.max_rx_pkt_len); } + if (!strncmp(lgopts[option_index].name, + "vlan-strip", 10)) { + printf("set vlan strip\n"); + port_conf.rxmode.offloads = + DEV_RX_OFFLOAD_VLAN_STRIP; + } + + if (!strncmp(lgopts[option_index].name, + "rx-none", 7)) { + printf("none of DCB,RSS or VMDQ mode\n"); + port_conf.rxmode.mq_mode = ETH_MQ_RX_NONE; + } + if (!strncmp(lgopts[option_index].name, CMD_LINE_OPT_PARSE_PTYPE, sizeof(CMD_LINE_OPT_PARSE_PTYPE))) {