Module Name:    src
Committed By:   msaitoh
Date:           Fri Mar  3 04:37:05 UTC 2017

Modified Files:
        src/sys/dev/pci/ixgbe: ixgbe.c ixv.c

Log Message:
 Set PCI_INTR_MPSAFE, SOFTINT_MPSAFE, CALLOUT_MPSAFE and IFEF_START_MPSAFE
if NET_MPSAFE is defined.


To generate a diff of this commit:
cvs rdiff -u -r1.79 -r1.80 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.54 -r1.55 src/sys/dev/pci/ixgbe/ixv.c

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/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.79 src/sys/dev/pci/ixgbe/ixgbe.c:1.80
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.79	Fri Feb 24 05:38:30 2017
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Fri Mar  3 04:37:05 2017
@@ -59,10 +59,13 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 /*$FreeBSD: head/sys/dev/ixgbe/if_ix.c 302384 2016-07-07 03:39:18Z sbruno $*/
-/*$NetBSD: ixgbe.c,v 1.79 2017/02/24 05:38:30 msaitoh Exp $*/
+/*$NetBSD: ixgbe.c,v 1.80 2017/03/03 04:37:05 msaitoh Exp $*/
 
+#ifdef _KERNEL_OPT
 #include "opt_inet.h"
 #include "opt_inet6.h"
+#include "opt_net_mpsafe.h"
+#endif
 
 #include "ixgbe.h"
 #include "vlan.h"
@@ -391,6 +394,15 @@ static int fdir_pballoc = 1;
 #include <dev/netmap/ixgbe_netmap.h>
 #endif /* DEV_NETMAP */
 
+#ifdef NET_MPSAFE
+#define IXGBE_MPSAFE		1
+#define IXGBE_CALLOUT_FLAGS	CALLOUT_MPSAFE
+#define IXGBE_SOFTINFT_FLAGS	SOFTINT_MPSAFE
+#else
+#define IXGBE_CALLOUT_FLAGS	0
+#define IXGBE_SOFTINFT_FLAGS	0
+#endif
+
 /*********************************************************************
  *  Device identification routine
  *
@@ -489,7 +501,7 @@ ixgbe_attach(device_t parent, device_t d
 	IXGBE_CORE_LOCK_INIT(adapter, device_xname(dev));
 
 	/* Set up the timer callout */
-	callout_init(&adapter->timer, 0);
+	callout_init(&adapter->timer, IXGBE_CALLOUT_FLAGS);
 
 	/* Determine hardware revision */
 	ixgbe_identify_hardware(adapter);
@@ -2615,24 +2627,26 @@ alloc_retry:
 	 * processing contexts.
 	 */
 #ifndef IXGBE_LEGACY_TX
-	txr->txr_si = softint_establish(SOFTINT_NET, ixgbe_deferred_mq_start,
-	    txr);
+	txr->txr_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_deferred_mq_start, txr);
 #endif
-	que->que_si = softint_establish(SOFTINT_NET, ixgbe_handle_que, que);
+	que->que_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_que, que);
 
 	/* Tasklets for Link, SFP and Multispeed Fiber */
-	adapter->link_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_link, adapter);
-	adapter->mod_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_mod, adapter);
-	adapter->msf_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_msf, adapter);
-	adapter->phy_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_phy, adapter);
+	adapter->link_si = softint_establish(SOFTINT_NET |IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_link, adapter);
+	adapter->mod_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_mod, adapter);
+	adapter->msf_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_msf, adapter);
+	adapter->phy_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_phy, adapter);
 
 #ifdef IXGBE_FDIR
 	adapter->fdir_si =
-	    softint_establish(SOFTINT_NET, ixgbe_reinit_fdir, adapter);
+	    softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+		ixgbe_reinit_fdir, adapter);
 #endif
 	if (que->que_si == NULL ||
 	    adapter->link_si == NULL ||
@@ -2712,8 +2726,8 @@ ixgbe_allocate_msix(struct adapter *adap
 		    device_xname(dev), i);
 		intrstr = pci_intr_string(pc, adapter->osdep.intrs[i], intrbuf,
 		    sizeof(intrbuf));
-#ifdef IXG_MPSAFE
-		pci_intr_setattr(pc, adapter->osdep.intrs[i], PCI_INTR_MPSAFE,
+#ifdef IXGBE_MPSAFE
+		pci_intr_setattr(pc, &adapter->osdep.intrs[i], PCI_INTR_MPSAFE,
 		    true);
 #endif
 		/* Set the handler function */
@@ -2770,11 +2784,13 @@ ixgbe_allocate_msix(struct adapter *adap
 		}
 		aprint_normal("\n");
 #ifndef IXGBE_LEGACY_TX
-		txr->txr_si = softint_establish(SOFTINT_NET,
+		txr->txr_si
+		    = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
 		    ixgbe_deferred_mq_start, txr);
 #endif
-		que->que_si = softint_establish(SOFTINT_NET, ixgbe_handle_que,
-		    que);
+		que->que_si
+		    = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+			ixgbe_handle_que, que);
 		if (que->que_si == NULL) {
 			aprint_error_dev(dev,
 			    "could not establish software interrupt\n"); 
@@ -2786,7 +2802,7 @@ ixgbe_allocate_msix(struct adapter *adap
 	snprintf(intr_xname, sizeof(intr_xname), "%s link", device_xname(dev));
 	intrstr = pci_intr_string(pc, adapter->osdep.intrs[vector], intrbuf,
 	    sizeof(intrbuf));
-#ifdef IXG_MPSAFE
+#ifdef IXGBE_MPSAFE
 	pci_intr_setattr(pc, &adapter->osdep.intrs[vector], PCI_INTR_MPSAFE,
 	    true);
 #endif
@@ -2814,20 +2830,20 @@ ixgbe_allocate_msix(struct adapter *adap
 
 	adapter->vector = vector;
 	/* Tasklets for Link, SFP and Multispeed Fiber */
-	adapter->link_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_link, adapter);
-	adapter->mod_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_mod, adapter);
-	adapter->msf_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_msf, adapter);
+	adapter->link_si = softint_establish(SOFTINT_NET |IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_link, adapter);
+	adapter->mod_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_mod, adapter);
+	adapter->msf_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+	    ixgbe_handle_msf, adapter);
 #ifdef PCI_IOV
 	TASK_INIT(&adapter->mbx_task, 0, ixgbe_handle_mbx, adapter);
 #endif
-	adapter->phy_si =
-	    softint_establish(SOFTINT_NET, ixgbe_handle_phy, adapter);
+	adapter->phy_si = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+		ixgbe_handle_phy, adapter);
 #ifdef IXGBE_FDIR
-	adapter->fdir_si =
-	    softint_establish(SOFTINT_NET, ixgbe_reinit_fdir, adapter);
+	adapter->fdir_si = softint_establish(SOFTINT_NET | XGBE_SOFTINFT_FLAGS,
+		ixgbe_reinit_fdir, adapter);
 #endif
 
 	kcpuset_destroy(affinity);
@@ -3013,6 +3029,9 @@ ixgbe_setup_interface(device_t dev, stru
 	ifp->if_stop = ixgbe_ifstop;
 	ifp->if_softc = adapter;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+#ifdef IXGBE_MPSAFE
+	ifp->if_extflags = IFEF_START_MPSAFE;
+#endif
 	ifp->if_ioctl = ixgbe_ioctl;
 #if __FreeBSD_version >= 1100045
 	/* TSO parameters */

Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.54 src/sys/dev/pci/ixgbe/ixv.c:1.55
--- src/sys/dev/pci/ixgbe/ixv.c:1.54	Thu Feb 16 08:01:11 2017
+++ src/sys/dev/pci/ixgbe/ixv.c	Fri Mar  3 04:37:05 2017
@@ -31,10 +31,13 @@
 
 ******************************************************************************/
 /*$FreeBSD: head/sys/dev/ixgbe/if_ixv.c 302384 2016-07-07 03:39:18Z sbruno $*/
-/*$NetBSD: ixv.c,v 1.54 2017/02/16 08:01:11 msaitoh Exp $*/
+/*$NetBSD: ixv.c,v 1.55 2017/03/03 04:37:05 msaitoh Exp $*/
 
+#ifdef _KERNEL_OPT
 #include "opt_inet.h"
 #include "opt_inet6.h"
+#include "opt_net_mpsafe.h"
+#endif
 
 #include "ixgbe.h"
 #include "vlan.h"
@@ -227,6 +230,15 @@ TUNABLE_INT("hw.ixv.rxd", &ixv_rxd);
 */
 static u32 ixv_shadow_vfta[IXGBE_VFTA_SIZE];
 
+#ifdef NET_MPSAFE
+#define IXGBE_MPSAFE		1
+#define IXGBE_CALLOUT_FLAGS	CALLOUT_MPSAFE
+#define IXGBE_SOFTINFT_FLAGS	SOFTINT_MPSAFE
+#else
+#define IXGBE_CALLOUT_FLAGS	0
+#define IXGBE_SOFTINFT_FLAGS	0
+#endif
+
 /*********************************************************************
  *  Device identification routine
  *
@@ -327,7 +339,7 @@ ixv_attach(device_t parent, device_t dev
 	IXGBE_CORE_LOCK_INIT(adapter, device_xname(dev));
 
 	/* Set up the timer callout */
-	callout_init(&adapter->timer, 0);
+	callout_init(&adapter->timer, IXGBE_CALLOUT_FLAGS);
 
 	/* Determine hardware revision */
 	ixv_identify_hardware(adapter);
@@ -1403,8 +1415,8 @@ ixv_allocate_msix(struct adapter *adapte
 		    device_xname(dev), i);
 		intrstr = pci_intr_string(pc, adapter->osdep.intrs[i], intrbuf,
 		    sizeof(intrbuf));
-#ifdef IXV_MPSAFE
-		pci_intr_setattr(pc, adapter->osdep.intrs[i], PCI_INTR_MPSAFE,
+#ifdef IXGBE_MPSAFE
+		pci_intr_setattr(pc, &adapter->osdep.intrs[i], PCI_INTR_MPSAFE,
 		    true);
 #endif
 		/* Set the handler function */
@@ -1437,11 +1449,13 @@ ixv_allocate_msix(struct adapter *adapte
 			aprint_normal("\n");
 
 #ifndef IXGBE_LEGACY_TX
-		txr->txr_si = softint_establish(SOFTINT_NET,
-		    ixgbe_deferred_mq_start, txr);
-#endif
-		que->que_si = softint_establish(SOFTINT_NET, ixv_handle_que,
-		    que);
+		txr->txr_si
+		    = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+			ixgbe_deferred_mq_start, txr);
+#endif
+		que->que_si
+		    = softint_establish(SOFTINT_NET | IXGBE_SOFTINFT_FLAGS,
+			ixv_handle_que, que);
 		if (que->que_si == NULL) {
 			aprint_error_dev(dev,
 			    "could not establish software interrupt\n"); 
@@ -1453,7 +1467,7 @@ ixv_allocate_msix(struct adapter *adapte
 	snprintf(intr_xname, sizeof(intr_xname), "%s link", device_xname(dev));
 	intrstr = pci_intr_string(pc, adapter->osdep.intrs[vector], intrbuf,
 	    sizeof(intrbuf));
-#ifdef IXG_MPSAFE
+#ifdef IXGBE_MPSAFE
 	pci_intr_setattr(pc, &adapter->osdep.intrs[vector], PCI_INTR_MPSAFE,
 	    true);
 #endif
@@ -1481,8 +1495,8 @@ ixv_allocate_msix(struct adapter *adapte
 
 	adapter->vector = vector;
 	/* Tasklets for Mailbox */
-	adapter->link_si = softint_establish(SOFTINT_NET, ixv_handle_mbx,
-	    adapter);
+	adapter->link_si = softint_establish(SOFTINT_NET |IXGBE_SOFTINFT_FLAGS,
+	    ixv_handle_mbx, adapter);
 	/*
 	** Due to a broken design QEMU will fail to properly
 	** enable the guest for MSIX unless the vectors in
@@ -1660,6 +1674,9 @@ ixv_setup_interface(device_t dev, struct
 	ifp->if_stop = ixv_ifstop;
 	ifp->if_softc = adapter;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+#ifdef IXGBE_MPSAFE
+	ifp->if_extflags = IFEF_START_MPSAFE;
+#endif
 	ifp->if_ioctl = ixv_ioctl;
 #ifndef IXGBE_LEGACY_TX
 	ifp->if_transmit = ixgbe_mq_start;

Reply via email to