All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
@ 2014-12-30 16:30 Vlad Zolotarov
  2014-12-30 16:30 ` [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API Vlad Zolotarov
                   ` (5 more replies)
  0 siblings, 6 replies; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 16:30 UTC (permalink / raw)
  To: netdev; +Cc: gleb, avi, Vlad Zolotarov

Add the ethtool ops to VF driver to allow querying the RSS indirection table
and RSS Random Key.

 - PF driver: Add new VF-PF channel commands.
 - VF driver: Utilize these new commands and add the corresponding
              ethtool callbacks.

Vlad Zolotarov (5):
  ixgbe: Add a RETA query command to VF-PF channel API
  ixgbevf: Add a RETA query code
  ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
  ixgbevf: Add RSS Key query code
  ixgbevf: Add the appropriate ethtool ops to query RSS indirection
    table and key

 drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60 +++++++++++
 drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37 +++++++
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
 drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
 drivers/net/ethernet/intel/ixgbevf/vf.c           | 125 ++++++++++++++++++++++
 drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
 7 files changed, 243 insertions(+), 1 deletion(-)

-- 
2.1.0

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API
  2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
@ 2014-12-30 16:30 ` Vlad Zolotarov
  2014-12-30 19:21   ` Jeff Kirsher
  2014-12-30 16:30 ` [RFC PATCH net-next 2/5] ixgbevf: Add a RETA query code Vlad Zolotarov
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 16:30 UTC (permalink / raw)
  To: netdev; +Cc: gleb, avi, Vlad Zolotarov

82599 VFs and PF share the same RSS redirection table (RETA). Therefore we
just return it for all VFs.

RETA table is an array of 32 registers and the maximum number of registers
that may be delivered in a single VF-PF channel command is 15. Therefore
we will deliver the whole table in 3 steps: 12, 12 and 8 registers in each
step correspondingly. Thus this patch does the following:

  - Adds a new API version (to specify a new commands set).
  - Adds the IXGBE_VF_GET_RETA_[0,1,2] commands to the VF-PF commands set.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  6 +++++
 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 35 ++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
index a5cb755..c1123d9 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
@@ -73,6 +73,7 @@ enum ixgbe_pfvf_api_rev {
 	ixgbe_mbox_api_10,	/* API version 1.0, linux/freebsd VF driver */
 	ixgbe_mbox_api_20,	/* API version 2.0, solaris Phase1 VF driver */
 	ixgbe_mbox_api_11,	/* API version 1.1, linux/freebsd VF driver */
+	ixgbe_mbox_api_12,	/* API version 1.2, linux/freebsd VF driver */
 	/* This value should always be last */
 	ixgbe_mbox_api_unknown,	/* indicates that API version is not known */
 };
@@ -91,6 +92,11 @@ enum ixgbe_pfvf_api_rev {
 /* mailbox API, version 1.1 VF requests */
 #define IXGBE_VF_GET_QUEUES	0x09 /* get queue configuration */
 
+/* mailbox API, version 1.2 VF requests */
+#define IXGBE_VF_GET_RETA_0	0x0a /* get RETA[0..11]  */
+#define IXGBE_VF_GET_RETA_1	0x0b /* get RETA[12..23] */
+#define IXGBE_VF_GET_RETA_2	0x0c /* get RETA[24..31] */
+
 /* GET_QUEUES return data indices within the mailbox */
 #define IXGBE_VF_TX_QUEUES	1	/* number of Tx queues supported */
 #define IXGBE_VF_RX_QUEUES	2	/* number of Rx queues supported */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index c76ba90..84db1a5 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -427,6 +427,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
 #endif /* CONFIG_FCOE */
 		switch (adapter->vfinfo[vf].vf_api) {
 		case ixgbe_mbox_api_11:
+		case ixgbe_mbox_api_12:
 			/*
 			 * Version 1.1 supports jumbo frames on VFs if PF has
 			 * jumbo frames enabled which means legacy VFs are
@@ -894,6 +895,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
 	switch (api) {
 	case ixgbe_mbox_api_10:
 	case ixgbe_mbox_api_11:
+	case ixgbe_mbox_api_12:
 		adapter->vfinfo[vf].vf_api = api;
 		return 0;
 	default:
@@ -917,6 +919,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
 	switch (adapter->vfinfo[vf].vf_api) {
 	case ixgbe_mbox_api_20:
 	case ixgbe_mbox_api_11:
+	case ixgbe_mbox_api_12:
 		break;
 	default:
 		return -1;
@@ -944,6 +947,29 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
 	return 0;
 }
 
+static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
+			     u32 *msgbuf, u32 vf, int reta_offset_dw,
+			     size_t dwords)
+{
+	struct ixgbe_hw *hw = &adapter->hw;
+	int i;
+	u32 *reta = &msgbuf[1];
+
+	/* verify the PF is supporting the correct API */
+	switch (adapter->vfinfo[vf].vf_api) {
+	case ixgbe_mbox_api_12:
+		break;
+	default:
+		return -EPERM;
+	}
+
+	/* Read the appropriate portion of RETA */
+	for (i = 0; i < dwords; i++)
+		reta[i] = IXGBE_READ_REG(hw, IXGBE_RETA(i + reta_offset_dw));
+
+	return 0;
+}
+
 static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
 {
 	u32 mbx_size = IXGBE_VFMAILBOX_SIZE;
@@ -1000,6 +1026,15 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
 	case IXGBE_VF_GET_QUEUES:
 		retval = ixgbe_get_vf_queues(adapter, msgbuf, vf);
 		break;
+	case IXGBE_VF_GET_RETA_0:
+		retval = ixgbe_get_vf_reta(adapter, msgbuf, vf, 0, 12);
+		break;
+	case IXGBE_VF_GET_RETA_1:
+		retval = ixgbe_get_vf_reta(adapter, msgbuf, vf, 12, 12);
+		break;
+	case IXGBE_VF_GET_RETA_2:
+		retval = ixgbe_get_vf_reta(adapter, msgbuf, vf, 24, 8);
+		break;
 	default:
 		e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
 		retval = IXGBE_ERR_MBX;
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [RFC PATCH net-next 2/5] ixgbevf: Add a RETA query code
  2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
  2014-12-30 16:30 ` [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API Vlad Zolotarov
@ 2014-12-30 16:30 ` Vlad Zolotarov
  2014-12-30 16:30 ` [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set Vlad Zolotarov
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 16:30 UTC (permalink / raw)
  To: netdev; +Cc: gleb, avi, Vlad Zolotarov

   - Added a new API version support.
   - Added the query implementation in the ixgbevf.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
---
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |  4 +-
 drivers/net/ethernet/intel/ixgbevf/mbx.h          |  6 ++
 drivers/net/ethernet/intel/ixgbevf/vf.c           | 77 +++++++++++++++++++++++
 drivers/net/ethernet/intel/ixgbevf/vf.h           |  1 +
 4 files changed, 87 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 62a0d8e..ba6ab61 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -1880,7 +1880,8 @@ static void ixgbevf_init_last_counter_stats(struct ixgbevf_adapter *adapter)
 static void ixgbevf_negotiate_api(struct ixgbevf_adapter *adapter)
 {
 	struct ixgbe_hw *hw = &adapter->hw;
-	int api[] = { ixgbe_mbox_api_11,
+	int api[] = { ixgbe_mbox_api_12,
+		      ixgbe_mbox_api_11,
 		      ixgbe_mbox_api_10,
 		      ixgbe_mbox_api_unknown };
 	int err = 0, idx = 0;
@@ -3525,6 +3526,7 @@ static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
 
 	switch (adapter->hw.api_version) {
 	case ixgbe_mbox_api_11:
+	case ixgbe_mbox_api_12:
 		max_possible_frame = IXGBE_MAX_JUMBO_FRAME_SIZE;
 		break;
 	default:
diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.h b/drivers/net/ethernet/intel/ixgbevf/mbx.h
index 0bc3005..3e148a8 100644
--- a/drivers/net/ethernet/intel/ixgbevf/mbx.h
+++ b/drivers/net/ethernet/intel/ixgbevf/mbx.h
@@ -86,6 +86,7 @@ enum ixgbe_pfvf_api_rev {
 	ixgbe_mbox_api_10,	/* API version 1.0, linux/freebsd VF driver */
 	ixgbe_mbox_api_20,	/* API version 2.0, solaris Phase1 VF driver */
 	ixgbe_mbox_api_11,	/* API version 1.1, linux/freebsd VF driver */
+	ixgbe_mbox_api_12,	/* API version 1.2, linux/freebsd VF driver */
 	/* This value should always be last */
 	ixgbe_mbox_api_unknown,	/* indicates that API version is not known */
 };
@@ -104,6 +105,11 @@ enum ixgbe_pfvf_api_rev {
 /* mailbox API, version 1.1 VF requests */
 #define IXGBE_VF_GET_QUEUE	0x09 /* get queue configuration */
 
+/* mailbox API, version 1.2 VF requests */
+#define IXGBE_VF_GET_RETA_0	0x0a /* get RETA[0..11]  */
+#define IXGBE_VF_GET_RETA_1	0x0b /* get RETA[12..23] */
+#define IXGBE_VF_GET_RETA_2	0x0c /* get RETA[24..31] */
+
 /* GET_QUEUES return data indices within the mailbox */
 #define IXGBE_VF_TX_QUEUES	1	/* number of Tx queues supported */
 #define IXGBE_VF_RX_QUEUES	2	/* number of Rx queues supported */
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c
index cdb53be..3ebc882 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.c
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
@@ -258,6 +258,82 @@ static s32 ixgbevf_set_uc_addr_vf(struct ixgbe_hw *hw, u32 index, u8 *addr)
 	return ret_val;
 }
 
+static inline int _ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *msgbuf,
+				    u32 *reta, u32 op, int reta_offset_dw,
+				    size_t dwords)
+{
+	int err;
+
+	msgbuf[0] = op;
+	err = hw->mbx.ops.write_posted(hw, msgbuf, 1);
+
+	if (err)
+		return err;
+
+	err = hw->mbx.ops.read_posted(hw, msgbuf, 1 + dwords);
+
+	if (err)
+		return err;
+
+	msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
+
+	/* If we didn't get an ACK there must have been
+	 * some sort of mailbox error so we should treat it
+	 * as such.
+	 */
+	if (msgbuf[0] != (op | IXGBE_VT_MSGTYPE_ACK))
+		return IXGBE_ERR_MBX;
+
+	memcpy(reta + reta_offset_dw, msgbuf + 1, 4 * dwords);
+
+	return 0;
+}
+
+/**
+ * ixgbevf_get_reta - get the RSS redirection table (RETA) contents.
+ * @hw: pointer to the HW structure
+ * @reta: buffer to fill with RETA contents.
+ *
+ * The "reta" buffer should be big enough to contain 32 registers.
+ *
+ * Returns: 0 on success.
+ *          if API doesn't support this operation - (-EPERM).
+ */
+int ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *reta)
+{
+	int err;
+	u32 msgbuf[IXGBE_VFMAILBOX_SIZE];
+
+	/* Return an error if API doesn't RETA querying. */
+	switch (hw->api_version) {
+	case ixgbe_mbox_api_12:
+		break;
+	default:
+		return -EPERM;
+	}
+
+	/* Fetch RETA from the PF. We do it in 3 steps due to mailbox size
+	 * limitation - we can bring up to 15 dwords every time while RETA
+	 * consists of 32 dwords. Therefore we'll bring 12, 12 and 8 dwords in
+	 * each step correspondingly.
+	 */
+
+	/* RETA[0..11] */
+	err = _ixgbevf_get_reta(hw, msgbuf, reta, IXGBE_VF_GET_RETA_0, 0, 12);
+	if (err)
+		return err;
+
+	/* RETA[12..23] */
+	err = _ixgbevf_get_reta(hw, msgbuf, reta, IXGBE_VF_GET_RETA_1, 12, 12);
+	if (err)
+		return err;
+
+	/* RETA[24..31] */
+	err = _ixgbevf_get_reta(hw, msgbuf, reta, IXGBE_VF_GET_RETA_2, 24, 8);
+
+	return err;
+}
+
 /**
  *  ixgbevf_set_rar_vf - set device MAC address
  *  @hw: pointer to hardware structure
@@ -545,6 +621,7 @@ int ixgbevf_get_queues(struct ixgbe_hw *hw, unsigned int *num_tcs,
 	/* do nothing if API doesn't support ixgbevf_get_queues */
 	switch (hw->api_version) {
 	case ixgbe_mbox_api_11:
+	case ixgbe_mbox_api_12:
 		break;
 	default:
 		return 0;
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.h b/drivers/net/ethernet/intel/ixgbevf/vf.h
index 5b17242..73c1b33 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.h
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.h
@@ -208,5 +208,6 @@ void ixgbevf_rlpml_set_vf(struct ixgbe_hw *hw, u16 max_size);
 int ixgbevf_negotiate_api_version(struct ixgbe_hw *hw, int api);
 int ixgbevf_get_queues(struct ixgbe_hw *hw, unsigned int *num_tcs,
 		       unsigned int *default_tc);
+int ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *reta);
 #endif /* __IXGBE_VF_H__ */
 
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
  2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
  2014-12-30 16:30 ` [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API Vlad Zolotarov
  2014-12-30 16:30 ` [RFC PATCH net-next 2/5] ixgbevf: Add a RETA query code Vlad Zolotarov
@ 2014-12-30 16:30 ` Vlad Zolotarov
  2014-12-30 19:23   ` Jeff Kirsher
  2014-12-30 16:30 ` [RFC PATCH net-next 4/5] ixgbevf: Add RSS Key query code Vlad Zolotarov
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 16:30 UTC (permalink / raw)
  To: netdev; +Cc: gleb, avi, Vlad Zolotarov

82599 VFs and PF share the same RSS Key. Therefore we will return
the same RSS key for all VFs.

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  2 ++
 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 25 +++++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
index c1123d9..52e775b 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
@@ -97,6 +97,8 @@ enum ixgbe_pfvf_api_rev {
 #define IXGBE_VF_GET_RETA_1	0x0b /* get RETA[12..23] */
 #define IXGBE_VF_GET_RETA_2	0x0c /* get RETA[24..31] */
 
+#define IXGBE_VF_GET_RSS_KEY	0x0d /* get RSS key */
+
 /* GET_QUEUES return data indices within the mailbox */
 #define IXGBE_VF_TX_QUEUES	1	/* number of Tx queues supported */
 #define IXGBE_VF_RX_QUEUES	2	/* number of Rx queues supported */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
index 84db1a5..fc8233e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
@@ -970,6 +970,28 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
 	return 0;
 }
 
+static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
+				u32 *msgbuf, u32 vf)
+{
+	struct ixgbe_hw *hw = &adapter->hw;
+	int i;
+	u32 *rss_key = &msgbuf[1];
+
+	/* verify the PF is supporting the correct API */
+	switch (adapter->vfinfo[vf].vf_api) {
+	case ixgbe_mbox_api_12:
+		break;
+	default:
+		return -EPERM;
+	}
+
+	/* Read the RSS KEY */
+	for (i = 0; i < 10; i++)
+		rss_key[i] = IXGBE_READ_REG(hw, IXGBE_RSSRK(i));
+
+	return 0;
+}
+
 static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
 {
 	u32 mbx_size = IXGBE_VFMAILBOX_SIZE;
@@ -1035,6 +1057,9 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
 	case IXGBE_VF_GET_RETA_2:
 		retval = ixgbe_get_vf_reta(adapter, msgbuf, vf, 24, 8);
 		break;
+	case IXGBE_VF_GET_RSS_KEY:
+		retval = ixgbe_get_vf_rss_key(adapter, msgbuf, vf);
+		break;
 	default:
 		e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
 		retval = IXGBE_ERR_MBX;
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [RFC PATCH net-next 4/5] ixgbevf: Add RSS Key query code
  2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
                   ` (2 preceding siblings ...)
  2014-12-30 16:30 ` [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set Vlad Zolotarov
@ 2014-12-30 16:30 ` Vlad Zolotarov
  2014-12-30 19:26   ` Jeff Kirsher
  2014-12-30 16:30 ` [RFC PATCH net-next 5/5] ixgbevf: Add the appropriate ethtool ops to query RSS indirection table and key Vlad Zolotarov
  2014-12-30 18:16 ` [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs " Jeff Kirsher
  5 siblings, 1 reply; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 16:30 UTC (permalink / raw)
  To: netdev; +Cc: gleb, avi, Vlad Zolotarov

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
---
 drivers/net/ethernet/intel/ixgbevf/mbx.h |  2 ++
 drivers/net/ethernet/intel/ixgbevf/vf.c  | 48 ++++++++++++++++++++++++++++++++
 drivers/net/ethernet/intel/ixgbevf/vf.h  |  1 +
 3 files changed, 51 insertions(+)

diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.h b/drivers/net/ethernet/intel/ixgbevf/mbx.h
index 3e148a8..9674ac8 100644
--- a/drivers/net/ethernet/intel/ixgbevf/mbx.h
+++ b/drivers/net/ethernet/intel/ixgbevf/mbx.h
@@ -110,6 +110,8 @@ enum ixgbe_pfvf_api_rev {
 #define IXGBE_VF_GET_RETA_1	0x0b /* get RETA[12..23] */
 #define IXGBE_VF_GET_RETA_2	0x0c /* get RETA[24..31] */
 
+#define IXGBE_VF_GET_RSS_KEY	0x0d /* get RSS hash key */
+
 /* GET_QUEUES return data indices within the mailbox */
 #define IXGBE_VF_TX_QUEUES	1	/* number of Tx queues supported */
 #define IXGBE_VF_RX_QUEUES	2	/* number of Rx queues supported */
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c
index 3ebc882..7987ab0 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.c
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
@@ -290,6 +290,54 @@ static inline int _ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *msgbuf,
 }
 
 /**
+ * ixgbevf_get_rss_key - get the RSS Random Key
+ * @hw: pointer to the HW structure
+ * @reta: buffer to fill with RETA contents.
+ *
+ * The "rss_key" buffer should be big enough to contain 10 registers.
+ *
+ * Returns: 0 on success.
+ *          if API doesn't support this operation - (-EPERM).
+ */
+int ixgbevf_get_rss_key(struct ixgbe_hw *hw, u8 *rss_key)
+{
+	int err;
+	u32 msgbuf[IXGBE_VFMAILBOX_SIZE];
+
+	/* Return and error if API doesn't support RSS Random Key retrieval */
+	switch (hw->api_version) {
+	case ixgbe_mbox_api_12:
+		break;
+	default:
+		return -EPERM;
+	}
+
+	msgbuf[0] = IXGBE_VF_GET_RSS_KEY;
+	err = hw->mbx.ops.write_posted(hw, msgbuf, 1);
+
+	if (err)
+		return err;
+
+	err = hw->mbx.ops.read_posted(hw, msgbuf, 11);
+
+	if (err)
+		return err;
+
+	msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
+
+	/* If we didn't get an ACK there must have been
+	 * some sort of mailbox error so we should treat it
+	 * as such.
+	 */
+	if (msgbuf[0] != (IXGBE_VF_GET_RSS_KEY | IXGBE_VT_MSGTYPE_ACK))
+		return IXGBE_ERR_MBX;
+
+	memcpy(rss_key, msgbuf + 1, 40);
+
+	return 0;
+}
+
+/**
  * ixgbevf_get_reta - get the RSS redirection table (RETA) contents.
  * @hw: pointer to the HW structure
  * @reta: buffer to fill with RETA contents.
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.h b/drivers/net/ethernet/intel/ixgbevf/vf.h
index 73c1b33..54f53f2b8 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.h
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.h
@@ -209,5 +209,6 @@ int ixgbevf_negotiate_api_version(struct ixgbe_hw *hw, int api);
 int ixgbevf_get_queues(struct ixgbe_hw *hw, unsigned int *num_tcs,
 		       unsigned int *default_tc);
 int ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *reta);
+int ixgbevf_get_rss_key(struct ixgbe_hw *hw, u8 *rss_key);
 #endif /* __IXGBE_VF_H__ */
 
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [RFC PATCH net-next 5/5] ixgbevf: Add the appropriate ethtool ops to query RSS indirection table and key
  2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
                   ` (3 preceding siblings ...)
  2014-12-30 16:30 ` [RFC PATCH net-next 4/5] ixgbevf: Add RSS Key query code Vlad Zolotarov
@ 2014-12-30 16:30 ` Vlad Zolotarov
  2014-12-30 18:16 ` [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs " Jeff Kirsher
  5 siblings, 0 replies; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 16:30 UTC (permalink / raw)
  To: netdev; +Cc: gleb, avi, Vlad Zolotarov

Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
---
 drivers/net/ethernet/intel/ixgbevf/ethtool.c | 37 ++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
index cc0e5b7..255bbc8 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
@@ -792,6 +792,40 @@ static int ixgbevf_set_coalesce(struct net_device *netdev,
 	return 0;
 }
 
+static u32 ixgbevf_get_rxfh_indir_size(struct net_device *netdev)
+{
+	return 128;
+}
+
+static u32 ixgbevf_get_rxfh_key_size(struct net_device *netdev)
+{
+	return 40;
+}
+
+static int ixgbevf_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
+			    u8 *hfunc)
+{
+	struct ixgbevf_adapter *adapter = netdev_priv(netdev);
+	int err;
+
+	if (hfunc)
+		*hfunc = ETH_RSS_HASH_TOP;
+
+	if (indir) {
+		err = ixgbevf_get_reta(&adapter->hw, indir);
+		if (err)
+			return err;
+	}
+
+	if (key) {
+		err = ixgbevf_get_rss_key(&adapter->hw, key);
+		if (err)
+			return err;
+	}
+
+	return 0;
+}
+
 static const struct ethtool_ops ixgbevf_ethtool_ops = {
 	.get_settings           = ixgbevf_get_settings,
 	.get_drvinfo            = ixgbevf_get_drvinfo,
@@ -809,6 +843,9 @@ static const struct ethtool_ops ixgbevf_ethtool_ops = {
 	.get_ethtool_stats      = ixgbevf_get_ethtool_stats,
 	.get_coalesce           = ixgbevf_get_coalesce,
 	.set_coalesce           = ixgbevf_set_coalesce,
+	.get_rxfh_indir_size    = ixgbevf_get_rxfh_indir_size,
+	.get_rxfh_key_size      = ixgbevf_get_rxfh_key_size,
+	.get_rxfh		= ixgbevf_get_rxfh,
 };
 
 void ixgbevf_set_ethtool_ops(struct net_device *netdev)
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
  2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
                   ` (4 preceding siblings ...)
  2014-12-30 16:30 ` [RFC PATCH net-next 5/5] ixgbevf: Add the appropriate ethtool ops to query RSS indirection table and key Vlad Zolotarov
@ 2014-12-30 18:16 ` Jeff Kirsher
       [not found]   ` <CAOYyTHb+5Wc-e3vBVE+MCh6YNfmompi9Mnsr0nDnHAn7Tvqyew@mail.gmail.com>
  5 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 18:16 UTC (permalink / raw)
  To: Vlad Zolotarov; +Cc: netdev, gleb, avi

On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
<vladz@cloudius-systems.com> wrote:
> Add the ethtool ops to VF driver to allow querying the RSS indirection table
> and RSS Random Key.
>
>  - PF driver: Add new VF-PF channel commands.
>  - VF driver: Utilize these new commands and add the corresponding
>               ethtool callbacks.
>
> Vlad Zolotarov (5):
>   ixgbe: Add a RETA query command to VF-PF channel API
>   ixgbevf: Add a RETA query code
>   ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
>   ixgbevf: Add RSS Key query code
>   ixgbevf: Add the appropriate ethtool ops to query RSS indirection
>     table and key
>
>  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
>  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60 +++++++++++
>  drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37 +++++++
>  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
>  drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
>  drivers/net/ethernet/intel/ixgbevf/vf.c           | 125 ++++++++++++++++++++++
>  drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
>  7 files changed, 243 insertions(+), 1 deletion(-)

Remember to CC on patches against drivers in drivers/net/ethernet/intel/ please.


-- 
Cheers,
Jeff

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
       [not found]   ` <CAOYyTHb+5Wc-e3vBVE+MCh6YNfmompi9Mnsr0nDnHAn7Tvqyew@mail.gmail.com>
@ 2014-12-30 18:52     ` Jeff Kirsher
       [not found]       ` <CAOYyTHathHiGThyHj+yRi9O6jWEAO3wkAK-6egMc2OwK9dQoMQ@mail.gmail.com>
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 18:52 UTC (permalink / raw)
  To: Vladislav Zolotarov; +Cc: Gleb Natapov, netdev, avi

[-- Attachment #1: Type: text/plain, Size: 1630 bytes --]

On Tue, 2014-12-30 at 20:50 +0200, Vladislav Zolotarov wrote:
> On Dec 30, 2014 8:16 PM, "Jeff Kirsher" <jeffrey.t.kirsher@intel.com>
> wrote:
> >
> > On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
> > <vladz@cloudius-systems.com> wrote:
> > > Add the ethtool ops to VF driver to allow querying the RSS
> indirection table
> > > and RSS Random Key.
> > >
> > >  - PF driver: Add new VF-PF channel commands.
> > >  - VF driver: Utilize these new commands and add the corresponding
> > >               ethtool callbacks.
> > >
> > > Vlad Zolotarov (5):
> > >   ixgbe: Add a RETA query command to VF-PF channel API
> > >   ixgbevf: Add a RETA query code
> > >   ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
> > >   ixgbevf: Add RSS Key query code
> > >   ixgbevf: Add the appropriate ethtool ops to query RSS
> indirection
> > >     table and key
> > >
> > >  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
> > >  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60
> +++++++++++
> > >  drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37 +++++++
> > >  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
> > >  drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
> > >  drivers/net/ethernet/intel/ixgbevf/vf.c           | 125
> ++++++++++++++++++++++
> > >  drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
> > >  7 files changed, 243 insertions(+), 1 deletion(-)
> >
> > Remember to CC on patches against drivers in
> drivers/net/ethernet/intel/ please.
> 
> To CC who? ;)
> 

Sorry, I fat fingered that response.  Please CC me.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API
  2014-12-30 16:30 ` [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API Vlad Zolotarov
@ 2014-12-30 19:21   ` Jeff Kirsher
  2014-12-30 19:28     ` Vlad Zolotarov
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 19:21 UTC (permalink / raw)
  To: Vlad Zolotarov; +Cc: netdev, gleb, avi

On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
<vladz@cloudius-systems.com> wrote:
> 82599 VFs and PF share the same RSS redirection table (RETA). Therefore we
> just return it for all VFs.
>
> RETA table is an array of 32 registers and the maximum number of registers
> that may be delivered in a single VF-PF channel command is 15. Therefore
> we will deliver the whole table in 3 steps: 12, 12 and 8 registers in each
> step correspondingly. Thus this patch does the following:
>
>   - Adds a new API version (to specify a new commands set).
>   - Adds the IXGBE_VF_GET_RETA_[0,1,2] commands to the VF-PF commands set.
>
> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  6 +++++
>  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 35 ++++++++++++++++++++++++++
>  2 files changed, 41 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> index a5cb755..c1123d9 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> @@ -73,6 +73,7 @@ enum ixgbe_pfvf_api_rev {
>         ixgbe_mbox_api_10,      /* API version 1.0, linux/freebsd VF driver */
>         ixgbe_mbox_api_20,      /* API version 2.0, solaris Phase1 VF driver */
>         ixgbe_mbox_api_11,      /* API version 1.1, linux/freebsd VF driver */
> +       ixgbe_mbox_api_12,      /* API version 1.2, linux/freebsd VF driver */
>         /* This value should always be last */
>         ixgbe_mbox_api_unknown, /* indicates that API version is not known */
>  };
> @@ -91,6 +92,11 @@ enum ixgbe_pfvf_api_rev {
>  /* mailbox API, version 1.1 VF requests */
>  #define IXGBE_VF_GET_QUEUES    0x09 /* get queue configuration */
>
> +/* mailbox API, version 1.2 VF requests */
> +#define IXGBE_VF_GET_RETA_0    0x0a /* get RETA[0..11]  */
> +#define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
> +#define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
> +
>  /* GET_QUEUES return data indices within the mailbox */
>  #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
>  #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> index c76ba90..84db1a5 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> @@ -427,6 +427,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
>  #endif /* CONFIG_FCOE */
>                 switch (adapter->vfinfo[vf].vf_api) {
>                 case ixgbe_mbox_api_11:
> +               case ixgbe_mbox_api_12:
>                         /*
>                          * Version 1.1 supports jumbo frames on VFs if PF has
>                          * jumbo frames enabled which means legacy VFs are
> @@ -894,6 +895,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
>         switch (api) {
>         case ixgbe_mbox_api_10:
>         case ixgbe_mbox_api_11:
> +       case ixgbe_mbox_api_12:
>                 adapter->vfinfo[vf].vf_api = api;
>                 return 0;
>         default:
> @@ -917,6 +919,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
>         switch (adapter->vfinfo[vf].vf_api) {
>         case ixgbe_mbox_api_20:
>         case ixgbe_mbox_api_11:
> +       case ixgbe_mbox_api_12:
>                 break;
>         default:
>                 return -1;
> @@ -944,6 +947,29 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
>         return 0;
>  }
>
> +static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
> +                            u32 *msgbuf, u32 vf, int reta_offset_dw,
> +                            size_t dwords)
> +{
> +       struct ixgbe_hw *hw = &adapter->hw;
> +       int i;
> +       u32 *reta = &msgbuf[1];
> +
> +       /* verify the PF is supporting the correct API */
> +       switch (adapter->vfinfo[vf].vf_api) {
> +       case ixgbe_mbox_api_12:
> +               break;
> +       default:
> +               return -EPERM;
> +       }

A switch statement is overkill for a single case.  It would be far
simpler to just have

if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
        return -EPERM;

Later on, if there are multiple API's or future API's that also
support this, then we could move to a case statement.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
  2014-12-30 16:30 ` [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set Vlad Zolotarov
@ 2014-12-30 19:23   ` Jeff Kirsher
  2014-12-30 19:29     ` Vlad Zolotarov
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 19:23 UTC (permalink / raw)
  To: Vlad Zolotarov; +Cc: netdev, Gleb Natapov, Avi Kivity

On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
<vladz@cloudius-systems.com> wrote:
> 82599 VFs and PF share the same RSS Key. Therefore we will return
> the same RSS key for all VFs.
>
> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  2 ++
>  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 25 +++++++++++++++++++++++++
>  2 files changed, 27 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> index c1123d9..52e775b 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> @@ -97,6 +97,8 @@ enum ixgbe_pfvf_api_rev {
>  #define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
>  #define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
>
> +#define IXGBE_VF_GET_RSS_KEY   0x0d /* get RSS key */
> +
>  /* GET_QUEUES return data indices within the mailbox */
>  #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
>  #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> index 84db1a5..fc8233e 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> @@ -970,6 +970,28 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
>         return 0;
>  }
>
> +static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
> +                               u32 *msgbuf, u32 vf)
> +{
> +       struct ixgbe_hw *hw = &adapter->hw;
> +       int i;
> +       u32 *rss_key = &msgbuf[1];
> +
> +       /* verify the PF is supporting the correct API */
> +       switch (adapter->vfinfo[vf].vf_api) {
> +       case ixgbe_mbox_api_12:
> +               break;
> +       default:
> +               return -EPERM;
> +       }

Same as in patch 01 of the series, a switch statement is overkill for
a single case.  It would be far simpler to just have

if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
        return -EPERM;

Later on, if there are multiple API's or future API's that also
support this, then we could move to a case statement.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 4/5] ixgbevf: Add RSS Key query code
  2014-12-30 16:30 ` [RFC PATCH net-next 4/5] ixgbevf: Add RSS Key query code Vlad Zolotarov
@ 2014-12-30 19:26   ` Jeff Kirsher
  0 siblings, 0 replies; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 19:26 UTC (permalink / raw)
  To: Vlad Zolotarov; +Cc: netdev, Gleb Natapov, Avi Kivity

On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
<vladz@cloudius-systems.com> wrote:
> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
> ---
>  drivers/net/ethernet/intel/ixgbevf/mbx.h |  2 ++
>  drivers/net/ethernet/intel/ixgbevf/vf.c  | 48 ++++++++++++++++++++++++++++++++
>  drivers/net/ethernet/intel/ixgbevf/vf.h  |  1 +
>  3 files changed, 51 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.h b/drivers/net/ethernet/intel/ixgbevf/mbx.h
> index 3e148a8..9674ac8 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/mbx.h
> +++ b/drivers/net/ethernet/intel/ixgbevf/mbx.h
> @@ -110,6 +110,8 @@ enum ixgbe_pfvf_api_rev {
>  #define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
>  #define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
>
> +#define IXGBE_VF_GET_RSS_KEY   0x0d /* get RSS hash key */
> +
>  /* GET_QUEUES return data indices within the mailbox */
>  #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
>  #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
> diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c
> index 3ebc882..7987ab0 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/vf.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
> @@ -290,6 +290,54 @@ static inline int _ixgbevf_get_reta(struct ixgbe_hw *hw, u32 *msgbuf,
>  }
>
>  /**
> + * ixgbevf_get_rss_key - get the RSS Random Key
> + * @hw: pointer to the HW structure
> + * @reta: buffer to fill with RETA contents.
> + *
> + * The "rss_key" buffer should be big enough to contain 10 registers.
> + *
> + * Returns: 0 on success.
> + *          if API doesn't support this operation - (-EPERM).
> + */
> +int ixgbevf_get_rss_key(struct ixgbe_hw *hw, u8 *rss_key)
> +{
> +       int err;
> +       u32 msgbuf[IXGBE_VFMAILBOX_SIZE];
> +
> +       /* Return and error if API doesn't support RSS Random Key retrieval */
> +       switch (hw->api_version) {
> +       case ixgbe_mbox_api_12:
> +               break;
> +       default:
> +               return -EPERM;
> +       }

An if statement here as well, instead of a switch statement.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
       [not found]       ` <CAOYyTHathHiGThyHj+yRi9O6jWEAO3wkAK-6egMc2OwK9dQoMQ@mail.gmail.com>
@ 2014-12-30 19:28         ` Jeff Kirsher
  2014-12-30 19:30           ` Vlad Zolotarov
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 19:28 UTC (permalink / raw)
  To: Vladislav Zolotarov, Greg Rose; +Cc: netdev, Gleb Natapov, avi

[-- Attachment #1: Type: text/plain, Size: 2296 bytes --]

On Tue, 2014-12-30 at 21:00 +0200, Vladislav Zolotarov wrote:
> 
> On Dec 30, 2014 8:52 PM, "Jeff Kirsher" <jeffrey.t.kirsher@intel.com>
> wrote:
> >
> > On Tue, 2014-12-30 at 20:50 +0200, Vladislav Zolotarov wrote:
> > > On Dec 30, 2014 8:16 PM, "Jeff Kirsher"
> <jeffrey.t.kirsher@intel.com>
> > > wrote:
> > > >
> > > > On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
> > > > <vladz@cloudius-systems.com> wrote:
> > > > > Add the ethtool ops to VF driver to allow querying the RSS
> > > indirection table
> > > > > and RSS Random Key.
> > > > >
> > > > >  - PF driver: Add new VF-PF channel commands.
> > > > >  - VF driver: Utilize these new commands and add the
> corresponding
> > > > >               ethtool callbacks.
> > > > >
> > > > > Vlad Zolotarov (5):
> > > > >   ixgbe: Add a RETA query command to VF-PF channel API
> > > > >   ixgbevf: Add a RETA query code
> > > > >   ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
> > > > >   ixgbevf: Add RSS Key query code
> > > > >   ixgbevf: Add the appropriate ethtool ops to query RSS
> > > indirection
> > > > >     table and key
> > > > >
> > > > >  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
> > > > >  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60
> > > +++++++++++
> > > > >  drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37
> +++++++
> > > > >  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
> > > > >  drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
> > > > >  drivers/net/ethernet/intel/ixgbevf/vf.c           | 125
> > > ++++++++++++++++++++++
> > > > >  drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
> > > > >  7 files changed, 243 insertions(+), 1 deletion(-)
> > > >
> > > > Remember to CC on patches against drivers in
> > > drivers/net/ethernet/intel/ please.
> > >
> > > To CC who? ;)
> > >
> >
> > Sorry, I fat fingered that response.  Please CC me.
> 
> Sure. NP. 
> Since we are talking already, could u comment on the RFC? Does it look
> ok to you? 
> 
> 

I have provided feedback on 3 of the patches, the others look ok to me.
I would like Greg Rose to look over your changes since he did most of
the ixgbevf work, and I want to make sure that he is fine with these
changes.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API
  2014-12-30 19:21   ` Jeff Kirsher
@ 2014-12-30 19:28     ` Vlad Zolotarov
  2014-12-30 19:30       ` Jeff Kirsher
  0 siblings, 1 reply; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 19:28 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: netdev, gleb, avi


On 12/30/14 21:21, Jeff Kirsher wrote:
> On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
> <vladz@cloudius-systems.com> wrote:
>> 82599 VFs and PF share the same RSS redirection table (RETA). Therefore we
>> just return it for all VFs.
>>
>> RETA table is an array of 32 registers and the maximum number of registers
>> that may be delivered in a single VF-PF channel command is 15. Therefore
>> we will deliver the whole table in 3 steps: 12, 12 and 8 registers in each
>> step correspondingly. Thus this patch does the following:
>>
>>    - Adds a new API version (to specify a new commands set).
>>    - Adds the IXGBE_VF_GET_RETA_[0,1,2] commands to the VF-PF commands set.
>>
>> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
>> ---
>>   drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  6 +++++
>>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 35 ++++++++++++++++++++++++++
>>   2 files changed, 41 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>> index a5cb755..c1123d9 100644
>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>> @@ -73,6 +73,7 @@ enum ixgbe_pfvf_api_rev {
>>          ixgbe_mbox_api_10,      /* API version 1.0, linux/freebsd VF driver */
>>          ixgbe_mbox_api_20,      /* API version 2.0, solaris Phase1 VF driver */
>>          ixgbe_mbox_api_11,      /* API version 1.1, linux/freebsd VF driver */
>> +       ixgbe_mbox_api_12,      /* API version 1.2, linux/freebsd VF driver */
>>          /* This value should always be last */
>>          ixgbe_mbox_api_unknown, /* indicates that API version is not known */
>>   };
>> @@ -91,6 +92,11 @@ enum ixgbe_pfvf_api_rev {
>>   /* mailbox API, version 1.1 VF requests */
>>   #define IXGBE_VF_GET_QUEUES    0x09 /* get queue configuration */
>>
>> +/* mailbox API, version 1.2 VF requests */
>> +#define IXGBE_VF_GET_RETA_0    0x0a /* get RETA[0..11]  */
>> +#define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
>> +#define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
>> +
>>   /* GET_QUEUES return data indices within the mailbox */
>>   #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
>>   #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>> index c76ba90..84db1a5 100644
>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>> @@ -427,6 +427,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
>>   #endif /* CONFIG_FCOE */
>>                  switch (adapter->vfinfo[vf].vf_api) {
>>                  case ixgbe_mbox_api_11:
>> +               case ixgbe_mbox_api_12:
>>                          /*
>>                           * Version 1.1 supports jumbo frames on VFs if PF has
>>                           * jumbo frames enabled which means legacy VFs are
>> @@ -894,6 +895,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
>>          switch (api) {
>>          case ixgbe_mbox_api_10:
>>          case ixgbe_mbox_api_11:
>> +       case ixgbe_mbox_api_12:
>>                  adapter->vfinfo[vf].vf_api = api;
>>                  return 0;
>>          default:
>> @@ -917,6 +919,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
>>          switch (adapter->vfinfo[vf].vf_api) {
>>          case ixgbe_mbox_api_20:
>>          case ixgbe_mbox_api_11:
>> +       case ixgbe_mbox_api_12:
>>                  break;
>>          default:
>>                  return -1;
>> @@ -944,6 +947,29 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
>>          return 0;
>>   }
>>
>> +static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
>> +                            u32 *msgbuf, u32 vf, int reta_offset_dw,
>> +                            size_t dwords)
>> +{
>> +       struct ixgbe_hw *hw = &adapter->hw;
>> +       int i;
>> +       u32 *reta = &msgbuf[1];
>> +
>> +       /* verify the PF is supporting the correct API */
>> +       switch (adapter->vfinfo[vf].vf_api) {
>> +       case ixgbe_mbox_api_12:
>> +               break;
>> +       default:
>> +               return -EPERM;
>> +       }
> A switch statement is overkill for a single case.  It would be far
> simpler to just have
>
> if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
>          return -EPERM;
>
> Later on, if there are multiple API's or future API's that also
> support this, then we could move to a case statement.

I thought about it to but decided to make it future-proof. NP. Will make 
it an "if" in a non-RFC series. Thanks.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
  2014-12-30 19:23   ` Jeff Kirsher
@ 2014-12-30 19:29     ` Vlad Zolotarov
  0 siblings, 0 replies; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 19:29 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: netdev, Gleb Natapov, Avi Kivity


On 12/30/14 21:23, Jeff Kirsher wrote:
> On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
> <vladz@cloudius-systems.com> wrote:
>> 82599 VFs and PF share the same RSS Key. Therefore we will return
>> the same RSS key for all VFs.
>>
>> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
>> ---
>>   drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  2 ++
>>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 25 +++++++++++++++++++++++++
>>   2 files changed, 27 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>> index c1123d9..52e775b 100644
>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>> @@ -97,6 +97,8 @@ enum ixgbe_pfvf_api_rev {
>>   #define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
>>   #define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
>>
>> +#define IXGBE_VF_GET_RSS_KEY   0x0d /* get RSS key */
>> +
>>   /* GET_QUEUES return data indices within the mailbox */
>>   #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
>>   #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>> index 84db1a5..fc8233e 100644
>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>> @@ -970,6 +970,28 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
>>          return 0;
>>   }
>>
>> +static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,
>> +                               u32 *msgbuf, u32 vf)
>> +{
>> +       struct ixgbe_hw *hw = &adapter->hw;
>> +       int i;
>> +       u32 *rss_key = &msgbuf[1];
>> +
>> +       /* verify the PF is supporting the correct API */
>> +       switch (adapter->vfinfo[vf].vf_api) {
>> +       case ixgbe_mbox_api_12:
>> +               break;
>> +       default:
>> +               return -EPERM;
>> +       }
> Same as in patch 01 of the series, a switch statement is overkill for
> a single case.  It would be far simpler to just have
>
> if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
>          return -EPERM;
>
> Later on, if there are multiple API's or future API's that also
> support this, then we could move to a case statement.

Got it. Will fix.
Thanks.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
  2014-12-30 19:28         ` Jeff Kirsher
@ 2014-12-30 19:30           ` Vlad Zolotarov
  2014-12-30 19:34             ` Jeff Kirsher
  0 siblings, 1 reply; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 19:30 UTC (permalink / raw)
  To: Jeff Kirsher, Greg Rose; +Cc: netdev, Gleb Natapov, avi


On 12/30/14 21:28, Jeff Kirsher wrote:
> On Tue, 2014-12-30 at 21:00 +0200, Vladislav Zolotarov wrote:
>> On Dec 30, 2014 8:52 PM, "Jeff Kirsher" <jeffrey.t.kirsher@intel.com>
>> wrote:
>>> On Tue, 2014-12-30 at 20:50 +0200, Vladislav Zolotarov wrote:
>>>> On Dec 30, 2014 8:16 PM, "Jeff Kirsher"
>> <jeffrey.t.kirsher@intel.com>
>>>> wrote:
>>>>> On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
>>>>> <vladz@cloudius-systems.com> wrote:
>>>>>> Add the ethtool ops to VF driver to allow querying the RSS
>>>> indirection table
>>>>>> and RSS Random Key.
>>>>>>
>>>>>>   - PF driver: Add new VF-PF channel commands.
>>>>>>   - VF driver: Utilize these new commands and add the
>> corresponding
>>>>>>                ethtool callbacks.
>>>>>>
>>>>>> Vlad Zolotarov (5):
>>>>>>    ixgbe: Add a RETA query command to VF-PF channel API
>>>>>>    ixgbevf: Add a RETA query code
>>>>>>    ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
>>>>>>    ixgbevf: Add RSS Key query code
>>>>>>    ixgbevf: Add the appropriate ethtool ops to query RSS
>>>> indirection
>>>>>>      table and key
>>>>>>
>>>>>>   drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
>>>>>>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60
>>>> +++++++++++
>>>>>>   drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37
>> +++++++
>>>>>>   drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
>>>>>>   drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
>>>>>>   drivers/net/ethernet/intel/ixgbevf/vf.c           | 125
>>>> ++++++++++++++++++++++
>>>>>>   drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
>>>>>>   7 files changed, 243 insertions(+), 1 deletion(-)
>>>>> Remember to CC on patches against drivers in
>>>> drivers/net/ethernet/intel/ please.
>>>>
>>>> To CC who? ;)
>>>>
>>> Sorry, I fat fingered that response.  Please CC me.
>> Sure. NP.
>> Since we are talking already, could u comment on the RFC? Does it look
>> ok to you?
>>
>>
> I have provided feedback on 3 of the patches, the others look ok to me.
> I would like Greg Rose to look over your changes since he did most of
> the ixgbevf work, and I want to make sure that he is fine with these
> changes.

I saw them. Thanks, Jeff. I'll wait for Greg's comments before cooking 
the final series then.

Again, thanks for a rapid response.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API
  2014-12-30 19:28     ` Vlad Zolotarov
@ 2014-12-30 19:30       ` Jeff Kirsher
  2014-12-30 19:35         ` Vlad Zolotarov
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 19:30 UTC (permalink / raw)
  To: Vlad Zolotarov; +Cc: netdev, gleb, avi

[-- Attachment #1: Type: text/plain, Size: 5285 bytes --]

On Tue, 2014-12-30 at 21:28 +0200, Vlad Zolotarov wrote:
> On 12/30/14 21:21, Jeff Kirsher wrote:
> > On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
> > <vladz@cloudius-systems.com> wrote:
> >> 82599 VFs and PF share the same RSS redirection table (RETA). Therefore we
> >> just return it for all VFs.
> >>
> >> RETA table is an array of 32 registers and the maximum number of registers
> >> that may be delivered in a single VF-PF channel command is 15. Therefore
> >> we will deliver the whole table in 3 steps: 12, 12 and 8 registers in each
> >> step correspondingly. Thus this patch does the following:
> >>
> >>    - Adds a new API version (to specify a new commands set).
> >>    - Adds the IXGBE_VF_GET_RETA_[0,1,2] commands to the VF-PF commands set.
> >>
> >> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
> >> ---
> >>   drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  6 +++++
> >>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 35 ++++++++++++++++++++++++++
> >>   2 files changed, 41 insertions(+)
> >>
> >> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> >> index a5cb755..c1123d9 100644
> >> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> >> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
> >> @@ -73,6 +73,7 @@ enum ixgbe_pfvf_api_rev {
> >>          ixgbe_mbox_api_10,      /* API version 1.0, linux/freebsd VF driver */
> >>          ixgbe_mbox_api_20,      /* API version 2.0, solaris Phase1 VF driver */
> >>          ixgbe_mbox_api_11,      /* API version 1.1, linux/freebsd VF driver */
> >> +       ixgbe_mbox_api_12,      /* API version 1.2, linux/freebsd VF driver */
> >>          /* This value should always be last */
> >>          ixgbe_mbox_api_unknown, /* indicates that API version is not known */
> >>   };
> >> @@ -91,6 +92,11 @@ enum ixgbe_pfvf_api_rev {
> >>   /* mailbox API, version 1.1 VF requests */
> >>   #define IXGBE_VF_GET_QUEUES    0x09 /* get queue configuration */
> >>
> >> +/* mailbox API, version 1.2 VF requests */
> >> +#define IXGBE_VF_GET_RETA_0    0x0a /* get RETA[0..11]  */
> >> +#define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
> >> +#define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
> >> +
> >>   /* GET_QUEUES return data indices within the mailbox */
> >>   #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
> >>   #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
> >> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> >> index c76ba90..84db1a5 100644
> >> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> >> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> >> @@ -427,6 +427,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
> >>   #endif /* CONFIG_FCOE */
> >>                  switch (adapter->vfinfo[vf].vf_api) {
> >>                  case ixgbe_mbox_api_11:
> >> +               case ixgbe_mbox_api_12:
> >>                          /*
> >>                           * Version 1.1 supports jumbo frames on VFs if PF has
> >>                           * jumbo frames enabled which means legacy VFs are
> >> @@ -894,6 +895,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
> >>          switch (api) {
> >>          case ixgbe_mbox_api_10:
> >>          case ixgbe_mbox_api_11:
> >> +       case ixgbe_mbox_api_12:
> >>                  adapter->vfinfo[vf].vf_api = api;
> >>                  return 0;
> >>          default:
> >> @@ -917,6 +919,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
> >>          switch (adapter->vfinfo[vf].vf_api) {
> >>          case ixgbe_mbox_api_20:
> >>          case ixgbe_mbox_api_11:
> >> +       case ixgbe_mbox_api_12:
> >>                  break;
> >>          default:
> >>                  return -1;
> >> @@ -944,6 +947,29 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
> >>          return 0;
> >>   }
> >>
> >> +static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
> >> +                            u32 *msgbuf, u32 vf, int reta_offset_dw,
> >> +                            size_t dwords)
> >> +{
> >> +       struct ixgbe_hw *hw = &adapter->hw;
> >> +       int i;
> >> +       u32 *reta = &msgbuf[1];
> >> +
> >> +       /* verify the PF is supporting the correct API */
> >> +       switch (adapter->vfinfo[vf].vf_api) {
> >> +       case ixgbe_mbox_api_12:
> >> +               break;
> >> +       default:
> >> +               return -EPERM;
> >> +       }
> > A switch statement is overkill for a single case.  It would be far
> > simpler to just have
> >
> > if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
> >          return -EPERM;
> >
> > Later on, if there are multiple API's or future API's that also
> > support this, then we could move to a case statement.
> 
> I thought about it to but decided to make it future-proof. NP. Will make 
> it an "if" in a non-RFC series. Thanks.
> 

Thanks fine, and if you CC me on the non-RFC series, I will pick them up
(and make sure that Greg Rose has a chance to review them).

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
  2014-12-30 19:30           ` Vlad Zolotarov
@ 2014-12-30 19:34             ` Jeff Kirsher
  2014-12-30 19:36               ` Vlad Zolotarov
  0 siblings, 1 reply; 19+ messages in thread
From: Jeff Kirsher @ 2014-12-30 19:34 UTC (permalink / raw)
  To: Vlad Zolotarov; +Cc: Greg Rose, netdev, Gleb Natapov, avi

[-- Attachment #1: Type: text/plain, Size: 2754 bytes --]

On Tue, 2014-12-30 at 21:30 +0200, Vlad Zolotarov wrote:
> On 12/30/14 21:28, Jeff Kirsher wrote:
> > On Tue, 2014-12-30 at 21:00 +0200, Vladislav Zolotarov wrote:
> >> On Dec 30, 2014 8:52 PM, "Jeff Kirsher" <jeffrey.t.kirsher@intel.com>
> >> wrote:
> >>> On Tue, 2014-12-30 at 20:50 +0200, Vladislav Zolotarov wrote:
> >>>> On Dec 30, 2014 8:16 PM, "Jeff Kirsher"
> >> <jeffrey.t.kirsher@intel.com>
> >>>> wrote:
> >>>>> On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
> >>>>> <vladz@cloudius-systems.com> wrote:
> >>>>>> Add the ethtool ops to VF driver to allow querying the RSS
> >>>> indirection table
> >>>>>> and RSS Random Key.
> >>>>>>
> >>>>>>   - PF driver: Add new VF-PF channel commands.
> >>>>>>   - VF driver: Utilize these new commands and add the
> >> corresponding
> >>>>>>                ethtool callbacks.
> >>>>>>
> >>>>>> Vlad Zolotarov (5):
> >>>>>>    ixgbe: Add a RETA query command to VF-PF channel API
> >>>>>>    ixgbevf: Add a RETA query code
> >>>>>>    ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
> >>>>>>    ixgbevf: Add RSS Key query code
> >>>>>>    ixgbevf: Add the appropriate ethtool ops to query RSS
> >>>> indirection
> >>>>>>      table and key
> >>>>>>
> >>>>>>   drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
> >>>>>>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60
> >>>> +++++++++++
> >>>>>>   drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37
> >> +++++++
> >>>>>>   drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
> >>>>>>   drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
> >>>>>>   drivers/net/ethernet/intel/ixgbevf/vf.c           | 125
> >>>> ++++++++++++++++++++++
> >>>>>>   drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
> >>>>>>   7 files changed, 243 insertions(+), 1 deletion(-)
> >>>>> Remember to CC on patches against drivers in
> >>>> drivers/net/ethernet/intel/ please.
> >>>>
> >>>> To CC who? ;)
> >>>>
> >>> Sorry, I fat fingered that response.  Please CC me.
> >> Sure. NP.
> >> Since we are talking already, could u comment on the RFC? Does it look
> >> ok to you?
> >>
> >>
> > I have provided feedback on 3 of the patches, the others look ok to me.
> > I would like Greg Rose to look over your changes since he did most of
> > the ixgbevf work, and I want to make sure that he is fine with these
> > changes.
> 
> I saw them. Thanks, Jeff. I'll wait for Greg's comments before cooking 
> the final series then.
> 
> Again, thanks for a rapid response.
> 

Go ahead and send out a non-RFC series.  Greg is on vacation till the
5th anyway, so I will pick up your series and have my validation team
run it through their tests in the mean time.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API
  2014-12-30 19:30       ` Jeff Kirsher
@ 2014-12-30 19:35         ` Vlad Zolotarov
  0 siblings, 0 replies; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 19:35 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: netdev, gleb, avi


On 12/30/14 21:30, Jeff Kirsher wrote:
> On Tue, 2014-12-30 at 21:28 +0200, Vlad Zolotarov wrote:
>> On 12/30/14 21:21, Jeff Kirsher wrote:
>>> On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
>>> <vladz@cloudius-systems.com> wrote:
>>>> 82599 VFs and PF share the same RSS redirection table (RETA). Therefore we
>>>> just return it for all VFs.
>>>>
>>>> RETA table is an array of 32 registers and the maximum number of registers
>>>> that may be delivered in a single VF-PF channel command is 15. Therefore
>>>> we will deliver the whole table in 3 steps: 12, 12 and 8 registers in each
>>>> step correspondingly. Thus this patch does the following:
>>>>
>>>>     - Adds a new API version (to specify a new commands set).
>>>>     - Adds the IXGBE_VF_GET_RETA_[0,1,2] commands to the VF-PF commands set.
>>>>
>>>> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
>>>> ---
>>>>    drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h   |  6 +++++
>>>>    drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 35 ++++++++++++++++++++++++++
>>>>    2 files changed, 41 insertions(+)
>>>>
>>>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>>>> index a5cb755..c1123d9 100644
>>>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>>>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h
>>>> @@ -73,6 +73,7 @@ enum ixgbe_pfvf_api_rev {
>>>>           ixgbe_mbox_api_10,      /* API version 1.0, linux/freebsd VF driver */
>>>>           ixgbe_mbox_api_20,      /* API version 2.0, solaris Phase1 VF driver */
>>>>           ixgbe_mbox_api_11,      /* API version 1.1, linux/freebsd VF driver */
>>>> +       ixgbe_mbox_api_12,      /* API version 1.2, linux/freebsd VF driver */
>>>>           /* This value should always be last */
>>>>           ixgbe_mbox_api_unknown, /* indicates that API version is not known */
>>>>    };
>>>> @@ -91,6 +92,11 @@ enum ixgbe_pfvf_api_rev {
>>>>    /* mailbox API, version 1.1 VF requests */
>>>>    #define IXGBE_VF_GET_QUEUES    0x09 /* get queue configuration */
>>>>
>>>> +/* mailbox API, version 1.2 VF requests */
>>>> +#define IXGBE_VF_GET_RETA_0    0x0a /* get RETA[0..11]  */
>>>> +#define IXGBE_VF_GET_RETA_1    0x0b /* get RETA[12..23] */
>>>> +#define IXGBE_VF_GET_RETA_2    0x0c /* get RETA[24..31] */
>>>> +
>>>>    /* GET_QUEUES return data indices within the mailbox */
>>>>    #define IXGBE_VF_TX_QUEUES     1       /* number of Tx queues supported */
>>>>    #define IXGBE_VF_RX_QUEUES     2       /* number of Rx queues supported */
>>>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>>>> index c76ba90..84db1a5 100644
>>>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>>>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
>>>> @@ -427,6 +427,7 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
>>>>    #endif /* CONFIG_FCOE */
>>>>                   switch (adapter->vfinfo[vf].vf_api) {
>>>>                   case ixgbe_mbox_api_11:
>>>> +               case ixgbe_mbox_api_12:
>>>>                           /*
>>>>                            * Version 1.1 supports jumbo frames on VFs if PF has
>>>>                            * jumbo frames enabled which means legacy VFs are
>>>> @@ -894,6 +895,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
>>>>           switch (api) {
>>>>           case ixgbe_mbox_api_10:
>>>>           case ixgbe_mbox_api_11:
>>>> +       case ixgbe_mbox_api_12:
>>>>                   adapter->vfinfo[vf].vf_api = api;
>>>>                   return 0;
>>>>           default:
>>>> @@ -917,6 +919,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
>>>>           switch (adapter->vfinfo[vf].vf_api) {
>>>>           case ixgbe_mbox_api_20:
>>>>           case ixgbe_mbox_api_11:
>>>> +       case ixgbe_mbox_api_12:
>>>>                   break;
>>>>           default:
>>>>                   return -1;
>>>> @@ -944,6 +947,29 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
>>>>           return 0;
>>>>    }
>>>>
>>>> +static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter,
>>>> +                            u32 *msgbuf, u32 vf, int reta_offset_dw,
>>>> +                            size_t dwords)
>>>> +{
>>>> +       struct ixgbe_hw *hw = &adapter->hw;
>>>> +       int i;
>>>> +       u32 *reta = &msgbuf[1];
>>>> +
>>>> +       /* verify the PF is supporting the correct API */
>>>> +       switch (adapter->vfinfo[vf].vf_api) {
>>>> +       case ixgbe_mbox_api_12:
>>>> +               break;
>>>> +       default:
>>>> +               return -EPERM;
>>>> +       }
>>> A switch statement is overkill for a single case.  It would be far
>>> simpler to just have
>>>
>>> if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12)
>>>           return -EPERM;
>>>
>>> Later on, if there are multiple API's or future API's that also
>>> support this, then we could move to a case statement.
>> I thought about it to but decided to make it future-proof. NP. Will make
>> it an "if" in a non-RFC series. Thanks.
>>
> Thanks fine, and if you CC me on the non-RFC series,

Sure thing I will! ;) After such a lightning fast review I'll CC u for 
all my future net patches! ;)

>   I will pick them up
> (and make sure that Greg Rose has a chance to review them).
Cool. Then I'll cook the series first think tomorrow morning.
Thanks a lot, Jeff

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key
  2014-12-30 19:34             ` Jeff Kirsher
@ 2014-12-30 19:36               ` Vlad Zolotarov
  0 siblings, 0 replies; 19+ messages in thread
From: Vlad Zolotarov @ 2014-12-30 19:36 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: Greg Rose, netdev, Gleb Natapov, avi


On 12/30/14 21:34, Jeff Kirsher wrote:
> On Tue, 2014-12-30 at 21:30 +0200, Vlad Zolotarov wrote:
>> On 12/30/14 21:28, Jeff Kirsher wrote:
>>> On Tue, 2014-12-30 at 21:00 +0200, Vladislav Zolotarov wrote:
>>>> On Dec 30, 2014 8:52 PM, "Jeff Kirsher" <jeffrey.t.kirsher@intel.com>
>>>> wrote:
>>>>> On Tue, 2014-12-30 at 20:50 +0200, Vladislav Zolotarov wrote:
>>>>>> On Dec 30, 2014 8:16 PM, "Jeff Kirsher"
>>>> <jeffrey.t.kirsher@intel.com>
>>>>>> wrote:
>>>>>>> On Tue, Dec 30, 2014 at 8:30 AM, Vlad Zolotarov
>>>>>>> <vladz@cloudius-systems.com> wrote:
>>>>>>>> Add the ethtool ops to VF driver to allow querying the RSS
>>>>>> indirection table
>>>>>>>> and RSS Random Key.
>>>>>>>>
>>>>>>>>    - PF driver: Add new VF-PF channel commands.
>>>>>>>>    - VF driver: Utilize these new commands and add the
>>>> corresponding
>>>>>>>>                 ethtool callbacks.
>>>>>>>>
>>>>>>>> Vlad Zolotarov (5):
>>>>>>>>     ixgbe: Add a RETA query command to VF-PF channel API
>>>>>>>>     ixgbevf: Add a RETA query code
>>>>>>>>     ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set
>>>>>>>>     ixgbevf: Add RSS Key query code
>>>>>>>>     ixgbevf: Add the appropriate ethtool ops to query RSS
>>>>>> indirection
>>>>>>>>       table and key
>>>>>>>>
>>>>>>>>    drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h      |   8 ++
>>>>>>>>    drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |  60
>>>>>> +++++++++++
>>>>>>>>    drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  37
>>>> +++++++
>>>>>>>>    drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   4 +-
>>>>>>>>    drivers/net/ethernet/intel/ixgbevf/mbx.h          |   8 ++
>>>>>>>>    drivers/net/ethernet/intel/ixgbevf/vf.c           | 125
>>>>>> ++++++++++++++++++++++
>>>>>>>>    drivers/net/ethernet/intel/ixgbevf/vf.h           |   2 +
>>>>>>>>    7 files changed, 243 insertions(+), 1 deletion(-)
>>>>>>> Remember to CC on patches against drivers in
>>>>>> drivers/net/ethernet/intel/ please.
>>>>>>
>>>>>> To CC who? ;)
>>>>>>
>>>>> Sorry, I fat fingered that response.  Please CC me.
>>>> Sure. NP.
>>>> Since we are talking already, could u comment on the RFC? Does it look
>>>> ok to you?
>>>>
>>>>
>>> I have provided feedback on 3 of the patches, the others look ok to me.
>>> I would like Greg Rose to look over your changes since he did most of
>>> the ixgbevf work, and I want to make sure that he is fine with these
>>> changes.
>> I saw them. Thanks, Jeff. I'll wait for Greg's comments before cooking
>> the final series then.
>>
>> Again, thanks for a rapid response.
>>
> Go ahead and send out a non-RFC series.  Greg is on vacation till the
> 5th anyway, so I will pick up your series and have my validation team
> run it through their tests in the mean time.

Great! It's a real pleasure working with you!

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2014-12-30 19:36 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-30 16:30 [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs RSS indirection table and key Vlad Zolotarov
2014-12-30 16:30 ` [RFC PATCH net-next 1/5] ixgbe: Add a RETA query command to VF-PF channel API Vlad Zolotarov
2014-12-30 19:21   ` Jeff Kirsher
2014-12-30 19:28     ` Vlad Zolotarov
2014-12-30 19:30       ` Jeff Kirsher
2014-12-30 19:35         ` Vlad Zolotarov
2014-12-30 16:30 ` [RFC PATCH net-next 2/5] ixgbevf: Add a RETA query code Vlad Zolotarov
2014-12-30 16:30 ` [RFC PATCH net-next 3/5] ixgbe: Add GET_RSS_KEY command to VF-PF channel commands set Vlad Zolotarov
2014-12-30 19:23   ` Jeff Kirsher
2014-12-30 19:29     ` Vlad Zolotarov
2014-12-30 16:30 ` [RFC PATCH net-next 4/5] ixgbevf: Add RSS Key query code Vlad Zolotarov
2014-12-30 19:26   ` Jeff Kirsher
2014-12-30 16:30 ` [RFC PATCH net-next 5/5] ixgbevf: Add the appropriate ethtool ops to query RSS indirection table and key Vlad Zolotarov
2014-12-30 18:16 ` [RFC PATCH net-next 0/5]: ixgbevf: Allow querying VFs " Jeff Kirsher
     [not found]   ` <CAOYyTHb+5Wc-e3vBVE+MCh6YNfmompi9Mnsr0nDnHAn7Tvqyew@mail.gmail.com>
2014-12-30 18:52     ` Jeff Kirsher
     [not found]       ` <CAOYyTHathHiGThyHj+yRi9O6jWEAO3wkAK-6egMc2OwK9dQoMQ@mail.gmail.com>
2014-12-30 19:28         ` Jeff Kirsher
2014-12-30 19:30           ` Vlad Zolotarov
2014-12-30 19:34             ` Jeff Kirsher
2014-12-30 19:36               ` Vlad Zolotarov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.