From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f50.google.com (mail-pa0-f50.google.com [209.85.220.50]) by dpdk.org (Postfix) with ESMTP id 06FF9902 for ; Tue, 29 Sep 2015 05:32:05 +0200 (CEST) Received: by padhy16 with SMTP id hy16so192574368pad.1 for ; Mon, 28 Sep 2015 20:32:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-type :content-transfer-encoding; bh=acPeymMyav73pDx5+c2hZRckh6QhF7MDe+lMQ4vsmFg=; b=mkMpgcXZL4xoLV77/JP1Q+qYLKeC4MF7Kgw35+aACeuU2+WNOh6x4OxJHlYXZr9YEC zak7ZmDCwTuM6SKWkL+wjqfmG3J+L4Z+qwBLaI8cqGkvRyIZZobgJJiorvaGjEDf2EET LzpA4fpktN6cklLXy2naiArZiFMh8Gx8a0/K9yTIGgE8prSO4AeXWNoW8RAD0eFlb7yi yEl2E6A57dpdWYCX7PzRV3S9Hg9Y0qR+KvIUoSC5TP+Gt8mgVhkMyoqnsQc6O0pJHcpZ I9SeQWh1aFYxFJx+ew9BaZVXjzGtL85xpJg0FqpOTUqec0Yr0foL6LlmPRu6J0gBp0FO PyKg== X-Gm-Message-State: ALoCoQm7fscGXHNGKMXcupZ18S+1jY+FEUwz9fV0VgV9hTAfga5stWPS6IS93EzDBjW/mA2VB6PL X-Received: by 10.68.132.234 with SMTP id ox10mr29683183pbb.128.1443497524139; Mon, 28 Sep 2015 20:32:04 -0700 (PDT) Received: from [10.16.129.101] (napt.igel.co.jp. [219.106.231.132]) by smtp.googlemail.com with ESMTPSA id y5sm22186176pbt.77.2015.09.28.20.32.02 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Sep 2015 20:32:03 -0700 (PDT) To: Ravi Kerur References: <1443042947-8208-1-git-send-email-rkerur@gmail.com> <1443042977-8271-1-git-send-email-rkerur@gmail.com> From: Tetsuya Mukawa X-Enigmail-Draft-Status: N1110 Message-ID: <560A0632.9000405@igel.co.jp> Date: Tue, 29 Sep 2015 12:32:02 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <1443042977-8271-1-git-send-email-rkerur@gmail.com> Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH v3] Change rte_eal_vdev_init to update port_id X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Sep 2015 03:32:05 -0000 On 2015/09/24 6:16, Ravi Kerur wrote: > v3: > > Isolate changes within rte_ether component. > > v2: > > Remove tilegx changes > > Use rte_eal_compare_pci_addr for address comparison > > Use dpdk_2.2 in version map file for new functions > > v1: > Changes include > > Modify rte_eal_vdev_init to return allocated port_id > > Modify rte_eal_probe_one to return allocated port_id > > 2. Removed following functions > > rte_eth_dev_save and > > rte_eth_dev_get_changed_port > > 3. Added 2 new functions > > rte_eth_dev_get_port_by_name > > rte_eth_dev_get_port_by_addr > > 4. Fix return error(ENOMEM) in function rte_pmd_mpipe_devinit > > Compiled on Linux for following targets > > x86_64-native-linuxapp-gcc > > x86_64-native-linuxapp-clang > > x86_x32-native-linuxapp-gcc > > Compiled on FreeBSD for following targets > > x86_64-native-bsdapp-clang > > x86_64-native-bsdapp-gcc > > Tested on Linux/FreeBSD: > > port attach eth_null > > port start all > > port stop all > > port close all > > port detach 0 > > port attach eth_null > > port start all > > port stop all > > port close all > > port detach 0 > > Successful run of checkpatch.pl on the diffs > > Successful validate_abi on Linux for following targets > > > x86_64-native-linuxapp-gcc > > x86_64-native-linuxapp-clang > > Signed-off-by: Ravi Kerur > --- > lib/librte_ether/rte_ethdev.c | 116 +++++++++++++++++++++++------------------- > 1 file changed, 63 insertions(+), 53 deletions(-) > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index b309309..e4b8e41 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -442,32 +442,6 @@ rte_eth_dev_get_device_type(uint8_t port_id) > } > > static int > -rte_eth_dev_save(struct rte_eth_dev *devs, size_t size) > -{ > - if ((devs == NULL) || > - (size != sizeof(struct rte_eth_dev) * RTE_MAX_ETHPORTS)) > - return -EINVAL; > - > - /* save current rte_eth_devices */ > - memcpy(devs, rte_eth_devices, size); > - return 0; > -} > - > -static int > -rte_eth_dev_get_changed_port(struct rte_eth_dev *devs, uint8_t *port_id) > -{ > - if ((devs == NULL) || (port_id == NULL)) > - return -EINVAL; > - > - /* check which port was attached or detached */ > - for (*port_id = 0; *port_id < RTE_MAX_ETHPORTS; (*port_id)++, devs++) { > - if (rte_eth_devices[*port_id].attached ^ devs->attached) > - return 0; > - } > - return -ENODEV; > -} > - > -static int > rte_eth_dev_get_addr_by_port(uint8_t port_id, struct rte_pci_addr *addr) > { > VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); > @@ -501,6 +475,59 @@ rte_eth_dev_get_name_by_port(uint8_t port_id, char *name) > } > > static int > +rte_eth_dev_get_port_by_name(const char *name, uint8_t *port_id) > +{ > + int i; > + > + if (name == NULL) { > + PMD_DEBUG_TRACE("Null pointer is specified\n"); > + return -EINVAL; > + } > + > + *port_id = RTE_MAX_ETHPORTS; > + > + for (i = 0; i < RTE_MAX_ETHPORTS; i++) { > + > + if (!strncmp(name, > + rte_eth_dev_data[i].name, strlen(name))) { > + > + *port_id = i; > + > + return 0; > + } > + } > + return -ENODEV; > +} > + > +static int > +rte_eth_dev_get_port_by_addr(const struct rte_pci_addr *addr, uint8_t *port_id) > +{ > + int i; > + struct rte_pci_device *pci_dev = NULL; > + > + if (addr == NULL) { > + PMD_DEBUG_TRACE("Null pointer is specified\n"); > + return -EINVAL; > + } > + > + *port_id = RTE_MAX_ETHPORTS; > + > + for (i = 0; i < RTE_MAX_ETHPORTS; i++) { > + > + pci_dev = rte_eth_devices[i].pci_dev; > + > + if (pci_dev && > + !rte_eal_compare_pci_addr(&pci_dev->addr, addr)) { > + > + *port_id = i; > + > + return 0; > + } > + } > + return -ENODEV; > +} > + > +static int > rte_eth_dev_is_detachable(uint8_t port_id) > { > uint32_t drv_flags; > @@ -530,30 +557,19 @@ rte_eth_dev_is_detachable(uint8_t port_id) > static int > rte_eth_dev_attach_pdev(struct rte_pci_addr *addr, uint8_t *port_id) > { > - uint8_t new_port_id; > - struct rte_eth_dev devs[RTE_MAX_ETHPORTS]; > - > if ((addr == NULL) || (port_id == NULL)) > goto err; > > - /* save current port status */ > - if (rte_eth_dev_save(devs, sizeof(devs))) > - goto err; > /* re-construct pci_device_list */ > if (rte_eal_pci_scan()) > goto err; > - /* invoke probe func of the driver can handle the new device. > - * TODO: > - * rte_eal_pci_probe_one() should return port_id. > - * And rte_eth_dev_save() and rte_eth_dev_get_changed_port() > - * should be removed. */ > + /* Invoke probe func of the driver can handle the new device. */ > if (rte_eal_pci_probe_one(addr)) > goto err; > - /* get port_id enabled by above procedures */ > - if (rte_eth_dev_get_changed_port(devs, &new_port_id)) > + > + if (rte_eth_dev_get_port_by_addr(addr, port_id)) > goto err; > > - *port_id = new_port_id; > return 0; > err: > RTE_LOG(ERR, EAL, "Driver, cannot attach the device\n"); > @@ -600,8 +616,6 @@ static int > rte_eth_dev_attach_vdev(const char *vdevargs, uint8_t *port_id) > { > char *name = NULL, *args = NULL; > - uint8_t new_port_id; > - struct rte_eth_dev devs[RTE_MAX_ETHPORTS]; > int ret = -1; > > if ((vdevargs == NULL) || (port_id == NULL)) > @@ -611,22 +625,18 @@ rte_eth_dev_attach_vdev(const char *vdevargs, uint8_t *port_id) > if (rte_eal_parse_devargs_str(vdevargs, &name, &args)) > goto end; > > - /* save current port status */ > - if (rte_eth_dev_save(devs, sizeof(devs))) > - goto end; > /* walk around dev_driver_list to find the driver of the device, > - * then invoke probe function o the driver. > - * TODO: > - * rte_eal_vdev_init() should return port_id, > - * And rte_eth_dev_save() and rte_eth_dev_get_changed_port() > - * should be removed. */ > + * then invoke probe function of the driver. > + * rte_eal_vdev_init() updates port_id allocated after > + * initialization. > + */ > if (rte_eal_vdev_init(name, args)) > goto end; > - /* get port_id enabled by above procedures */ > - if (rte_eth_dev_get_changed_port(devs, &new_port_id)) > + > + if (rte_eth_dev_get_port_by_name(name, port_id)) > goto end; > + > ret = 0; > - *port_id = new_port_id; > end: > if (name) > free(name); Acked-by: Tetsuya Mukawa