From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 630F01B1EF for ; Thu, 12 Jul 2018 10:06:15 +0200 (CEST) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 29EC2B80057; Thu, 12 Jul 2018 08:06:14 +0000 (UTC) Received: from [192.168.1.16] (85.187.13.33) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1044.25; Thu, 12 Jul 2018 09:06:10 +0100 To: Wenzhuo Lu , References: <1531373220-42150-1-git-send-email-wenzhuo.lu@intel.com> From: Andrew Rybchenko Message-ID: <0aacbeca-6bb9-2be9-76cd-2857c46b9eca@solarflare.com> Date: Thu, 12 Jul 2018 11:06:05 +0300 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: <1531373220-42150-1-git-send-email-wenzhuo.lu@intel.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-Originating-IP: [85.187.13.33] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.100.1062-23962.003 X-TM-AS-Result: No--14.215200-0.000000-31 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-MDID: 1531382774-lIL4G0HfCUZk Subject: Re: [dpdk-dev] [PATCH] ethdev: fix device info getting 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, 12 Jul 2018 08:06:15 -0000 On 12.07.2018 08:27, Wenzhuo Lu wrote: > The device information cannot be gotten correctly before > the configuration is set. Because on some NICs the > information has dependence on the configuration. > > Fixes: 3be82f5cc5e3 ("ethdev: support PMD-tuned Tx/Rx parameters") > Signed-off-by: Wenzhuo Lu > --- > lib/librte_ethdev/rte_ethdev.c | 47 +++++++++++++++++++++--------------------- > 1 file changed, 24 insertions(+), 23 deletions(-) > > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c > index 3d556a8..9d60bea 100644 > --- a/lib/librte_ethdev/rte_ethdev.c > +++ b/lib/librte_ethdev/rte_ethdev.c > @@ -1017,28 +1017,6 @@ struct rte_eth_dev * > > RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); > > - dev = &rte_eth_devices[port_id]; > - > - RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP); > - RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP); > - > - rte_eth_dev_info_get(port_id, &dev_info); > - > - /* If number of queues specified by application for both Rx and Tx is > - * zero, use driver preferred values. This cannot be done individually > - * as it is valid for either Tx or Rx (but not both) to be zero. > - * If driver does not provide any preferred valued, fall back on > - * EAL defaults. > - */ > - if (nb_rx_q == 0 && nb_tx_q == 0) { > - nb_rx_q = dev_info.default_rxportconf.nb_queues; > - if (nb_rx_q == 0) > - nb_rx_q = RTE_ETH_DEV_FALLBACK_RX_NBQUEUES; > - nb_tx_q = dev_info.default_txportconf.nb_queues; > - if (nb_tx_q == 0) > - nb_tx_q = RTE_ETH_DEV_FALLBACK_TX_NBQUEUES; > - } > - > if (nb_rx_q > RTE_MAX_QUEUES_PER_PORT) { > RTE_ETHDEV_LOG(ERR, > "Number of RX queues requested (%u) is greater than max supported(%d)\n", > @@ -1053,6 +1031,11 @@ struct rte_eth_dev * > return -EINVAL; > } > > + dev = &rte_eth_devices[port_id]; > + > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP); > + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP); > + > if (dev->data->dev_started) { > RTE_ETHDEV_LOG(ERR, > "Port %u must be stopped to allow configuration\n", > @@ -1060,8 +1043,26 @@ struct rte_eth_dev * > return -EBUSY; > } > > - /* Copy the dev_conf parameter into the dev structure */ > + /* Copy the dev_conf parameter into the dev structure, > + * then get the info. > + */ > memcpy(&dev->data->dev_conf, &local_conf, sizeof(dev->data->dev_conf)); > + rte_eth_dev_info_get(port_id, &dev_info); > + > + /* If number of queues specified by application for both Rx and Tx is > + * zero, use driver preferred values. This cannot be done individually > + * as it is valid for either Tx or Rx (but not both) to be zero. > + * If driver does not provide any preferred valued, fall back on > + * EAL defaults. > + */ > + if (nb_rx_q == 0 && nb_tx_q == 0) { > + nb_rx_q = dev_info.default_rxportconf.nb_queues; > + if (nb_rx_q == 0) > + nb_rx_q = RTE_ETH_DEV_FALLBACK_RX_NBQUEUES; > + nb_tx_q = dev_info.default_txportconf.nb_queues; > + if (nb_tx_q == 0) > + nb_tx_q = RTE_ETH_DEV_FALLBACK_TX_NBQUEUES; Values assigned in this branch are not checked against RTE_MAX_QUEUES_PER_PORT and RTE_MAX_QUEUES_PER_PORT now > + } > > /* > * Check that the numbers of RX and TX queues are not greater