X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbonding%2Frte_eth_bond_args.c;h=8c5f90dc63dfebe9040b94949dbb3fe67650eb6e;hb=fcf953791c5c72a22741969071265b74d647c08f;hp=b60fde6a86c2a456bf345d4c0ae784b7ef71fe87;hpb=d7f4562ab10adaab303d66f07e9c8727e36f072e;p=dpdk.git diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index b60fde6a86..8c5f90dc63 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -7,11 +7,8 @@ #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, @@ -25,23 +22,37 @@ const char *pmd_bond_init_valid_arguments[] = { 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; - RTE_ETH_FOREACH_DEV(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; } @@ -60,16 +71,6 @@ find_port_id_by_dev_name(const char *name) return -1; } -static inline int -bond_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. @@ -78,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, bond_pci_addr_cmp, &dev_addr); - if (dev == NULL) { - RTE_BOND_LOG(ERR, "unable to find PCI device"); - 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; @@ -112,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; @@ -281,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