MCPcopy Create free account
hub / github.com/F-Stack/f-stack / i40e_vmdq_setup

Function i40e_vmdq_setup

dpdk/drivers/net/i40e/i40e_ethdev.c:6508–6602  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6506}
6507
6508static int
6509i40e_vmdq_setup(struct rte_eth_dev *dev)
6510{
6511 struct rte_eth_conf *conf = &dev->data->dev_conf;
6512 struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
6513 int i, err, conf_vsis, j, loop;
6514 struct i40e_vsi *vsi;
6515 struct i40e_vmdq_info *vmdq_info;
6516 struct rte_eth_vmdq_rx_conf *vmdq_conf;
6517 struct i40e_hw *hw = I40E_PF_TO_HW(pf);
6518
6519 /*
6520 * Disable interrupt to avoid message from VF. Furthermore, it will
6521 * avoid race condition in VSI creation/destroy.
6522 */
6523 i40e_pf_disable_irq0(hw);
6524
6525 if ((pf->flags & I40E_FLAG_VMDQ) == 0) {
6526 PMD_INIT_LOG(ERR, "FW doesn't support VMDQ");
6527 return -ENOTSUP;
6528 }
6529
6530 conf_vsis = conf->rx_adv_conf.vmdq_rx_conf.nb_queue_pools;
6531 if (conf_vsis > pf->max_nb_vmdq_vsi) {
6532 PMD_INIT_LOG(ERR, "VMDQ config: %u, max support:%u",
6533 conf->rx_adv_conf.vmdq_rx_conf.nb_queue_pools,
6534 pf->max_nb_vmdq_vsi);
6535 return -ENOTSUP;
6536 }
6537
6538 if (pf->vmdq != NULL) {
6539 PMD_INIT_LOG(INFO, "VMDQ already configured");
6540 return 0;
6541 }
6542
6543 pf->vmdq = rte_zmalloc("vmdq_info_struct",
6544 sizeof(*vmdq_info) * conf_vsis, 0);
6545
6546 if (pf->vmdq == NULL) {
6547 PMD_INIT_LOG(ERR, "Failed to allocate memory");
6548 return -ENOMEM;
6549 }
6550
6551 vmdq_conf = &conf->rx_adv_conf.vmdq_rx_conf;
6552
6553 /* Create VMDQ VSI */
6554 for (i = 0; i < conf_vsis; i++) {
6555 vsi = i40e_vsi_setup(pf, I40E_VSI_VMDQ2, pf->main_vsi,
6556 vmdq_conf->enable_loop_back);
6557 if (vsi == NULL) {
6558 PMD_INIT_LOG(ERR, "Failed to create VMDQ VSI");
6559 err = -1;
6560 goto err_vsi_setup;
6561 }
6562 vmdq_info = &pf->vmdq[i];
6563 vmdq_info->pf = pf;
6564 vmdq_info->vsi = vsi;
6565 }

Callers 1

i40e_dev_configureFunction · 0.85

Calls 7

i40e_pf_disable_irq0Function · 0.85
rte_zmallocFunction · 0.85
i40e_vsi_setupFunction · 0.85
i40e_vsi_add_vlanFunction · 0.85
i40e_pf_enable_irq0Function · 0.85
i40e_vsi_releaseFunction · 0.85
rte_freeFunction · 0.85

Tested by

no test coverage detected