svn commit: r285590 - head/sys/dev/ixgbe

Patrick Kelsey pkelsey at FreeBSD.org
Wed Jul 15 00:35:52 UTC 2015


Author: pkelsey
Date: Wed Jul 15 00:35:50 2015
New Revision: 285590
URL: https://svnweb.freebsd.org/changeset/base/285590

Log:
  Fix igxbe SRIOV VF (if_ixv) initialization bugs.  The MAC address for
  an if_ixv instance can now set at creation time, and the receive ring
  tail pointer is correctly initialized (previously, things still worked
  because the receive ring tail pointer was being fixed up as a side
  effect of other activity).
  
  Differential Revision: https://reviews.freebsd.org/D2922
  Reviewed by: erj, gnn
  Approved by: jmallett (mentor)
  Sponsored by: Norse Corp, Inc.

Modified:
  head/sys/dev/ixgbe/if_ix.c
  head/sys/dev/ixgbe/if_ixv.c
  head/sys/dev/ixgbe/ixgbe_vf.c

Modified: head/sys/dev/ixgbe/if_ix.c
==============================================================================
--- head/sys/dev/ixgbe/if_ix.c	Tue Jul 14 23:49:29 2015	(r285589)
+++ head/sys/dev/ixgbe/if_ix.c	Wed Jul 15 00:35:50 2015	(r285590)
@@ -5273,10 +5273,10 @@ ixgbe_vf_api_negotiate(struct adapter *a
     uint32_t *msg)
 {
 
-	switch (msg[0]) {
+	switch (msg[1]) {
 	case IXGBE_API_VER_1_0:
 	case IXGBE_API_VER_1_1:
-		vf->api_ver = msg[0];
+		vf->api_ver = msg[1];
 		ixgbe_send_vf_ack(adapter, vf, msg[0]);
 		break;
 	default:

Modified: head/sys/dev/ixgbe/if_ixv.c
==============================================================================
--- head/sys/dev/ixgbe/if_ixv.c	Tue Jul 14 23:49:29 2015	(r285589)
+++ head/sys/dev/ixgbe/if_ixv.c	Wed Jul 15 00:35:50 2015	(r285590)
@@ -1665,10 +1665,6 @@ ixv_initialize_receive_units(struct adap
 		reg |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF;
 		IXGBE_WRITE_REG(hw, IXGBE_VFSRRCTL(i), reg);
 
-		/* Set the Tail Pointer */
-		IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me),
-		    adapter->num_rx_desc - 1);
-
 		/* Set the processing limit */
 		rxr->process_limit = ixv_rx_process_limit;
 
@@ -1687,6 +1683,10 @@ ixv_initialize_receive_units(struct adap
 				msec_delay(1);
 		}
 		wmb();
+
+		/* Set the Tail Pointer */
+		IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me),
+		    adapter->num_rx_desc - 1);
 	}
 
 	rxcsum = IXGBE_READ_REG(hw, IXGBE_RXCSUM);

Modified: head/sys/dev/ixgbe/ixgbe_vf.c
==============================================================================
--- head/sys/dev/ixgbe/ixgbe_vf.c	Tue Jul 14 23:49:29 2015	(r285589)
+++ head/sys/dev/ixgbe/ixgbe_vf.c	Wed Jul 15 00:35:50 2015	(r285590)
@@ -225,6 +225,8 @@ s32 ixgbe_reset_hw_vf(struct ixgbe_hw *h
 	if (ret_val)
 		return ret_val;
 
+	msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
+
 	if (msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK) &&
 	    msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_NACK))
 		return IXGBE_ERR_INVALID_MAC_ADDR;


More information about the svn-src-all mailing list