#
09b57b7f |
| 30-Oct-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
bnxt: HW_LRO Rx Pkt with > 32 fragments caused Crash (iflib)
Broadcom NIC with HW_LRO setting max_agg_segs >= 6 can generate Rx pkt with 64 (2^6) fragments, modify IFLIB_MAX_RX_SEGS to 64 to avoid m
bnxt: HW_LRO Rx Pkt with > 32 fragments caused Crash (iflib)
Broadcom NIC with HW_LRO setting max_agg_segs >= 6 can generate Rx pkt with 64 (2^6) fragments, modify IFLIB_MAX_RX_SEGS to 64 to avoid memory corruption / Crash.
Submitted by: Bhargava Chenna Marreddy <bhargava.marreddy@broadcom.com> Reviewed by: shurd, sbruno Approved by: sbruno (mentor) Sponsored by: Broadcom Limited Differential Revision: https://reviews.freebsd.org/D12774
show more ...
|
#
2d873474 |
| 30-Oct-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Fix PR222744 - netmap errors with iflib em driver
Fix error when refilling netmap buffers that resulted in the first buffer of the successive passes through ifl_bus_addrs[] leaving the first value u
Fix PR222744 - netmap errors with iflib em driver
Fix error when refilling netmap buffers that resulted in the first buffer of the successive passes through ifl_bus_addrs[] leaving the first value unset (tmp_pidx started at 1, not zero after the first time through the loop).
Leave the one unused buffer required by some NICs visible in the netmap ring rather than hidden. There will always be a buffer in use by the kernel now when an iflib driver is used via netmap.
Always get the netmap slot index via netmap_idx_n2k() to account for nkr_hwofs in a consistent way.
Split shared functionality into new functions. iru_init(): shared by _iflib_fl_refill() and netmap_fl_refill() netmap_fl_refill(): shared by iflib_netmap_rxsync() and iflib_netmap_rxq_init()
PR: 222744 Reported by: Shirkdog <mshirk@daemon-security.com> Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12769
show more ...
|
#
0fdea539 |
| 30-Oct-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Avoid enabling MSI-X if MSI-X is disabled globally
It was reported on the community call that with hw.pci.enable_msix=0, iflib would enable MSI-X on the device and attempt to use it, which caused is
Avoid enabling MSI-X if MSI-X is disabled globally
It was reported on the community call that with hw.pci.enable_msix=0, iflib would enable MSI-X on the device and attempt to use it, which caused issues. Test the sysctl explicitly and do not enable MSI-X if it's disabled globally.
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12805
show more ...
|
#
5ff880dc |
| 26-Oct-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r325004
|
#
3429c02f |
| 23-Oct-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Some cache related optimizations
1. prefetch 128 bytes of mbufs. 2. Re-order filling the pkt_info so cache stalls happen at the end 3. Define empty prefetch2cachelines() macro when the function isn'
Some cache related optimizations
1. prefetch 128 bytes of mbufs. 2. Re-order filling the pkt_info so cache stalls happen at the end 3. Define empty prefetch2cachelines() macro when the function isn't present.
Provides small performance improvments on some hardware
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12447
show more ...
|
#
50896984 |
| 10-Oct-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r324482
|
#
1c0054d2 |
| 05-Oct-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Fix "taskqgroup_attach: setaffinity failed: 3" with iflib drivers
Improved logging added in r323879 exposed an error during attach. We need the irq, not the rid to work correctly. em uses shared irq
Fix "taskqgroup_attach: setaffinity failed: 3" with iflib drivers
Improved logging added in r323879 exposed an error during attach. We need the irq, not the rid to work correctly. em uses shared irqs, so it will use the same irq for TX as RX. bnxt does not use shared irqs, or TX irqs at all, so there's no need to set the TX irq affinity.
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12496
show more ...
|
Revision tags: release/10.4.0 |
|
#
e5d34ca9 |
| 23-Sep-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r320180
|
#
1225d9da |
| 23-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Have ifmp_ring_enqueue() abdicate instead of switch to a consumer
Move TX out of the enqueue() path. As a result, we need to have ifmp_ring_check_drainage() pick up from the abdicate state.
We also
Have ifmp_ring_enqueue() abdicate instead of switch to a consumer
Move TX out of the enqueue() path. As a result, we need to have ifmp_ring_check_drainage() pick up from the abdicate state.
We also need to either enqueue the TX task, or check drainage after calling ifmp_ring_enqueue() to ensure it's sent.
This change results in a 30% small packet forwarding improvement.
Reviewed by: olivier, sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12439
show more ...
|
#
f4d2154e |
| 23-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Make the rx budget a tunable
This allows tuning the rx budget for special load profiles as well as more easily testing to determine sane defaults.
Reviewed by: sbruno Approved by: sbruno (mentor) S
Make the rx budget a tunable
This allows tuning the rx budget for special load profiles as well as more easily testing to determine sane defaults.
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12445
show more ...
|
#
20f63282 |
| 23-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Chain mbufs before passing to if_input()
Build a list of mbufs to pass to if_input() after LRO. Results in 12% small packet forwarding rate improvement.
Reviewed by: sbruno Approved by: sbruno (men
Chain mbufs before passing to if_input()
Build a list of mbufs to pass to if_input() after LRO. Results in 12% small packet forwarding rate improvement.
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12444
show more ...
|
#
c5cf2172 |
| 23-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Some small packet performance improvements
If the packet is smaller than MTU, disable the TSO flags. Move TCP header parsing inside the IS_TSO?() test. Add a new IFLIB_NEED_ZERO_CSUM flag to indicat
Some small packet performance improvements
If the packet is smaller than MTU, disable the TSO flags. Move TCP header parsing inside the IS_TSO?() test. Add a new IFLIB_NEED_ZERO_CSUM flag to indicate the checksums need to be zeroed before TX.
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12442
show more ...
|
#
d0d0ad0a |
| 20-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Fix iflib netmap RX
RXQ setup for netmap was broken because netmap_rxq_init was getting called before IFDI_INIT - thus we ended up with ring tail pointer being reset to zero.
Reviewed by: sbruno Ap
Fix iflib netmap RX
RXQ setup for netmap was broken because netmap_rxq_init was getting called before IFDI_INIT - thus we ended up with ring tail pointer being reset to zero.
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12140
show more ...
|
#
ab2e3f79 |
| 16-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Revert r323516 (iflib rollup)
This was really too big of a commit even if everything worked, but there are multiple new issues introduced in the one huge commit, so it's not worth keeping this until
Revert r323516 (iflib rollup)
This was really too big of a commit even if everything worked, but there are multiple new issues introduced in the one huge commit, so it's not worth keeping this until it's fixed.
I'll work on splitting this up into logical chunks and introduce them one at a time over the next week or two.
Approved by: sbruno (mentor) Sponsored by: Limelight Networks
show more ...
|
#
b754c279 |
| 13-Sep-2017 |
Navdeep Parhar <np@FreeBSD.org> |
MFH @ r323558.
|
#
d300df01 |
| 13-Sep-2017 |
Stephen Hurd <shurd@FreeBSD.org> |
Roll up iflib commits from github. This pulls in most of the work done by Matt Macy as well as other changes which he has accepted via pull request to his github repo at https://github.com/mattmacy/
Roll up iflib commits from github. This pulls in most of the work done by Matt Macy as well as other changes which he has accepted via pull request to his github repo at https://github.com/mattmacy/networking/
This should bring -CURRENT and the github repo into close enough sync to allow small feature branches rather than a large chain of interdependant patches being developed out of tree. The reset of the synchronization should be able to be completed on github by splitting the remaining changes that are not yet ready into short feature branches for later review as smaller commits.
Here is a summary of changes included in this patch:
1) More checks when INVARIANTS are enabled for eariler problem detection 2) Group Task Queue cleanups - Fix use of duplicate shortdesc for gtaskqueue malloc type. Some interfaces such as memguard(9) use the short description to identify malloc types, so duplicates should be avoided. 3) Allow gtaskqueues to use ithreads in addition to taskqueues - In some cases, this can improve performance 4) Better logging when taskqgroup_attach*() fails to set interrupt affinity. 5) Do not start gtaskqueues until they're needed 6) Have mp_ring enqueue function enter the ABDICATED rather than BUSY state. This moves the TX to the gtaskq and allows processing to continue faster as well as make TX batching more likely. 7) Add an ift_txd_errata function to struct if_txrx. This allows drivers to inspect/modify mbufs before transmission. 8) Add a new IFLIB_NEED_ZERO_CSUM for drivers to indicate they need checksums zeroed for checksum offload to work. This avoids modifying packet data in the TX path when possible. 9) Use ithreads for iflib I/O instead of taskqueues 10) Clean up ioctl and support async ioctl functions 11) Prefetch two cachlines from each mbuf instead of one up to 128B. We often need to parse packet header info beyond 64B. 12) Fix potential memory corruption due to fence post error in bit_nclear() usage. 13) Improved hang detection and handling 14) If the packet is smaller than MTU, disable the TSO flags. This avoids extra packet parsing when not needed. 15) Move TCP header parsing inside the IS_TSO?() test. This avoids extra packet parsing when not needed. 16) Pass chains of mbufs that are not consumed by lro to if_input() rather call if_input() for each mbuf. 17) Re-arrange packet header loads to get as much work as possible done before a cache stall. 18) Lock the context when calling IFDI_ATTACH_PRE()/IFDI_ATTACH_POST()/ IFDI_DETACH(); 19) Attempt to distribute RX/TX tasks across cores more sensibly, especially when RX and TX share an interrupt. RX will attempt to take the first threads on a core, and TX will attempt to take successive threads. 20) Allow iflib_softirq_alloc_generic() to request affinity to the same cpus an interrupt has affinity with. This allows TX queues to ensure they are serviced by the socket the device is on. 21) Add new iflib sysctls to net.iflib: - timer_int - interval at which to run per-queue timers in ticks - force_busdma 22) Add new per-device iflib sysctls to dev.X.Y.iflib - rx_budget allows tuning the batch size on the RX path - watchdog_events Count of watchdog events seen since load 23) Fix error where netmap_rxq_init() could get called before IFDI_INIT() 24) e1000: Fixed version of r323008: post-cold sleep instead of DELAY when waiting for firmware - After interrupts are enabled, convert all waits to sleeps - Eliminates e1000 software/firmware synchronization busy waits after startup 25) e1000: Remove special case for budget=1 in em_txrx.c - Premature optimization which may actually be incorrect with multi-segment packets 26) e1000: Split out TX interrupt rather than share an interrupt for RX and TX. - Allows better performance by keeping RX and TX paths separate 27) e1000: Separate igb from em code where suitable Much easier to understand separate functions and "if (is_igb)" than previous tests like "if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))"
#blamebruno
Reviewed by: sbruno Approved by: sbruno (mentor) Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12235
show more ...
|
#
5be4ad9e |
| 09-Sep-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r323343
|
#
2cc3b2ee |
| 01-Sep-2017 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Do not abuse flag that is clearly marked as unused. This creates conflicts with FreeBSD variations that may use it. The usage of the flag M_TOOBIG is limited to iflib queue, thus using one of M_PROT
Do not abuse flag that is clearly marked as unused. This creates conflicts with FreeBSD variations that may use it. The usage of the flag M_TOOBIG is limited to iflib queue, thus using one of M_PROTO flags is fine. There is no need to grab global flag.
Silence from: kmacy, sbruno (2 weeks)
show more ...
|
#
a9693502 |
| 30-Aug-2017 |
Sean Bruno <sbruno@FreeBSD.org> |
Revert r323008 and its conversion of e1000/iflib to using SX locks.
This seems to be missing something on the 82574L causing NFS root mounts to hang.
Reported by: kib
|
#
e17e5b41 |
| 30-Aug-2017 |
Sean Bruno <sbruno@FreeBSD.org> |
Continuation of lock cleanup in e1000.
Post-cold sleep instead of DELAY when waiting for firmware.
Convert softc mutex to an SX lock. Change all waits to sleeps once interrupts are enabled (and it
Continuation of lock cleanup in e1000.
Post-cold sleep instead of DELAY when waiting for firmware.
Convert softc mutex to an SX lock. Change all waits to sleeps once interrupts are enabled (and it is safe to sleep).
Submitted by: Matt Macy <matt@mattmacy.io> Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D12101
show more ...
|
#
1be4c195 |
| 25-Aug-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r322870
|
#
21e10b16 |
| 23-Aug-2017 |
Sean Bruno <sbruno@FreeBSD.org> |
iflib: call device's if_init function during vlan initialization.
Submitted by: bhargava.marreddy@broadcom.com Reviewed by: shurd Sponsored by: Broadcom Differential Revision: https://reviews.freeb
iflib: call device's if_init function during vlan initialization.
Submitted by: bhargava.marreddy@broadcom.com Reviewed by: shurd Sponsored by: Broadcom Differential Revision: https://reviews.freebsd.org/D12098
show more ...
|
#
083c8ded |
| 13-Aug-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r322451
|
#
0275f9db |
| 11-Aug-2017 |
Hans Petter Selasky <hselasky@FreeBSD.org> |
Merge ^/head r321383 through r322397.
|
#
5c5ca36c |
| 10-Aug-2017 |
Sean Bruno <sbruno@FreeBSD.org> |
Don't leak mbufs if clusers exceeds the number of segments. This would leak mbufs over time causing crashes.
PR: 221202 Submitted by: Matt Macy <matt@mattmacy.io> Reported by: gergely.czuczy@harml
Don't leak mbufs if clusers exceeds the number of segments. This would leak mbufs over time causing crashes.
PR: 221202 Submitted by: Matt Macy <matt@mattmacy.io> Reported by: gergely.czuczy@harmless.hu Sponsored by: Limelight Networks
show more ...
|