Module Name:    src
Committed By:   msaitoh
Date:           Wed Nov 22 15:15:09 UTC 2017

Modified Files:
        src/sys/dev/pci/ixgbe: if_bypass.c ixgbe.c ixgbe.h

Log Message:
Fix a bug that bypass adapter's sysctls aren't set. Tested with non-genuine
X550-T2 bypass adapter:
- Call ixgbe_sysctl_instance() in ixgbe_bypass_init() to get sysctl's top node
  correctly.
- ixgbe_init_device_features() refers adapter->hw.bus.func for bypass adapter.
  Call set_lan_id() to set adapter->hw.bus.func before calling
  ixgbe_init_device_features(). Without this, bypass sysctl's are added to
  both the first and second port.
- Initalize node.sysctl_data before calling sysctl_lookup() to read correct
  value.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/pci/ixgbe/if_bypass.c
cvs rdiff -u -r1.112 -r1.113 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.27 -r1.28 src/sys/dev/pci/ixgbe/ixgbe.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/ixgbe/if_bypass.c
diff -u src/sys/dev/pci/ixgbe/if_bypass.c:1.1 src/sys/dev/pci/ixgbe/if_bypass.c:1.2
--- src/sys/dev/pci/ixgbe/if_bypass.c:1.1	Wed Aug 30 08:49:18 2017
+++ src/sys/dev/pci/ixgbe/if_bypass.c	Wed Nov 22 15:15:09 2017
@@ -134,6 +134,7 @@ ixgbe_bp_version(SYSCTLFN_ARGS)
 		goto err;
 	ixgbe_bypass_mutex_clear(adapter);
 	featversion &= BYPASS_CTL2_DATA_M;
+	node.sysctl_data = &featversion;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	return (error);
 err:
@@ -171,6 +172,7 @@ ixgbe_bp_set_state(SYSCTLFN_ARGS)
 		return (error);
 	state = (state >> BYPASS_STATUS_OFF_SHIFT) & 0x3;
 
+	node.sysctl_data = &state;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -233,6 +235,7 @@ ixgbe_bp_timeout(SYSCTLFN_ARGS)
 		return (error);
 	timeout = (timeout >> BYPASS_WDTIMEOUT_SHIFT) & 0x3;
 
+	node.sysctl_data = &timeout;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -276,6 +279,7 @@ ixgbe_bp_main_on(SYSCTLFN_ARGS)
 	if (error)
 		return (error);
 
+	node.sysctl_data = &main_on;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -319,6 +323,7 @@ ixgbe_bp_main_off(SYSCTLFN_ARGS)
 		return (error);
 	main_off = (main_off >> BYPASS_MAIN_OFF_SHIFT) & 0x3;
 
+	node.sysctl_data = &main_off;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -362,6 +367,7 @@ ixgbe_bp_aux_on(SYSCTLFN_ARGS)
 		return (error);
 	aux_on = (aux_on >> BYPASS_AUX_ON_SHIFT) & 0x3;
 
+	node.sysctl_data = &aux_on;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -405,6 +411,7 @@ ixgbe_bp_aux_off(SYSCTLFN_ARGS)
 		return (error);
 	aux_off = (aux_off >> BYPASS_AUX_OFF_SHIFT) & 0x3;
 
+	node.sysctl_data = &aux_off;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -460,6 +467,7 @@ ixgbe_bp_wd_set(SYSCTLFN_ARGS)
 	if ((tmp & (0x1 << BYPASS_WDT_ENABLE_SHIFT)) == 0)
 		timeout = 0;
 
+	node.sysctl_data = &timeout;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -529,6 +537,7 @@ ixgbe_bp_wd_reset(SYSCTLFN_ARGS)
 	int             cmd, count = 0, error = 0;
 	int             reset_wd = 0;
 
+	node.sysctl_data = &reset_wd;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -579,6 +588,7 @@ ixgbe_bp_log(SYSCTLFN_ARGS)
 	struct ixgbe_bypass_eeprom eeprom[BYPASS_MAX_LOGS];
 	int                        i, error = 0;
 
+	node.sysctl_data = &status;
 	error = sysctl_lookup(SYSCTLFN_CALL(&node));
 	if ((error) || (newp == NULL))
 		return (error);
@@ -759,7 +769,7 @@ ixgbe_bypass_init(struct adapter *adapte
 
 	/* Now set up the SYSCTL infrastructure */
 	log = &adapter->sysctllog;
-	if ((rnode = adapter->sysctltop) == NULL) {
+	if ((rnode = ixgbe_sysctl_instance(adapter)) == NULL) {
 		aprint_error_dev(dev, "could not create sysctl root\n");
 		return;
 	}

Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.112 src/sys/dev/pci/ixgbe/ixgbe.c:1.113
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.112	Thu Nov 16 03:07:18 2017
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Wed Nov 22 15:15:09 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.112 2017/11/16 03:07:18 ozaki-r Exp $ */
+/* $NetBSD: ixgbe.c,v 1.113 2017/11/22 15:15:09 msaitoh Exp $ */
 
 /******************************************************************************
 
@@ -257,7 +257,6 @@ static void	ixgbe_handle_msf(void *);
 static void	ixgbe_handle_mod(void *);
 static void	ixgbe_handle_phy(void *);
 
-const struct sysctlnode *ixgbe_sysctl_instance(struct adapter *);
 static ixgbe_vendor_info_t *ixgbe_lookup(const struct pci_attach_args *);
 
 /************************************************************************
@@ -853,6 +852,7 @@ ixgbe_attach(device_t parent, device_t d
 	} else
 		adapter->num_segs = IXGBE_82598_SCATTER;
 
+	hw->mac.ops.set_lan_id(hw);
 	ixgbe_init_device_features(adapter);
 
 	if (ixgbe_configure_interrupts(adapter)) {

Index: src/sys/dev/pci/ixgbe/ixgbe.h
diff -u src/sys/dev/pci/ixgbe/ixgbe.h:1.27 src/sys/dev/pci/ixgbe/ixgbe.h:1.28
--- src/sys/dev/pci/ixgbe/ixgbe.h:1.27	Thu Nov  2 08:41:15 2017
+++ src/sys/dev/pci/ixgbe/ixgbe.h	Wed Nov 22 15:15:09 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.27 2017/11/02 08:41:15 msaitoh Exp $ */
+/* $NetBSD: ixgbe.h,v 1.28 2017/11/22 15:15:09 msaitoh Exp $ */
 
 /******************************************************************************
 
@@ -719,6 +719,8 @@ void ixgbe_free_receive_structures(struc
 void ixgbe_txeof(struct tx_ring *);
 bool ixgbe_rxeof(struct ix_queue *);
 
+const struct sysctlnode *ixgbe_sysctl_instance(struct adapter *);
+
 #include "ixgbe_bypass.h"
 #include "ixgbe_sriov.h"
 #include "ixgbe_fdir.h"

Reply via email to