History log of /freebsd-10-stable/sys/dev/e1000/if_em.c
Revision Date Author Comments
# 354209 30-Oct-2019 marius

MFC: r353778 (partial)

In em_handle_link(), only re-arm the link state change interrupt for
82574 and also only if such a device uses MSI-X, i. e. takes advantage
of autoclearing. In case of INTx and MSI re-arming isn't appropriate
here and setting EM_MSIX_LINK isn't either.


# 342790 05-Jan-2019 marius

MFC: r336610 (partial), r339207, r339267

- Or in the DMA coalescing Rx threshold so the other bits set in E1000_DMACR
remain intact as intended in igb_init_dmac(). [1]

- Fix igb corrupting checksums with BPF and VLAN
In stable/11, this merely syncs the code with head as the problem was
introduced with r311849 in the latter and then fixed by r339207 with
a different approach than the code used pre-r311849 and in stable/11.

- Use mbuf defines to construct csum offload masks rather than literals

MF11: r340148

Don't use 9k jumbo clusters

Reported by: Coverity
CID: 1304929 [1]


# 334251 26-May-2018 sbruno

Activate Wake On Lan features for Ice Lake and Cannon Lake devices.

This is a direct commit to stable/10 as its not needed in -current.

PR: 228302
Submitted by: Kaho Toshikazu <kaho@elam.kais.kyoto-u.ac.jp>


# 333214 03-May-2018 marius

MFC: r327312, r327842, r327865

- Add initial support for Intel Ice Lake and Cannon Lake Ethernet MACs.
- Add workaround for Intel Sky Lake and Kabby Lake Ethernet MAC erratum
1.5.4.5.
- Fix uses of 1 << 31.


# 323293 08-Sep-2017 marius

- Ever since the workaround for the silicon bug of TSO4 causing MAC hangs
was committed in r295133 (MFCed to stable/10 in r295287), CSUM_TSO gets
always disabled by em(4) on the first invocation of em_init_locked() as
at that point no link is established, yet. In turn, this causes CSUM_TSO
also to be off when em(4) is used as a parent device for vlan(4), i. e.
besides IFCAP_TSO4, IFCAP_VLAN_HWTSO effectively doesn't work either.

In head an attempt to fix this was made with r308345, but that revision
had several problems on its own. One of which was that r308345 caused
IFCAP_TSO4 to also be cleared from both the interface capability and
capability enable bits. Thus, once a link switched from gigabit to a
lower speed, TSO no longer could be enabled, even not via ifconfig(8).
So this change moves the aforementioned WAR to em_update_link_status()
like r308345 did, but only alters the hardware assist bits accordingly,
leaving IFCAP_TSO4 flags alone.

Still, this isn't the only problem r308345 had. Another one is that there
just is no way to atomically flush TSO-using descriptors already queued
at the point in time a link speed switch to below GbE occurs. Thus, such
in-flight descriptors still may hang the MAC. Moreover, at least currently
there also is no way of triggering a reconfiguration of vlan(4) when the
state of IFCAP_VLAN_HWTSO support changes at runtime, causing vlan(4) to
continue employing TSO. Last but not least, testing shows that - despite
all the WARs for TSO-related silicon bugs in em(4) - at least 82579 still
may hang at gigabit speed with IFCAP_TSO4 enabled. Therefore, this change
further removes IFCAP_TSO4 and IFCAP_VLAN_HWTSO from interface capability
enable bits as set by em(4). While at it, the use of CSUM_TCP is replaced
with CSUM_IP_TSO as em(4) only implements support for IFCAP_TSO4 but not
IFCAP_TSO6 (although in principle available with a subset of the supported
MACs).

At the bottom line, this change allows IFCAP_TSO4 and IFCAP_VLAN_HWTSO to
be used again with em(4), but these hardware offloading capabilities now
need to be explicitly enabled via ifconfig(8). Beware that it's only
considered safe to do so (and also only may work) in environments where
the link speed is not to be expected to change from GbE. Moreover, em(4)
appears to still be missing some more TSO workarounds for at least some
models, specifically the 82579 (I could not find an errata sheet and
"specification update" respectively for these latter, though, and the
generic ICH8 one doesn't list any TSO related bugs).

- Let igb_tso_setup() handle EtherType protocols that are unsupported or
for which support hasn't been compiled in gracefully instead of calling
panic(9).

- Make em_allocate_{legacy,msix}() and lem_allocate_irq() match their
prototypes WRT static.

This is a direct commit to stable/10 as corresponding code is no longer
present in head.

Approved by: re (gjb, kib)


# 323080 01-Sep-2017 marius

MFC: r308643, r312427, r312641, r322986

- Update WOL support for newer em(4) devices. [1]
- Add support for Kaby Lake generation i219 (4) and i219 (5) devices.
- Enable WOL features also for the igb(4) class of devices. [1]
- Don't set any WOL enabling hardware bits if WOL isn't requested
according to the enabled interface capability bits.

PR: 208343 [1]
Submitted by: Kaho Tashikazu <kaho@elam.kais.kyoto-u.ac.jp> [1]
Approved by: re (kib)


# 320117 19-Jun-2017 sbruno

Direct commit to stable/10 to correctly setting the EIAC and IMS
registers to the same values when processing interrupts.

This resolves PR https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=211219

PR: 211219
Submitted by: Franco Fitchner <franco@opnsense.org>


# 316588 06-Apr-2017 sbruno

Direct commit of fixes to stable/10, resolving PCI passthrough and initialization
issues when trying to passthrough a i340 (igb) to VMware.

While here, cleanup some bits of em(4) to DTRT as well.

PR: 218113
Submitted by: Kaho Toshikazu <kaho@elam.kais.kyoto-u.ac.jp>


# 314103 22-Feb-2017 marius

MFC: r311979

Reset the EIAC register to include the LINK status bit and restore
link up/down notifications.


# 304338 18-Aug-2016 sbruno

MFC r304149

e1000: Add support for Kaby Lake IDs

Fixup some errors when transitioning to/from low power states.


# 303665 02-Aug-2016 sbruno

MFC r303638

Unbreak NETMAP usage with em(4) broken in r293331.


# 303116 20-Jul-2016 sbruno

Fix em(4) build after r303107

Reported by: Jason Wolf <j@nitrology.com>


# 303107 20-Jul-2016 sbruno

MFC - r302384 to 10-STABLE
Do not initialize the adapter on MTU change when adapter status is down.
This fixes long-standing problems when changing settings of the adapter.

Discussed in:
https://lists.freebsd.org/pipermail/freebsd-net/2016-June/045509.html

Differential Revision: https://reviews.freebsd.org/D7254


# 299192 06-May-2016 sbruno

MFC r298224

Correct possible underflow conditions when checking for available space
in the tx h/w ring buffer.

Sponsored by: Limelight Networks


# 296073 25-Feb-2016 marius

MFC: r295906

Fix and clean up usage of DMA and TSO segments:
- At Intel it is believed that most of their products support "only"
40 DMA segments so lower {EM,IGB}_MAX_SCATTER accordingly. Actually,
40 is more than plenty to handle full size TSO packets so it doesn't
make sense to further distinguish between MAC variants that really
can do 64 DMA segments. Moreover, capping at 40 DMA segments limits
the stack usage of {em,igb}_xmit() that - given the rare use of more
than these - previously hardly was justifiable, while still being
sufficient to avoid the problems seen with em(4) and EM_MAX_SCATTER
set to 32.
- In igb(4), pass the actually supported TSO parameters up the stack.
Previously, the defaults set in if_attach_internal() were applied,
i. e. a maximum of 35 TSO segments, which made supporting more than
these in the driver pointless. However, this might explain why no
problems were seen with IGB_MAX_SCATTER at 64.
- In em(4), take the 5 m_pullup(9) invocations performed by em_xmit()
in the TSO case into account when reporting TSO parameters upwards.
In the worst case, each of these calls will add another mbuf and,
thus, the requirement for an additional DMA segment. So for best
performance, it doesn't make sense to advertize a maximum of TSO
segments that typically will require defragmentation in em_xmit().
Again, this leaves enough room to handle full size TSO packets.
- Drop TSO macros from if_lem.h given that corresponding MACS don't
support TSO in the first place.

Reviewed by: erj, sbruno, jeffrey.e.pieper_intel.com
Approved by: re (gjb)


# 296055 25-Feb-2016 erj

MFC r295323:
Update em(4) to 7.6.1; update igb(4) to 2.5.3.

Major changes:

- Add i219/i219(2) hardware support. (Found on Skylake generation and newer
chipsets.)
- Further to the last Skylake support diff, this one also includes support for
the Lewisburg chipset (i219(3)).

- Add a workaround to an igb hardware errata.
All 1G server products need to have IPv6 extension header parsing turned off.
This should be listed in the specification updates for current 1G server
products, e.g. for i350 it's errata #37 in this document:
http://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/ethernet-controller-i350-spec-update.pdf

- Avoton (i354) PHY errata workaround added

And a bunch of minor fixes, as well as #defines for things that the current
em(4)/igb(4) drivers don't implement.

MFC r287465:

igb(4): Update and fix HW errata
- HW errata workaround for IPv6 offload w/ extension headers
- Edited start of if_igb.c (Device IDs / #includes) to match ixgbe/ixl

Approved by: re (gjb)
Sponsored by: Intel Corporation


# 295287 04-Feb-2016 marius

MFC: r295133

As it turns out, one of the more or less recent changes to em(4)
causes watchdog timeouts when using TSO4 at link speeds below
Gigabit, at least with 82573E. So disable the assist automatically
when at lower speeds.

Submitted by: jfv
Approved by: re (kib), erj
Obtained from: D3162


# 294958 27-Jan-2016 marius

Sync the e1000 drivers with what's in head as of r294327, modulo parts
that don't apply to stable/10 (driver API, if_inc_counter(), RSS changes
etc.) and modulo r287465 (which reportedly breaks igb(4)), i. e. assorted
fixes and improvements only:

o MFC r267385 (partial):
- Don't compare bus_dma map pointers for static DMA allocations against
NULL to determine if bus_dmamap_unload() or bus_dmamem_free() should be
called. Instead, check the associated bus and virtual addresses.
- Don't clear static DMA maps to NULL.
o MFC r284933:
Delete the refernce to VLAN handling being disabled by default. This is
no longer the case. [1]
o MFC r285639:
Add an adapter CORE lock in the DDB hook em_dump_queue to avoid WITNESS
panic in em_init_locked() while debugging.
o MFC r285879:
- Remove unused txd_saved.
- Intialize txd_upper, txd_lower and txd_used at declaration.
o MFC r286162:
Free mbufs when busdma loading fails.
o MFC r286829:
Add capability to disable CRC stripping as it breaks IPMI/BMC capabilities
on certain adatpers. [2]
o MFC r286831: [3]
- Increase EM_MAX_SCATTER to 64 such that the size of em_xmit()::
segs[EM_MAX_SCATTER] doesn't get overrun by things like NFS that can
and do shove more than 32 segs when being used with em(4) and TSO4.
- Update tso handling code in em_xmit() with update from jhb@
- Set if_hw_tsomax, if_hw_tsomaxsegcount and if_hw_tsomaxsegsize to
appropriate values.
- Define a TSO workaround "magic" number of 4 that is used to avoid an
alignment issue in hardware.
- Change a couple of integer values that were used as booleans to actual
bool types.
- Ensure that em_enable_intr() enables the appropriate mask of interrupts
and not just a hardcoded define of values.
o MFC r286832:
e1000/if_lem.c bump to 1.1.0
o MFC r286833:
Bump all copywrite dates to 2015.
o MFC r287112:
Style/whitespace cleanup in shared/common code.
o MFC r293331:
- Switch em(4) to the extended RX descriptor format.
- Split rxbuffer and txbuffer apart to support the new RX descriptor
format structures. Move rxbuffer manipulation to em_setup_rxdesc() to
unify the new behavior changes.
- Add a RSSKEYLEN macro for help in generating the RSSKEY data structures
in the card.
- Change em_receive_checksum() to process the new rxdescriptor format
status bit.
o MFC r293332:
Disable the reuse of checksum offload context descriptors in the case
of multiple queues in em(4). Document errata in the code.
o MFC r293854:
Given that em(4), lem(4) and igb(4) hardware doesn't require the
alignment guarantees provided by m_defrag(9), use m_collapse(9)
instead for performance reasons.
While at it, sanitize the statistics softc members, i. e. retire
unused ones and add SYSCTL nodes missing for actually used ones.

PR: 118693 [1], 161277 [2], 195078 [3], 199174 [3], 200221 [3]


# 284522 17-Jun-2015 sbruno

MFC r284179, r283959

Implement multiqueue (max 2 tx/rx queues) for the 82574L chipset.

Change default tuning parameters to handle this new configuration if
EM_MULTIQUEUE is set in the kernel configuration. Off by default.

See r283959 changelog for the scope of these changes.

Relnotes: Yes
Sponsored by: Limelight Networks


# 284444 16-Jun-2015 sbruno

MFC r283923

Simplify hang detection by stealing the techniques used in ixl(4) and
applying them to em(4).

Rely on iterations through the local timer, and the tx queue state to
determine if an actual hang has occurred. Any time a descriptor is used
(packet sent), the tx queue is flagged as busy. Then when txeof runs, it
either clears the flag when all is clean, or resets it to 1 if ANY are
cleaned, if nothing is cleaned it increments the flag.

Local timer simply checks to see if busy ever reaches MAX (10, which
is compile time configurable), and then sets it as HUNG, at that point
there is one more timer cycle in which to have any cleans, if not a
watchdog reset will occur.


# 283504 24-May-2015 sbruno

MFC r283290

Bump rx_overruns when indicated by the ICR mask.

PR: 199716
Sponsored by: Limelight Networks


# 273736 27-Oct-2014 hselasky

MFC r263710, r273377, r273378, r273423 and r273455:

- De-vnet hash sizes and hash masks.
- Fix multiple issues related to arguments passed to SYSCTL macros.

Sponsored by: Mellanox Technologies


# 270252 20-Aug-2014 luigi

MFC 270063: update of netmap code
(vtnet and cxgbe not merged yet because we need some other mfc first)


# 269258 29-Jul-2014 rmacklem

MFC: r268726
Move the "retry:" label so that the calls to m_pullup() are
not done after the call to m_defrag(). This fixes a problem
where m_pullup() would prepend an mbuf to the list created
by m_defrag() making the chain greater than 32 again.


# 269196 28-Jul-2014 jfv

MFC of R267935: Sync the E1000 shared code to Intel internal, and
more importantly add new I218 adapter support to em.


# 262151 18-Feb-2014 luigi

MFH: sync the netmap code with the one in HEAD
(enhanced VALE switch, netmap pipes, emulated netmap mode).
See details in the log for svn 261909.


# 259508 17-Dec-2013 kib

MFC r257541:
Fix several issues with the busdma(9) KPI use in the e1000 drivers.


# 284522 17-Jun-2015 sbruno

MFC r284179, r283959

Implement multiqueue (max 2 tx/rx queues) for the 82574L chipset.

Change default tuning parameters to handle this new configuration if
EM_MULTIQUEUE is set in the kernel configuration. Off by default.

See r283959 changelog for the scope of these changes.

Relnotes: Yes
Sponsored by: Limelight Networks


# 284444 16-Jun-2015 sbruno

MFC r283923

Simplify hang detection by stealing the techniques used in ixl(4) and
applying them to em(4).

Rely on iterations through the local timer, and the tx queue state to
determine if an actual hang has occurred. Any time a descriptor is used
(packet sent), the tx queue is flagged as busy. Then when txeof runs, it
either clears the flag when all is clean, or resets it to 1 if ANY are
cleaned, if nothing is cleaned it increments the flag.

Local timer simply checks to see if busy ever reaches MAX (10, which
is compile time configurable), and then sets it as HUNG, at that point
there is one more timer cycle in which to have any cleans, if not a
watchdog reset will occur.


# 283504 24-May-2015 sbruno

MFC r283290

Bump rx_overruns when indicated by the ICR mask.

PR: 199716
Sponsored by: Limelight Networks


# 273736 27-Oct-2014 hselasky

MFC r263710, r273377, r273378, r273423 and r273455:

- De-vnet hash sizes and hash masks.
- Fix multiple issues related to arguments passed to SYSCTL macros.

Sponsored by: Mellanox Technologies


# 270252 20-Aug-2014 luigi

MFC 270063: update of netmap code
(vtnet and cxgbe not merged yet because we need some other mfc first)


# 269258 29-Jul-2014 rmacklem

MFC: r268726
Move the "retry:" label so that the calls to m_pullup() are
not done after the call to m_defrag(). This fixes a problem
where m_pullup() would prepend an mbuf to the list created
by m_defrag() making the chain greater than 32 again.


# 269196 28-Jul-2014 jfv

MFC of R267935: Sync the E1000 shared code to Intel internal, and
more importantly add new I218 adapter support to em.


# 262151 18-Feb-2014 luigi

MFH: sync the netmap code with the one in HEAD
(enhanced VALE switch, netmap pipes, emulated netmap mode).
See details in the log for svn 261909.


# 259508 17-Dec-2013 kib

MFC r257541:
Fix several issues with the busdma(9) KPI use in the e1000 drivers.