ctxt.uplink_seid = vsi->uplink_seid;
                ctxt.connection_type = 0x1;     /* regular data port */
                ctxt.flags = I40E_AQ_VSI_TYPE_PF;
+               ctxt.info.valid_sections |=
+                               cpu_to_le16(I40E_AQ_VSI_PROP_SWITCH_VALID);
+               ctxt.info.switch_id =
+                               cpu_to_le16(I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB);
                i40e_vsi_setup_queue_map(vsi, &ctxt, enabled_tc, true);
                break;
 
                else if ((vsi->flags & I40E_VSI_FLAG_VEB_OWNER) == 0)
                        veb = i40e_veb_setup(pf, 0, vsi->uplink_seid, vsi->seid,
                                             vsi->tc_config.enabled_tc);
-
+               if (veb) {
+                       if (vsi->seid != pf->vsi[pf->lan_vsi]->seid) {
+                               dev_info(&vsi->back->pdev->dev,
+                                        "%s: New VSI creation error, uplink seid of LAN VSI expected.\n",
+                                        __func__);
+                               return NULL;
+                       }
+                       i40e_enable_pf_switch_lb(pf);
+               }
                for (i = 0; i < I40E_MAX_VEB && !veb; i++) {
                        if (pf->veb[i] && pf->veb[i]->seid == vsi->uplink_seid)
                                veb = pf->veb[i];
 
        wr32(hw, I40E_VFGEN_RSTAT1(vf->vf_id), I40E_VFR_VFACTIVE);
        i40e_flush(hw);
 }
-#ifdef CONFIG_PCI_IOV
 
 /**
  * i40e_enable_pf_switch_lb
  *
  * enable switch loop back or die - no point in a return value
  **/
-static void i40e_enable_pf_switch_lb(struct i40e_pf *pf)
+void i40e_enable_pf_switch_lb(struct i40e_pf *pf)
 {
        struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];
        struct i40e_vsi_context ctxt;
                         __func__, vsi->back->hw.aq.asq_last_status);
        }
 }
-#endif
 
 /**
  * i40e_disable_pf_switch_lb