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;