RE: [RFC PATCH 05/12] ixgbe: Add SR-IOV features to main module

Previous thread: [RFC PATCH 02/12] ixgbe: Add SR-IOV specific features by Jeff Kirsher on Tuesday, December 8, 2009 - 3:13 pm. (1 message)

Next thread: [PATCH] Add sysctl to set the advertised TCP initial receive window. by chavey on Tuesday, December 8, 2009 - 3:40 pm. (6 messages)
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:13 pm

From: Greg Rose <gregory.v.rose@intel.com>

The 82599 virtual function device and the master 82599 physical function
device implement a mailbox utility for communication between the devices
using some SRAM scratch memory and a doorbell/answering mechanism enabled
via interrupt and/or polling.  This C module and accompanying header
file implement the base functions for use of this feature.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbe/ixgbe_mbx.c |  480 +++++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbe/ixgbe_mbx.h |   96 ++++++++
 2 files changed, 576 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ixgbe/ixgbe_mbx.c
 create mode 100644 drivers/net/ixgbe/ixgbe_mbx.h

diff --git a/drivers/net/ixgbe/ixgbe_mbx.c b/drivers/net/ixgbe/ixgbe_mbx.c
new file mode 100644
index 0000000..5cd5ae8
--- /dev/null
+++ b/drivers/net/ixgbe/ixgbe_mbx.c
@@ -0,0 +1,480 @@
+/*******************************************************************************
+
+  Intel 10 Gigabit PCI Express Linux driver
+  Copyright(c) 1999 - 2009 Intel Corporation.
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact ...
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:14 pm

From: Greg Rose <gregory.v.rose@intel.com>

Adds code to the core 82599 module to support SR-IOV features of the 82599
network controller

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbe/ixgbe_82599.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/ixgbe/ixgbe_82599.c
index 5383405..f45b9b4 100644
--- a/drivers/net/ixgbe/ixgbe_82599.c
+++ b/drivers/net/ixgbe/ixgbe_82599.c
@@ -31,6 +31,7 @@
 
 #include "ixgbe.h"
 #include "ixgbe_phy.h"
+#include "ixgbe_mbx.h"
 
 #define IXGBE_82599_MAX_TX_QUEUES 128
 #define IXGBE_82599_MAX_RX_QUEUES 128
@@ -951,8 +952,6 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
 
 	msleep(50);
 
-
-
 	/*
 	 * Store the original AUTOC/AUTOC2 values if they have not been
 	 * stored off yet.  Otherwise restore the stored original
@@ -2655,4 +2654,5 @@ struct ixgbe_info ixgbe_82599_info = {
 	.mac_ops                = &mac_ops_82599,
 	.eeprom_ops             = &eeprom_ops_82599,
 	.phy_ops                = &phy_ops_82599,
+	.mbx_ops                = &mbx_ops_82599,
 };

--

From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:13 pm

From: Greg Rose <gregory.v.rose@intel.com>

This patch adds register definitions, bit definitions and structures used by
the SW to support SR-IOV features of the 82599 controller.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbe/ixgbe.h      |   31 +++++++++++++++++++++++++--
 drivers/net/ixgbe/ixgbe_type.h |   46 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h
index 8da8eb5..ed73585 100644
--- a/drivers/net/ixgbe/ixgbe.h
+++ b/drivers/net/ixgbe/ixgbe.h
@@ -98,6 +98,23 @@
 
 #define IXGBE_MAX_RSC_INT_RATE          162760
 
+#define IXGBE_MAX_VF_MC_ENTRIES         30
+#define IXGBE_MAX_VF_FUNCTIONS          64
+#define IXGBE_MAX_VFTA_ENTRIES          128
+#define MAX_EMULATION_MAC_ADDRS         16
+#define VMDQ_P(p)   ((p) + adapter->num_vfs)
+
+struct vf_data_storage {
+	unsigned char vf_mac_addresses[ETH_ALEN];
+	u16 vf_mc_hashes[IXGBE_MAX_VF_MC_ENTRIES];
+	u16 num_vf_mc_hashes;
+	u16 default_vf_vlan_id;
+	u16 vlans_enabled;
+	unsigned char em_mac_addresses[MAX_EMULATION_MAC_ADDRS * ETH_ALEN];
+	bool clear_to_send;
+	int rar;
+};
+
 /* wrapper around a pointer to a socket buffer,
  * so a DMA handle can be stored along with the buffer */
 struct ixgbe_tx_buffer {
@@ -171,7 +188,7 @@ struct ixgbe_ring {
 enum ixgbe_ring_f_enum {
 	RING_F_NONE = 0,
 	RING_F_DCB,
-	RING_F_VMDQ,
+	RING_F_VMDQ,  /* SR-IOV uses the same ring feature */
 	RING_F_RSS,
 	RING_F_FDIR,
 #ifdef IXGBE_FCOE
@@ -183,7 +200,7 @@ enum ixgbe_ring_f_enum {
 
 #define IXGBE_MAX_DCB_INDICES   8
 #define IXGBE_MAX_RSS_INDICES  16
-#define IXGBE_MAX_VMDQ_INDICES 16
+#define IXGBE_MAX_VMDQ_INDICES 64
 #define IXGBE_MAX_FDIR_INDICES 64
 #ifdef IXGBE_FCOE
 #define IXGBE_MAX_FCOE_INDICES  8
@@ -288,6 +305,8 @@ struct ixgbe_adapter ...
From: Simon Horman
Date: Wednesday, December 9, 2009 - 5:06 pm

Making ixgbe_set_rx_mode() non-static in ixgbe_main.c needs to be moved
forward from patch "[RFC PATCH 05/12] ixgbe: Add SR-IOV features to main
module" into this patch to avoid breaking the build.

$ make
...
  CC [M]  drivers/net/ixgbe/ixgbe_main.o
drivers/net/ixgbe/ixgbe_main.c:2402: error: static declaration of 'ixgbe_set_rx_mode' follows non-static declaration
drivers/net/ixgbe/ixgbe.h:470: error: previous declaration of 'ixgbe_set_rx_mode' was here
make[1]: *** [drivers/net/ixgbe/ixgbe_main.o] Error 1
make: *** [_module_drivers/net/ixgbe] Error 2
--

From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:14 pm

From: Greg Rose <gregory.v.rose@intel.com>

Adds SR-IOV features supported by the 82599 controller to the main driver
module.  If the CONFIG_PCI_IOV kernel option is selected then the SR-IOV
features are enabled.  Use the max_vfs module option to allocate up to 63
virtual functions per physical port.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbe/ixgbe_main.c |  270 ++++++++++++++++++++++++++++++++++++++--
 1 files changed, 259 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 35ea8c9..0bde380 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -45,6 +45,7 @@
 #include "ixgbe.h"
 #include "ixgbe_common.h"
 #include "ixgbe_dcb_82599.h"
+#include "ixgbe_sriov.h"
 
 char ixgbe_driver_name[] = "ixgbe";
 static const char ixgbe_driver_string[] =
@@ -124,6 +125,13 @@ 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");
+#endif /* CONFIG_PCI_IOV */
+
 MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
 MODULE_DESCRIPTION("Intel(R) 10 Gigabit PCI Express Network Driver");
 MODULE_LICENSE("GPL");
@@ -131,6 +139,42 @@ MODULE_VERSION(DRV_VERSION);
 
 #define DEFAULT_DEBUG_LEVEL_SHIFT 3
 
+static inline void ixgbe_disable_sriov(struct ixgbe_adapter *adapter)
+{
+	struct ixgbe_hw *hw = &adapter->hw;
+	u32 gcr;
+	u32 gpie;
+	u32 vmdctl;
+
+#ifdef CONFIG_PCI_IOV
+	/* disable iov and allow time for transactions to clear */
+	pci_disable_sriov(adapter->pdev);
+#endif
+	msleep(500);
+
+	/* turn off device IOV mode */
+	gcr = IXGBE_READ_REG(hw, IXGBE_GCR_EXT);
+	gcr &= ...
From: Simon Horman
Date: Wednesday, December 9, 2009 - 5:45 pm

I wonder if it would be easier on the eyes to break the hunk above out into
a ixgbe_probe_vf() function. Something like (compile tested only, I don't
have an 82599):

static void ixgbe_probe_vf(struct ixgbe_adapter *adapter,
                           const struct ixgbe_info *ii)
{
#ifdef CONFIG_PCI_IOV
	struct ixgbe_hw *hw = &adapter->hw;
        int err;

	if (hw->mac.type != ixgbe_mac_82599EB || !max_vfs)
		return;

	/* The 82599 supports up to 64 VFs per physical function
	 * but this implementation limits allocation to 63 so that
	 * basic networking resources are still available to the
	 * physical function
	 */
	adapter->num_vfs = (max_vfs > 63) ? 63 : max_vfs;
	adapter->flags |= IXGBE_FLAG_SRIOV_ENABLED;
	err = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
	if (err) {
		DPRINTK(PROBE, ERR, "Failed to enable PCI sriov: %d\n", err);
		goto err_novf;
	}

	adapter->vfinfo = kcalloc(adapter->num_vfs,
				  sizeof(struct vf_data_storage), GFP_KERNEL);
	if (!adapter->vfinfo) {
		/* Oh oh */
		DPRINTK(PROBE, ERR, "Unable to allocate memory for VF "
			"Data Storage - SRIOV disabled\n");
		goto err_sriov;
	}

	/* Now that we're sure SR-IOV is enabled
	 * set up the mailbox parameters
	 */
	ixgbe_init_mbx_params_pf(hw);
	memcpy(&hw->mbx.ops, ii->mbx_ops, sizeof(hw->mbx.ops));

	return;
err_sriov:
        pci_disable_sriov(adapter->pdev);
err_novf:
	adapter->flags &= ~IXGBE_FLAG_SRIOV_ENABLED;
	adapter->num_vfs = 0;
	return;
#endif /* CONFIG_PCI_IOV */
	;
}

--

From: Rose, Gregory V
Date: Wednesday, December 9, 2009 - 5:49 pm

[Rose, Gregory V] 

[Rose, Gregory V] 

I think that was done with the igb driver.  It's a good suggestion.

- Greg

--

From: Simon Horman
Date: Wednesday, December 9, 2009 - 6:04 pm

Thanks. Actually I only noticed while doing the error paths

Yes, something like that is in igb.

--

From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:14 pm

From: Greg Rose <gregory.v.rose@intel.com>

Add the mailbox and SR-IOV feature modules to the ixgbe driver Makefile.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbe/Makefile |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ixgbe/Makefile b/drivers/net/ixgbe/Makefile
index 21b41f4..1dd867d 100644
--- a/drivers/net/ixgbe/Makefile
+++ b/drivers/net/ixgbe/Makefile
@@ -33,7 +33,8 @@
 obj-$(CONFIG_IXGBE) += ixgbe.o
 
 ixgbe-objs := ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o \
-              ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o
+              ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o \
+              ixgbe_mbx.o
 
 ixgbe-$(CONFIG_IXGBE_DCB) +=  ixgbe_dcb.o ixgbe_dcb_82598.o \
                               ixgbe_dcb_82599.o ixgbe_dcb_nl.o

--

From: Simon Horman
Date: Wednesday, December 9, 2009 - 5:17 pm

This change needs to be moved to before
"[RFC PATCH 04/12] ixgbe: Add SR-IOV feature enablement code"
to avoid missing symbols in the driver. But perhaps it would be easier to
just incorporate it into the patch that introduces the new
source files?

$ make
...
WARNING: "mbx_ops_82599" [drivers/net/ixgbe/ixgbe.ko] undefined!

There are more warnings after applying
"[RFC PATCH 05/12] ixgbe: Add SR-IOV features to main module"

$ make
...
WARNING: "mbx_ops_82599" [drivers/net/ixgbe/ixgbe.ko] undefined!
WARNING: "ixgbe_init_mbx_params_pf" [drivers/net/ixgbe/ixgbe.ko] undefined!
WARNING: "ixgbe_vf_configuration" [drivers/net/ixgbe/ixgbe.ko] undefined!
WARNING: "ixgbe_restore_vf_multicasts" [drivers/net/ixgbe/ixgbe.ko] undefined!
WARNING: "ixgbe_msg_task" [drivers/net/ixgbe/ixgbe.ko] undefined!
WARNING: "ixgbe_set_vmolr" [drivers/net/ixgbe/ixgbe.ko] undefined!

--

From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:15 pm

From: Greg Rose <gregory.v.rose@intel.com>

These two headers define the commonly used macros, data structures,
register bits and register offsets used by the ixgbevf driver on the
82599 virtual function device

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbevf/defines.h |  301 +++++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbevf/regs.h    |   85 ++++++++++++
 2 files changed, 386 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ixgbevf/defines.h
 create mode 100644 drivers/net/ixgbevf/regs.h

diff --git a/drivers/net/ixgbevf/defines.h b/drivers/net/ixgbevf/defines.h
new file mode 100644
index 0000000..b111771
--- /dev/null
+++ b/drivers/net/ixgbevf/defines.h
@@ -0,0 +1,301 @@
+/*******************************************************************************
+
+  Intel 82599 Virtual Function driver
+  Copyright(c) 1999 - 2009 Intel Corporation.
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information:
+  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR ...
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:15 pm

From: Greg Rose <gregory.v.rose@intel.com>

This module and header file contain the core functions for the 82599
virtual function device.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbevf/vf.c |  404 ++++++++++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbevf/vf.h |  168 +++++++++++++++++++
 2 files changed, 572 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ixgbevf/vf.c
 create mode 100644 drivers/net/ixgbevf/vf.h

diff --git a/drivers/net/ixgbevf/vf.c b/drivers/net/ixgbevf/vf.c
new file mode 100644
index 0000000..22cccc5
--- /dev/null
+++ b/drivers/net/ixgbevf/vf.c
@@ -0,0 +1,404 @@
+/*******************************************************************************
+
+  Intel 82599 Virtual Function driver
+  Copyright(c) 1999 - 2009 Intel Corporation.
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information:
+  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+*******************************************************************************/
+
+#include "vf.h"
+
+static s32 ...
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:15 pm

From: Greg Rose <gregory.v.rose@intel.com>

The 82599 virtual function device and the master 82599 physical function
device implement a mailbox utility for communication between the devices
using some SRAM scratch memory and a doorbell/answering mechanism enabled
via interrupt and/or polling.  This C module and accompanying header
file implement the base functions for use of this feature.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbevf/mbx.c |  354 +++++++++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbevf/mbx.h |  100 +++++++++++++
 2 files changed, 454 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ixgbevf/mbx.c
 create mode 100644 drivers/net/ixgbevf/mbx.h

diff --git a/drivers/net/ixgbevf/mbx.c b/drivers/net/ixgbevf/mbx.c
new file mode 100644
index 0000000..a6e81fe
--- /dev/null
+++ b/drivers/net/ixgbevf/mbx.c
@@ -0,0 +1,354 @@
+/*******************************************************************************
+
+  Intel 82599 Virtual Function driver
+  Copyright(c) 1999 - 2009 Intel Corporation.
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information:
+  ...
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:16 pm

From: Greg Rose <gregory.v.rose@intel.com>

These modules and header contain the Linux OS network interface code and core
interrupt and network send/receive handlers.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbevf/ethtool.c      |  815 ++++++++
 drivers/net/ixgbevf/ixgbevf.h      |  318 +++
 drivers/net/ixgbevf/ixgbevf_main.c | 3588 ++++++++++++++++++++++++++++++++++++
 3 files changed, 4721 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ixgbevf/ethtool.c
 create mode 100644 drivers/net/ixgbevf/ixgbevf.h
 create mode 100644 drivers/net/ixgbevf/ixgbevf_main.c

diff --git a/drivers/net/ixgbevf/ethtool.c b/drivers/net/ixgbevf/ethtool.c
new file mode 100644
index 0000000..0e3f50a
--- /dev/null
+++ b/drivers/net/ixgbevf/ethtool.c
@@ -0,0 +1,815 @@
+/*******************************************************************************
+
+  Intel 82599 Virtual Function driver
+  Copyright(c) 1999 - 2009 Intel Corporation.
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information:
+  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
+  Intel Corporation, 5200 N.E. Elam Young ...
From: Ben Hutchings
Date: Wednesday, December 9, 2009 - 10:57 am

I had a look at the ethtool part of this:

On Tue, 2009-12-08 at 14:16 -0800, Jeff Kirsher wrote:


You can omit most of these #ifdefs in the in-tree driver.



This is bogus; get_settings() must be called in process context with
rtnl_lock held.  (If this is a workaround for the old bonding driver

Should be -EOPNOTSUPP; the settings may or may not be valid.  In fact,
you should just not fill in the set_settings operation.




Ew.

[...]

If you move ixgbevf_get_regs_len() after ixgbevf_reg_names() you can
then use ARRAY_SIZE() instead of having to keep IXGBE_REGS_LEN in sync



The ethtool core initialises these.


This is just messy.

[...]

Use ethtool_op_get_link().

Ben.

-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

--

From: Rose, Gregory V
Date: Wednesday, December 9, 2009 - 11:02 am

[Empty message]
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:16 pm

From: Greg Rose <gregory.v.rose@intel.com>

Driver Makefile

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 drivers/net/ixgbevf/Makefile |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/ixgbevf/Makefile

diff --git a/drivers/net/ixgbevf/Makefile b/drivers/net/ixgbevf/Makefile
new file mode 100644
index 0000000..dd4e0d2
--- /dev/null
+++ b/drivers/net/ixgbevf/Makefile
@@ -0,0 +1,38 @@
+################################################################################
+#
+# Intel 82599 Virtual Function driver
+# Copyright(c) 1999 - 2009 Intel Corporation.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms and conditions of the GNU General Public License,
+# version 2, as published by the Free Software Foundation.
+#
+# This program is distributed in the hope it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# The full GNU General Public License is included in this distribution in
+# the file called "COPYING".
+#
+# Contact Information:
+# e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
+# Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+#
+################################################################################
+
+#
+# Makefile for the Intel(R) 82599 VF ethernet driver
+#
+
+obj-$(CONFIG_IXGBEVF) += ixgbevf.o
+
+ixgbevf-objs := vf.o \
+                mbx.o \
+                ethtool.o \
+           ...
From: Jeff Kirsher
Date: Tuesday, December 8, 2009 - 3:16 pm

From: Greg Rose <gregory.v.rose@intel.com>

Modifications for the Kconfig and network device Makefile to add the ixgbevf
driver module to the kernel and documentation.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---

 Documentation/networking/ixgbevf.txt |   94 ++++++++++++++++++++++++++++++++++
 drivers/net/Kconfig                  |   21 ++++++++
 drivers/net/Makefile                 |    1 
 3 files changed, 116 insertions(+), 0 deletions(-)
 create mode 100755 Documentation/networking/ixgbevf.txt

diff --git a/Documentation/networking/ixgbevf.txt b/Documentation/networking/ixgbevf.txt
new file mode 100755
index 0000000..4981426
--- /dev/null
+++ b/Documentation/networking/ixgbevf.txt
@@ -0,0 +1,94 @@
+Linux* Base Driver for Intel(R) Network Connection
+==================================================
+
+November 24, 2009
+
+Contents
+========
+
+- In This Release
+- Identifying Your Adapter
+- Known Issues/Troubleshooting
+- Support
+
+In This Release
+===============
+
+This file describes the ixgbevf Linux* Base Driver for Intel Network
+Connection.
+
+The ixgbevf driver supports 82599-based virtual function devices that can only
+be activated on kernels with CONFIG_PCI_IOV enabled.
+
+The ixgbevf driver supports virtual functions generated by the ixgbe driver
+with a max_vfs value of 1 or greater.
+
+The guest OS loading the ixgbevf driver must support MSI-X interrupts.
+
+VLANs: There is a limit of a total of 32 shared VLANs to 1 or more VFs.
+
+Identifying Your Adapter
+========================
+
+For more information on how to identify your adapter, go to the Adapter &
+Driver ID Guide at:
+
+    http://support.intel.com/support/go/network/adapter/idguide.htm
+
+Known Issues/Troubleshooting
+============================
+
+  Intel(R) Active Management Technology 2.0, 2.1, 2.5 not supported in
+  conjunction with Linux driver
+  ...
From: Randy Dunlap
Date: Tuesday, December 8, 2009 - 3:41 pm

Hi,

Could the Kconfig language express some of these requirements, or

	depends on PCI_IOV && PCI_MSI


---
~Randy
--

From: Rose, Gregory V
Date: Tuesday, December 8, 2009 - 3:49 pm

[Rose, Gregory V] 

[Rose, Gregory V] 

The guest does not need to have IOV support configured to use the VF device but it does need MSI-X.  We'll incorporate this suggested change.

Thanks for your comments.

- Greg

--

From: Simon Horman
Date: Wednesday, December 9, 2009 - 5:59 pm

The igbvf driver can also run on the host or indeed on a system
without virtualisation. Is the same true of the ixgbevf driver?

--

From: Rose, Gregory V
Date: Wednesday, December 9, 2009 - 6:04 pm

[Rose, Gregory V] 

Yes.

- Greg
--

From: Simon Horman
Date: Wednesday, December 9, 2009 - 5:50 pm

Does ixgbe_init_mbx_params_pf() need a return value?
The only caller seems to ignore it.

Also, I prefer the following idiom, but in this case
it doesn't seem to offer any advantage:

void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)
{
	struct ixgbe_mbx_info *mbx = &hw->mbx;

	if (hw->mac.type != ixgbe_mac_82599EB)
		return;

	mbx->timeout = 0;
	mbx->usec_delay = 0;

	mbx->size = IXGBE_VFMAILBOX_SIZE;

	mbx->stats.msgs_tx = 0;
	mbx->stats.msgs_rx = 0;
	mbx->stats.reqs = 0;
	mbx->stats.acks = 0;
	mbx->stats.rsts = 0;
}
--

From: Rose, Gregory V
Date: Wednesday, December 9, 2009 - 5:53 pm

[Rose, Gregory V] 

[Rose, Gregory V] 

[Rose, Gregory V] 

Fewer lines of unnecessary text are a good thing.  Also noted.

- Greg

--

Previous thread: [RFC PATCH 02/12] ixgbe: Add SR-IOV specific features by Jeff Kirsher on Tuesday, December 8, 2009 - 3:13 pm. (1 message)

Next thread: [PATCH] Add sysctl to set the advertised TCP initial receive window. by chavey on Tuesday, December 8, 2009 - 3:40 pm. (6 messages)