Need ixgbe guys to close the loop to use set_max_vfs instead kernel parameters.
Signed-off-by: Yinghai Lu <ying...@kernel.org> Cc: Jeff Kirsher <jeffrey.t.kirs...@intel.com> Cc: Jesse Brandeburg <jesse.brandeb...@intel.com> Cc: Greg Rose <gregory.v.r...@intel.com> Cc: "David S. Miller" <da...@davemloft.net> Cc: John Fastabend <john.r.fastab...@intel.com> Cc: e1000-devel@lists.sourceforge.net Cc: net...@vger.kernel.org --- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 2 + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 44 +++++++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h index b9623e9..d39d975 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h @@ -558,6 +558,8 @@ struct ixgbe_adapter { u32 interrupt_event; u32 led_reg; + struct ixgbe_info *ixgbe_info; + #ifdef CONFIG_IXGBE_PTP struct ptp_clock *ptp_clock; struct ptp_clock_info ptp_caps; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index ee61819..1c097c7 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -129,13 +129,6 @@ static struct notifier_block dca_notifier = { }; #endif -#ifdef CONFIG_PCI_IOV -static unsigned int max_vfs; -module_param(max_vfs, uint, 0); -MODULE_PARM_DESC(max_vfs, - "Maximum number of virtual functions to allocate per physical function - default is zero and maximum value is 63"); -#endif /* CONFIG_PCI_IOV */ - static unsigned int allow_unsupported_sfp; module_param(allow_unsupported_sfp, uint, 0); MODULE_PARM_DESC(allow_unsupported_sfp, @@ -4496,7 +4489,7 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter) #ifdef CONFIG_PCI_IOV /* assign number of SR-IOV VFs */ if (hw->mac.type != ixgbe_mac_82598EB) - adapter->num_vfs = (max_vfs > 63) ? 0 : max_vfs; + adapter->num_vfs = min_t(int, pdev->max_vfs, 63); #endif /* enable itr by default in dynamic mode */ @@ -7220,8 +7213,9 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev, #ifdef CONFIG_PCI_IOV ixgbe_enable_sriov(adapter, ii); - #endif + adapter->ixgbe_info = ii; + netdev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | @@ -7683,11 +7677,43 @@ static const struct pci_error_handlers ixgbe_err_handler = { .resume = ixgbe_io_resume, }; +static void ixgbe_set_max_vfs(struct pci_dev *pdev) +{ +#ifdef CONFIG_PCI_IOV + struct ixgbe_adapter *adapter = pci_get_drvdata(pdev); + struct ixgbe_hw *hw = &adapter->hw; + int num_vfs = 0; + + /* assign number of SR-IOV VFs */ + if (hw->mac.type != ixgbe_mac_82598EB) + num_vfs = min_t(int, pdev->max_vfs, 63); + + /* no change */ + if (adapter->num_vfs == num_vfs) + return; + + if (!num_vfs) { + /* disable sriov */ + ixgbe_disable_sriov(adapter); + adapter->num_vfs = 0; + } else if (!adapter->num_vfs && num_vfs) { + /* enable sriov */ + adapter->num_vfs = num_vfs; + ixgbe_enable_sriov(adapter, adapter->ixgbe_info); + } else { + /* increase or decrease */ + } + + pdev->max_vfs = adapter->num_vfs; +#endif +} + static struct pci_driver ixgbe_driver = { .name = ixgbe_driver_name, .id_table = ixgbe_pci_tbl, .probe = ixgbe_probe, .remove = __devexit_p(ixgbe_remove), + .set_max_vfs = ixgbe_set_max_vfs, #ifdef CONFIG_PM .suspend = ixgbe_suspend, .resume = ixgbe_resume, -- 1.7.7 ------------------------------------------------------------------------------ Don't let slow site performance ruin your business. Deploy New Relic APM Deploy New Relic app performance management and know exactly what is happening inside your Ruby, Python, PHP, Java, and .NET app Try New Relic at no cost today and get our sweet Data Nerd shirt too! http://p.sf.net/sfu/newrelic-dev2dev _______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired