diff options
author | David S. Miller <davem@davemloft.net> | 2012-07-20 22:11:59 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-20 22:11:59 +0400 |
commit | e4bce0f288bafd8505ba5ce9c5284a4478f1b725 (patch) | |
tree | 361c9647757df8a6f9dc40b738325f717d6aeabd /drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | |
parent | aac3942cedc339b1e7b6bad28f3abe4ceb15bcc3 (diff) | |
parent | a58915c7ecba89bef0914664ecf87c2156c68630 (diff) | |
download | linux-e4bce0f288bafd8505ba5ce9c5284a4478f1b725.tar.xz |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
Jerr Kirsher says:
====================
This series contains updates to ixgbe.
...
Alexander Duyck (9):
ixgbe: Use VMDq offset to indicate the default pool
ixgbe: Fix memory leak when SR-IOV VFs are direct assigned
ixgbe: Drop references to deprecated pci_ DMA api and instead use
dma_ API
ixgbe: Cleanup configuration of FCoE registers
ixgbe: Merge all FCoE percpu values into a single structure
ixgbe: Make FCoE allocation and configuration closer to how rings
work
ixgbe: Correctly set SAN MAC RAR pool to default pool of PF
ixgbe: Only enable anti-spoof on VF pools
ixgbe: Enable FCoE FSO and CRC offloads based on CAPABLE instead of
ENABLED flag
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c')
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c index 089468224e7e..a825d4808cd2 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c @@ -208,6 +208,17 @@ void ixgbe_disable_sriov(struct ixgbe_adapter *adapter) u32 vmdctl; int i; + /* set num VFs to 0 to prevent access to vfinfo */ + adapter->num_vfs = 0; + + /* free VF control structures */ + kfree(adapter->vfinfo); + adapter->vfinfo = NULL; + + /* free macvlan list */ + kfree(adapter->mv_list); + adapter->mv_list = NULL; + #ifdef CONFIG_PCI_IOV /* disable iov and allow time for transactions to clear */ pci_disable_sriov(adapter->pdev); @@ -225,6 +236,11 @@ void ixgbe_disable_sriov(struct ixgbe_adapter *adapter) IXGBE_WRITE_REG(hw, IXGBE_VT_CTL, vmdctl); IXGBE_WRITE_FLUSH(hw); + /* Disable VMDq flag so device will be set in VM mode */ + if (adapter->ring_feature[RING_F_VMDQ].limit == 1) + adapter->flags &= ~IXGBE_FLAG_VMDQ_ENABLED; + adapter->ring_feature[RING_F_VMDQ].offset = 0; + /* take a breather then clean up driver data */ msleep(100); @@ -233,11 +249,7 @@ void ixgbe_disable_sriov(struct ixgbe_adapter *adapter) if (adapter->vfinfo[i].vfdev) pci_dev_put(adapter->vfinfo[i].vfdev); } - kfree(adapter->vfinfo); - kfree(adapter->mv_list); - adapter->vfinfo = NULL; - adapter->num_vfs = 0; adapter->flags &= ~IXGBE_FLAG_SRIOV_ENABLED; } |