Module Name: src Committed By: martin Date: Tue Dec 24 17:44:22 UTC 2019
Modified Files: src/sys/dev/pci/ixgbe [netbsd-9]: ixgbe.c ixgbe_osdep.c ixgbe_osdep.h ixv.c Log Message: Pull up following revision(s) (requested by msaitoh in ticket #580): sys/dev/pci/ixgbe/ixgbe.c: revision 1.217 sys/dev/pci/ixgbe/ixgbe.c: revision 1.218 sys/dev/pci/ixgbe/ixgbe_osdep.c: revision 1.6 sys/dev/pci/ixgbe/ixv.c: revision 1.143 sys/dev/pci/ixgbe/ixgbe_osdep.h: revision 1.25 Use bus_space_barrier() instead of x86 specific *fence instruction. Written by riastradh@. Add missing core lock in ixgbe_handle_mod(). To generate a diff of this commit: cvs rdiff -u -r1.199.2.7 -r1.199.2.8 src/sys/dev/pci/ixgbe/ixgbe.c cvs rdiff -u -r1.4 -r1.4.8.1 src/sys/dev/pci/ixgbe/ixgbe_osdep.c cvs rdiff -u -r1.23 -r1.23.6.1 src/sys/dev/pci/ixgbe/ixgbe_osdep.h cvs rdiff -u -r1.125.2.7 -r1.125.2.8 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.199.2.7 src/sys/dev/pci/ixgbe/ixgbe.c:1.199.2.8 --- src/sys/dev/pci/ixgbe/ixgbe.c:1.199.2.7 Tue Nov 19 13:17:44 2019 +++ src/sys/dev/pci/ixgbe/ixgbe.c Tue Dec 24 17:44:22 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ixgbe.c,v 1.199.2.7 2019/11/19 13:17:44 martin Exp $ */ +/* $NetBSD: ixgbe.c,v 1.199.2.8 2019/12/24 17:44:22 martin Exp $ */ /****************************************************************************** @@ -4021,7 +4021,7 @@ ixgbe_init_locked(struct adapter *adapte else msec_delay(1); } - wmb(); + IXGBE_WRITE_BARRIER(hw); /* * In netmap mode, we must preserve the buffers made @@ -4613,6 +4613,7 @@ ixgbe_handle_mod(void *context) device_t dev = adapter->dev; u32 err, cage_full = 0; + IXGBE_CORE_LOCK(adapter); ++adapter->mod_sicount.ev_count; if (adapter->hw.need_crosstalk_fix) { switch (hw->mac.type) { @@ -4630,14 +4631,14 @@ ixgbe_handle_mod(void *context) } if (!cage_full) - return; + goto out; } err = hw->phy.ops.identify_sfp(hw); if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) { device_printf(dev, "Unsupported SFP+ module type was detected.\n"); - return; + goto out; } if (hw->mac.type == ixgbe_mac_82598EB) @@ -4648,9 +4649,11 @@ ixgbe_handle_mod(void *context) if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) { device_printf(dev, "Setup failure - unsupported SFP+ module type.\n"); - return; + goto out; } softint_schedule(adapter->msf_si); +out: + IXGBE_CORE_UNLOCK(adapter); } /* ixgbe_handle_mod */ Index: src/sys/dev/pci/ixgbe/ixgbe_osdep.c diff -u src/sys/dev/pci/ixgbe/ixgbe_osdep.c:1.4 src/sys/dev/pci/ixgbe/ixgbe_osdep.c:1.4.8.1 --- src/sys/dev/pci/ixgbe/ixgbe_osdep.c:1.4 Wed Apr 4 08:13:07 2018 +++ src/sys/dev/pci/ixgbe/ixgbe_osdep.c Tue Dec 24 17:44:22 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ixgbe_osdep.c,v 1.4 2018/04/04 08:13:07 msaitoh Exp $ */ +/* $NetBSD: ixgbe_osdep.c,v 1.4.8.1 2019/12/24 17:44:22 martin Exp $ */ /****************************************************************************** @@ -116,3 +116,12 @@ ixgbe_write_reg_array(struct ixgbe_hw *h ((struct adapter *)hw->back)->osdep.mem_bus_space_handle, reg + (offset << 2), val); } + +inline void +ixgbe_write_barrier(struct ixgbe_hw *hw) +{ + bus_space_barrier(((struct adapter *)hw->back)->osdep.mem_bus_space_tag, + ((struct adapter *)hw->back)->osdep.mem_bus_space_handle, + 0, ((struct adapter *)hw->back)->osdep.mem_size, + BUS_SPACE_BARRIER_WRITE); +} Index: src/sys/dev/pci/ixgbe/ixgbe_osdep.h diff -u src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.23 src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.23.6.1 --- src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.23 Tue Jul 31 09:19:34 2018 +++ src/sys/dev/pci/ixgbe/ixgbe_osdep.h Tue Dec 24 17:44:22 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: ixgbe_osdep.h,v 1.23 2018/07/31 09:19:34 msaitoh Exp $ */ +/* $NetBSD: ixgbe_osdep.h,v 1.23.6.1 2019/12/24 17:44:22 martin Exp $ */ /****************************************************************************** SPDX-License-Identifier: BSD-3-Clause @@ -157,18 +157,6 @@ typedef uint64_t u64; /* This device driver's max interrupt numbers. */ #define IXG_MAX_NINTR 64 -#if __FreeBSD_version < 800000 -#if defined(__i386__) || defined(__amd64__) -#define mb() __asm volatile("mfence" ::: "memory") -#define wmb() __asm volatile("sfence" ::: "memory") -#define rmb() __asm volatile("lfence" ::: "memory") -#else -#define mb() -#define rmb() -#define wmb() -#endif -#endif - #if defined(__i386__) || defined(__amd64__) static __inline void prefetch(void *x) @@ -241,4 +229,8 @@ extern void ixgbe_write_reg_array(struct #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, val) \ ixgbe_write_reg_array(a, reg, offset, val) +extern void ixgbe_write_barrier(struct ixgbe_hw *); +#define IXGBE_WRITE_BARRIER(a) \ + ixgbe_write_barrier(a) + #endif /* _IXGBE_OSDEP_H_ */ Index: src/sys/dev/pci/ixgbe/ixv.c diff -u src/sys/dev/pci/ixgbe/ixv.c:1.125.2.7 src/sys/dev/pci/ixgbe/ixv.c:1.125.2.8 --- src/sys/dev/pci/ixgbe/ixv.c:1.125.2.7 Tue Nov 19 13:17:44 2019 +++ src/sys/dev/pci/ixgbe/ixv.c Tue Dec 24 17:44:22 2019 @@ -1,4 +1,4 @@ -/*$NetBSD: ixv.c,v 1.125.2.7 2019/11/19 13:17:44 martin Exp $*/ +/*$NetBSD: ixv.c,v 1.125.2.8 2019/12/24 17:44:22 martin Exp $*/ /****************************************************************************** @@ -1857,7 +1857,7 @@ ixv_initialize_receive_units(struct adap else break; } - wmb(); + IXGBE_WRITE_BARRIER(hw); /* Setup the Base and Length of the Rx Descriptor Ring */ IXGBE_WRITE_REG(hw, IXGBE_VFRDBAL(j), (rdba & 0x00000000ffffffffULL)); @@ -1889,7 +1889,7 @@ ixv_initialize_receive_units(struct adap break; msec_delay(1); } - wmb(); + IXGBE_WRITE_BARRIER(hw); /* Set the Tail Pointer */ #ifdef DEV_NETMAP