X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbonding%2Frte_eth_bond_args.c;h=5406e1c9343c074f270d4e6d15256c2867ee2875;hb=f9f0b5121f62d8701165d20bfdd14638bc72654d;hp=7c65dda078f33bc58abd6376008c7125e2142ac2;hpb=c848b518bbc7c1c22205fb0260cdfff1fa1f0595;p=dpdk.git diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index 7c65dda078..5406e1c934 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -1,45 +1,14 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2014 Intel Corporation */ #include #include +#include #include -#include -#include - #include "rte_eth_bond.h" -#include "rte_eth_bond_private.h" +#include "eth_bond_private.h" const char *pmd_bond_init_valid_arguments[] = { PMD_BOND_SLAVE_PORT_KVARG, @@ -49,27 +18,41 @@ const char *pmd_bond_init_valid_arguments[] = { PMD_BOND_SOCKET_ID_KVARG, PMD_BOND_MAC_ADDR_KVARG, PMD_BOND_AGG_MODE_KVARG, - "driver", + RTE_DEVARGS_KEY_DRIVER, NULL }; +static inline int +bond_pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr) +{ + const struct rte_pci_device *pdev = RTE_DEV_TO_PCI_CONST(dev); + const struct rte_pci_addr *paddr = _pci_addr; + + return rte_pci_addr_cmp(&pdev->addr, paddr); +} + static inline int find_port_id_by_pci_addr(const struct rte_pci_addr *pci_addr) { - struct rte_pci_device *pci_dev; - struct rte_pci_addr *eth_pci_addr; + struct rte_bus *pci_bus; + struct rte_device *dev; unsigned i; - for (i = 0; i < rte_eth_dev_count(); i++) { - pci_dev = RTE_ETH_DEV_TO_PCI(&rte_eth_devices[i]); - eth_pci_addr = &pci_dev->addr; + pci_bus = rte_bus_find_by_name("pci"); + if (pci_bus == NULL) { + RTE_BOND_LOG(ERR, "No PCI bus found"); + return -1; + } - if (pci_addr->bus == eth_pci_addr->bus && - pci_addr->devid == eth_pci_addr->devid && - pci_addr->domain == eth_pci_addr->domain && - pci_addr->function == eth_pci_addr->function) - return i; + dev = pci_bus->find_device(NULL, bond_pci_addr_cmp, pci_addr); + if (dev == NULL) { + RTE_BOND_LOG(ERR, "unable to find PCI device"); + return -1; } + + RTE_ETH_FOREACH_DEV(i) + if (rte_eth_devices[i].device == dev) + return i; return -1; } @@ -78,7 +61,7 @@ find_port_id_by_dev_name(const char *name) { unsigned i; - for (i = 0; i < rte_eth_dev_count(); i++) { + RTE_ETH_FOREACH_DEV(i) { if (rte_eth_devices[i].data == NULL) continue; @@ -88,16 +71,6 @@ find_port_id_by_dev_name(const char *name) return -1; } -static inline int -pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr) -{ - struct rte_pci_device *pdev; - const struct rte_pci_addr *paddr = _pci_addr; - - pdev = RTE_DEV_TO_PCI(*(struct rte_device **)(void *)&dev); - return rte_eal_compare_pci_addr(&pdev->addr, paddr); -} - /** * Parses a port identifier string to a port id by pci address, then by name, * and finally port id. @@ -106,23 +79,10 @@ static inline int parse_port_id(const char *port_str) { struct rte_pci_addr dev_addr; - struct rte_bus *pci_bus; - struct rte_device *dev; int port_id; - pci_bus = rte_bus_find_by_name("pci"); - if (pci_bus == NULL) { - RTE_LOG(ERR, PMD, "unable to find PCI bus\n"); - return -1; - } - /* try parsing as pci address, physical devices */ - if (pci_bus->parse(port_str, &dev_addr) == 0) { - dev = pci_bus->find_device(NULL, pci_addr_cmp, &dev_addr); - if (dev == NULL) { - RTE_LOG(ERR, PMD, "unable to find PCI device\n"); - return -1; - } + if (rte_pci_addr_parse(port_str, &dev_addr) == 0) { port_id = find_port_id_by_pci_addr(&dev_addr); if (port_id < 0) return -1; @@ -140,9 +100,8 @@ parse_port_id(const char *port_str) } } - if (port_id < 0 || port_id > RTE_MAX_ETHPORTS) { - RTE_BOND_LOG(ERR, "Slave port specified (%s) outside expected range", - port_str); + if (!rte_eth_dev_is_valid_port(port_id)) { + RTE_BOND_LOG(ERR, "Specified port (%s) is invalid", port_str); return -1; } return port_id; @@ -162,11 +121,12 @@ bond_ethdev_parse_slave_port_kvarg(const char *key, if (strcmp(key, PMD_BOND_SLAVE_PORT_KVARG) == 0) { int port_id = parse_port_id(value); if (port_id < 0) { - RTE_BOND_LOG(ERR, "Invalid slave port value (%s) specified", value); + RTE_BOND_LOG(ERR, "Invalid slave port value (%s) specified", + value); return -1; } else slave_ports->slaves[slave_ports->slave_count++] = - (uint8_t)port_id; + port_id; } return 0; } @@ -240,20 +200,20 @@ int bond_ethdev_parse_socket_id_kvarg(const char *key __rte_unused, const char *value, void *extra_args) { - int socket_id; + long socket_id; char *endptr; if (value == NULL || extra_args == NULL) return -1; errno = 0; - socket_id = (uint8_t)strtol(value, &endptr, 10); + socket_id = strtol(value, &endptr, 10); if (*endptr != 0 || errno != 0) return -1; /* validate socket id value */ - if (socket_id >= 0) { - *(uint8_t *)extra_args = (uint8_t)socket_id; + if (socket_id >= 0 && socket_id < RTE_MAX_NUMA_NODES) { + *(int *)extra_args = (int)socket_id; return 0; } return -1; @@ -272,7 +232,7 @@ bond_ethdev_parse_primary_slave_port_id_kvarg(const char *key __rte_unused, if (primary_slave_port_id < 0) return -1; - *(uint8_t *)extra_args = (uint8_t)primary_slave_port_id; + *(uint16_t *)extra_args = (uint16_t)primary_slave_port_id; return 0; } @@ -308,8 +268,7 @@ bond_ethdev_parse_bond_mac_addr_kvarg(const char *key __rte_unused, return -1; /* Parse MAC */ - return cmdline_parse_etheraddr(NULL, value, extra_args, - sizeof(struct ether_addr)); + return rte_ether_unformat_addr(value, extra_args); } int