Commit 2bc09729 authored by Emil Tantilov's avatar Emil Tantilov Committed by Jeff Kirsher

ixgbe: move num_vfs_macvlans allocation into separate function

Move the code allocating memory for list of MAC addresses that
the VFs can use for MACVLAN into its own function.
Signed-off-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 5b9d3cfb
...@@ -46,42 +46,50 @@ ...@@ -46,42 +46,50 @@
#include "ixgbe_sriov.h" #include "ixgbe_sriov.h"
#ifdef CONFIG_PCI_IOV #ifdef CONFIG_PCI_IOV
static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter) static inline void ixgbe_alloc_vf_macvlans(struct ixgbe_adapter *adapter)
{ {
struct ixgbe_hw *hw = &adapter->hw; struct ixgbe_hw *hw = &adapter->hw;
int num_vf_macvlans, i;
struct vf_macvlans *mv_list; struct vf_macvlans *mv_list;
int num_vf_macvlans, i;
adapter->flags |= IXGBE_FLAG_SRIOV_ENABLED;
e_info(probe, "SR-IOV enabled with %d VFs\n", adapter->num_vfs);
/* Enable VMDq flag so device will be set in VM mode */
adapter->flags |= IXGBE_FLAG_VMDQ_ENABLED;
if (!adapter->ring_feature[RING_F_VMDQ].limit)
adapter->ring_feature[RING_F_VMDQ].limit = 1;
adapter->ring_feature[RING_F_VMDQ].offset = adapter->num_vfs;
num_vf_macvlans = hw->mac.num_rar_entries - num_vf_macvlans = hw->mac.num_rar_entries -
(IXGBE_MAX_PF_MACVLANS + 1 + adapter->num_vfs); (IXGBE_MAX_PF_MACVLANS + 1 + adapter->num_vfs);
if (!num_vf_macvlans)
return;
adapter->mv_list = mv_list = kcalloc(num_vf_macvlans, mv_list = kcalloc(num_vf_macvlans, sizeof(struct vf_macvlans),
sizeof(struct vf_macvlans), GFP_KERNEL);
GFP_KERNEL);
if (mv_list) { if (mv_list) {
/* Initialize list of VF macvlans */ /* Initialize list of VF macvlans */
INIT_LIST_HEAD(&adapter->vf_mvs.l); INIT_LIST_HEAD(&adapter->vf_mvs.l);
for (i = 0; i < num_vf_macvlans; i++) { for (i = 0; i < num_vf_macvlans; i++) {
mv_list->vf = -1; mv_list[i].vf = -1;
mv_list->free = true; mv_list[i].free = true;
list_add(&mv_list->l, &adapter->vf_mvs.l); list_add(&mv_list[i].l, &adapter->vf_mvs.l);
mv_list++;
} }
adapter->mv_list = mv_list;
} }
}
static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter)
{
struct ixgbe_hw *hw = &adapter->hw;
adapter->flags |= IXGBE_FLAG_SRIOV_ENABLED;
e_info(probe, "SR-IOV enabled with %d VFs\n", adapter->num_vfs);
/* Enable VMDq flag so device will be set in VM mode */
adapter->flags |= IXGBE_FLAG_VMDQ_ENABLED;
if (!adapter->ring_feature[RING_F_VMDQ].limit)
adapter->ring_feature[RING_F_VMDQ].limit = 1;
adapter->ring_feature[RING_F_VMDQ].offset = adapter->num_vfs;
/* Initialize default switching mode VEB */ /* Initialize default switching mode VEB */
IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN); IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN);
adapter->bridge_mode = BRIDGE_MODE_VEB; adapter->bridge_mode = BRIDGE_MODE_VEB;
ixgbe_alloc_vf_macvlans(adapter);
/* If call to enable VFs succeeded then allocate memory /* If call to enable VFs succeeded then allocate memory
* for per VF control structures. * for per VF control structures.
*/ */
...@@ -89,6 +97,8 @@ static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter) ...@@ -89,6 +97,8 @@ static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter)
kcalloc(adapter->num_vfs, kcalloc(adapter->num_vfs,
sizeof(struct vf_data_storage), GFP_KERNEL); sizeof(struct vf_data_storage), GFP_KERNEL);
if (adapter->vfinfo) { if (adapter->vfinfo) {
int i;
/* limit trafffic classes based on VFs enabled */ /* limit trafffic classes based on VFs enabled */
if ((adapter->hw.mac.type == ixgbe_mac_82599EB) && if ((adapter->hw.mac.type == ixgbe_mac_82599EB) &&
(adapter->num_vfs < 16)) { (adapter->num_vfs < 16)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment