X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fiavf%2Fiavf_ethdev.c;h=5a5a7f59e152d88d254dc8d82be32b8342ec5528;hb=7206a1ca2bfe289aeacd92e39cfefd9a19f6c64f;hp=985ccc98acf261d4b0ce63ce68389b6b8a4277a0;hpb=cd3b124955d4673fa0ddd423ebc01a5adf9501d4;p=dpdk.git diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 985ccc98ac..5a5a7f59e1 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -676,7 +676,7 @@ static int iavf_config_rx_queues_irqs(struct rte_eth_dev *dev, if (!qv_map) { PMD_DRV_LOG(ERR, "Failed to allocate %d queue-vector map", dev->data->nb_rx_queues); - return -1; + goto qv_map_alloc_err; } if (!dev->data->dev_conf.intr_conf.rxq || @@ -761,7 +761,7 @@ static int iavf_config_rx_queues_irqs(struct rte_eth_dev *dev, if (!vf->lv_enabled) { if (iavf_config_irq_map(adapter)) { PMD_DRV_LOG(ERR, "config interrupt mapping failed"); - return -1; + goto config_irq_map_err; } } else { uint16_t num_qv_maps = dev->data->nb_rx_queues; @@ -771,7 +771,7 @@ static int iavf_config_rx_queues_irqs(struct rte_eth_dev *dev, if (iavf_config_irq_map_lv(adapter, IAVF_IRQ_MAP_NUM_PER_BUF, index)) { PMD_DRV_LOG(ERR, "config interrupt mapping for large VF failed"); - return -1; + goto config_irq_map_err; } num_qv_maps -= IAVF_IRQ_MAP_NUM_PER_BUF; index += IAVF_IRQ_MAP_NUM_PER_BUF; @@ -779,10 +779,20 @@ static int iavf_config_rx_queues_irqs(struct rte_eth_dev *dev, if (iavf_config_irq_map_lv(adapter, num_qv_maps, index)) { PMD_DRV_LOG(ERR, "config interrupt mapping for large VF failed"); - return -1; + goto config_irq_map_err; } } return 0; + +config_irq_map_err: + rte_free(vf->qv_map); + vf->qv_map = NULL; + +qv_map_alloc_err: + rte_free(intr_handle->intr_vec); + intr_handle->intr_vec = NULL; + + return -1; } static int @@ -2547,58 +2557,10 @@ exit: return ret; } -static int -iavf_drv_i40evf_check_handler(__rte_unused const char *key, - const char *value, __rte_unused void *opaque) -{ - if (strcmp(value, "i40evf")) - return -1; - - return 0; -} - -static int -iavf_drv_i40evf_selected(struct rte_devargs *devargs, uint16_t device_id) -{ - struct rte_kvargs *kvlist; - int ret = 0; - - if (device_id != IAVF_DEV_ID_VF && - device_id != IAVF_DEV_ID_VF_HV && - device_id != IAVF_DEV_ID_X722_VF && - device_id != IAVF_DEV_ID_X722_A0_VF) - return 0; - - if (devargs == NULL) - return 0; - - kvlist = rte_kvargs_parse(devargs->args, NULL); - if (kvlist == NULL) - return 0; - - if (!rte_kvargs_count(kvlist, RTE_DEVARGS_KEY_DRIVER)) - goto exit; - - /* i40evf driver selected when there's a key-value pair: - * driver=i40evf - */ - if (rte_kvargs_process(kvlist, RTE_DEVARGS_KEY_DRIVER, - iavf_drv_i40evf_check_handler, NULL) < 0) - goto exit; - - ret = 1; - -exit: - rte_kvargs_free(kvlist); - return ret; -} - static int eth_iavf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) { - if (iavf_dcf_cap_selected(pci_dev->device.devargs) || - iavf_drv_i40evf_selected(pci_dev->device.devargs, - pci_dev->id.device_id)) + if (iavf_dcf_cap_selected(pci_dev->device.devargs)) return 1; return rte_eth_dev_pci_generic_probe(pci_dev, @@ -2621,7 +2583,7 @@ static struct rte_pci_driver rte_iavf_pmd = { RTE_PMD_REGISTER_PCI(net_iavf, rte_iavf_pmd); RTE_PMD_REGISTER_PCI_TABLE(net_iavf, pci_id_iavf_map); RTE_PMD_REGISTER_KMOD_DEP(net_iavf, "* igb_uio | vfio-pci"); -RTE_PMD_REGISTER_PARAM_STRING(net_iavf, "cap=dcf driver=i40evf"); +RTE_PMD_REGISTER_PARAM_STRING(net_iavf, "cap=dcf"); RTE_LOG_REGISTER_SUFFIX(iavf_logtype_init, init, NOTICE); RTE_LOG_REGISTER_SUFFIX(iavf_logtype_driver, driver, NOTICE); #ifdef RTE_ETHDEV_DEBUG_RX