From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by dpdk.org (Postfix) with ESMTP id 01874200 for ; Thu, 28 Jun 2018 17:16:07 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7635F80401B6; Thu, 28 Jun 2018 15:16:07 +0000 (UTC) Received: from [10.36.112.57] (ovpn-112-57.ams2.redhat.com [10.36.112.57]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8C37C1C727; Thu, 28 Jun 2018 15:16:06 +0000 (UTC) To: Marvin Liu , tiwei.bie@intel.com Cc: zhihong.wang@intel.com, dev@dpdk.org References: <20180628215235.106069-1-yong.liu@intel.com> <20180628215235.106069-9-yong.liu@intel.com> From: Maxime Coquelin Message-ID: Date: Thu, 28 Jun 2018 17:16:04 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <20180628215235.106069-9-yong.liu@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Thu, 28 Jun 2018 15:16:07 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Thu, 28 Jun 2018 15:16:07 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'maxime.coquelin@redhat.com' RCPT:'' Subject: Re: [dpdk-dev] [PATCH v3 08/11] net/virtio: add in-order Rx/Tx into selection 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: , X-List-Received-Date: Thu, 28 Jun 2018 15:16:08 -0000 On 06/28/2018 11:52 PM, Marvin Liu wrote: > After IN_ORDER Rx/Tx paths added, need to update Rx/Tx path selection > logic. > > Rx path select logic: If IN_ORDER is disabled will select normal Rx > path. If IN_ORDER is enabled, Rx offload and merge-able are disabled > will select simple Rx path. Otherwise will select IN_ORDER Rx path. > > Tx path select logic: If IN_ORDER is disabled will select normal Tx > path. If IN_ORDER is enabled and merge-able is disabled will select > simple Tx path. Otherwise will select IN_ORDER Tx path. > > Signed-off-by: Marvin Liu > > diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c > index df50a571a..2b3d65f80 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -1320,6 +1320,11 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) > PMD_INIT_LOG(INFO, "virtio: using simple Rx path on port %u", > eth_dev->data->port_id); > eth_dev->rx_pkt_burst = virtio_recv_pkts_vec; > + } else if (hw->use_inorder_rx) { > + PMD_INIT_LOG(INFO, > + "virtio: using inorder mergeable buffer Rx path on port %u", > + eth_dev->data->port_id); > + eth_dev->rx_pkt_burst = &virtio_recv_mergeable_pkts_inorder; > } else if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { > PMD_INIT_LOG(INFO, > "virtio: using mergeable buffer Rx path on port %u", > @@ -1335,6 +1340,10 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) > PMD_INIT_LOG(INFO, "virtio: using simple Tx path on port %u", > eth_dev->data->port_id); > eth_dev->tx_pkt_burst = virtio_xmit_pkts_simple; > + } else if (hw->use_inorder_tx) { > + PMD_INIT_LOG(INFO, "virtio: using inorder Tx path on port %u", > + eth_dev->data->port_id); > + eth_dev->tx_pkt_burst = virtio_xmit_pkts_inorder; > } else { > PMD_INIT_LOG(INFO, "virtio: using standard Tx path on port %u", > eth_dev->data->port_id); > @@ -1871,24 +1880,24 @@ virtio_dev_configure(struct rte_eth_dev *dev) > > rte_spinlock_init(&hw->state_lock); > > - hw->use_simple_rx = 1; > - hw->use_simple_tx = 1; > - > #if defined RTE_ARCH_ARM64 || defined RTE_ARCH_ARM > if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) { > hw->use_simple_rx = 0; > hw->use_simple_tx = 0; > } > #endif > - if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { > - hw->use_simple_rx = 0; > - hw->use_simple_tx = 0; > + if (vtpci_with_feature(hw, VIRTIO_F_IN_ORDER)) { > + if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) { > + hw->use_inorder_rx = 1; > + hw->use_inorder_tx = 1; > + } else { > + hw->use_simple_tx = 1; > + if (!(rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | > + DEV_RX_OFFLOAD_TCP_CKSUM))) > + hw->use_simple_rx = 1; > + } It seems to be wrong. For example if IN_ORDER hasn't been negotiated, we might want to use the simple path if no rx offload have been requested by the application. It was the case before the patch if I'm not mistaken. Also, with ARM platform, we force not to use simple path, but in case IN_ORDER has been negotiated but not MRG_RXBUF, it gets re-enabled. > } > > - if (rx_offloads & (DEV_RX_OFFLOAD_UDP_CKSUM | > - DEV_RX_OFFLOAD_TCP_CKSUM)) > - hw->use_simple_rx = 0; > - > return 0; > } > >