#
342529 |
|
26-Dec-2018 |
arybchik |
MFC r341785
sfxge(4): use n Tx queues instead of n + 2 on EF10 HW
On EF10 HW we can avoid sending packets without checksum offload or with IP-only checksum offload to dedicated queues. Instead, we can use option descriptors to change offload policy on any queue during runtime. Thus, we don't need to create two dedicated queues.
Submitted by: Ivan Malov <Ivan.Malov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D18390
|
#
342527 |
|
26-Dec-2018 |
arybchik |
MFC r341784
sfxge(4): prepare the number of Tx queues on event queue 0 to become variable
The number of Tx queues on event queue 0 can depend on the NIC family type, and this property will be leveraged by future patches. This patch prepares the code for this change.
Submitted by: Ivan Malov <Ivan.Malov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D18389
|
#
342522 |
|
26-Dec-2018 |
arybchik |
MFC r341327
sfxge(4): rollback last seen VLAN TCI if Tx packet is dropped
Early processing of a packet on transmit may change last seen VLAN TCI in the queue context. If such a packet is eventually dropped, last seen VLAN TCI must be set to its previous value.
Submitted by: Ivan Malov <Ivan.Malov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D18288
|
#
342477 |
|
26-Dec-2018 |
arybchik |
MFC r312883
sfxge(4): fix invalid VLAN tagging after stop/start
TxQ is destroyed on stop and last used tag should be reset to default 0 on the next start.
Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D9358
|
#
342474 |
|
26-Dec-2018 |
arybchik |
MFC r312866
sfxge(4): cleanup: remove unused txq_index TxQ control structure member
Sponsored by: Solarflare Communications, Inc.
|
#
312165 |
|
14-Jan-2017 |
arybchik |
MFC r311877
sfxge(4): avoid unnecessary mbuf data prefetch
Unnecessary prefetch just loads HW prefetcher and displaces other cache entries (which could be really useful).
If we parse mbuf for TSO early and use firmware-assisted TSO, we do not expect mbuf data access when we compose firmware-assisted TSO (v1 or v2) option descriptors. If packet header needs to be linearized or finally FATSO cannot be used because of, for example, too big header, we do not care about a bit more performance degradation because of prefetch absence (it is better to optimize more common case).
Sponsored by: Solarflare Communications, Inc.
|
#
311768 |
|
09-Jan-2017 |
arybchik |
MFC r311640
sfxge(4): allow DMA descs to cross 4k boundary on EF10
Siena has limitation on maximum byte count and 4k boundary crosssing (which is stricter than maximum byte count). EF10 has limitation on maximum byte count only.
Sponsored by: Solarflare Communications, Inc.
|
#
311092 |
|
02-Jan-2017 |
arybchik |
MFC r310810
sfxge(4): cleanup: check deferred packet list tunables once
Sponsored by: Solarflare Communications, Inc.
|
#
311091 |
|
02-Jan-2017 |
arybchik |
MFC r310770
sfxge(4): cleanup: clarify/unify variable name used for put-list length
get_count is used for get-list.
Sponsored by: Solarflare Communications, Inc.
|
#
310830 |
|
30-Dec-2016 |
arybchik |
MFC r310627
sfxge(4): do not limit driver RSS table to RSS channels max
Specification of entire RSS table in the driver allows to spread traffic more equally across CPUs/RSS channels if number of RSS channels is not power of 2.
Sponsored by: Solarflare Communications, Inc.
|
#
301989 |
|
17-Jun-2016 |
arybchik |
MFC r301607
sfxge(4): host byte order is required for IP ID in TSO descriptors
Submitted by: Artem V. Andreev <Artem.Andreev at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
301388 |
|
04-Jun-2016 |
arybchik |
MFC r300607
sfxge(4): cleanup: update copyright to 2016
Sponsored by: Solarflare Communications, Inc.
|
#
294390 |
|
20-Jan-2016 |
arybchik |
MFC r294077
sfxge: support FATSOv2
Reviewed by: gnn Sponsored by: Solarflare Communications, Inc.
|
#
293955 |
|
14-Jan-2016 |
arybchik |
MFC r291924
sfxge: switch to TxQ creation specific flags
It is better do not mix TxQ creation and receive event flags since only checksum flags are applicable to TxQ. Also it will allow to add a new TxQ creation specific flags.
Reviewed by: gnn Sponsored by: Solarflare Communications, Inc.
|
#
293933 |
|
14-Jan-2016 |
arybchik |
MFC r291584
sfxge: parse packets for TSO early in if_transmit
Submitted by: Artem V. Andreev <Artem.Andreev at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
292089 |
|
11-Dec-2015 |
arybchik |
sfxge: implement interface statistics shown by netstat
PR: 202907 Submitted by: Boris Misenov <Boris.Misenov at oktetlabs.ru> Reviewed by: gnn, philip Sponsored by: Solarflare Communications, Inc. Differential Revision: https://reviews.freebsd.org/D4317
|
#
284555 |
|
18-Jun-2015 |
arybchik |
MFC: r283514
sfxge: add 7xxx NICs family support
Support 7xxx adapters including firmware-assisted TSO and VLAN tagging:
- Solarflare Flareon Ultra 7000 series 10/40G adapters: - Solarflare SFN7042Q QSFP+ Server Adapter - Solarflare SFN7142Q QSFP+ Server Adapter
- Solarflare Flareon Ultra 7000 series 10G adapters: - Solarflare SFN7022F SFP+ Server Adapter - Solarflare SFN7122F SFP+ Server Adapter - Solarflare SFN7322F Precision Time Synchronization Server Adapter
- Solarflare Flareon 7000 series 10G adapters: - Solarflare SFN7002F SFP+ Server Adapter
Support utilities to configure adapters and update firmware.
The work is done by Solarflare developers (Andy Moreton, Andrew Lee and many others), Artem V. Andreev <Artem.Andreev at oktetlabs.ru> and me.
Sponsored by: Solarflare Communications, Inc.
|
#
283350 |
|
24-May-2015 |
arybchik |
MFC: r283278
sfxge: relax assertion to allow RST flag in TSO packets
Kernel under stress load, mixed MC reboot and sfupdate really generates TSO packet with RST flag. It will generate many TCP packets with RST flag set. May be RST flag should be set in the last segment only, but it could be dropped. So, it is safer to keep the flag in all packets to be sure that connection is reset.
Sponsored by: Solarflare Communications, Inc.
|
#
283214 |
|
21-May-2015 |
arybchik |
MFC: r283048
sfxge: fix overflow queue freeze
If TxQ lock is obtained, deferred packet list shold be serviced even if the packet addition fails because of overflow.
Without the patch freeze happens if: - queue is not blocked (i.e. completion does not trigger unblock and service) - put-list overflow (1024 entries) - sfxge_tx_packet_add() acquires TxQ lock just as it is released it in sfxge_tx_qdpl_service() on the second CPU but before pending check - sfxge_tx_packet_add() swizzles put-list to get-list, fails because of non-tcp get-list overflow and returns without packet list service - sfxge_tx_qdpl_service() on the second CPU checks that there are no pending packets in the put-list and returns
Other possible solution is to guaranee that maximum length of the put-list is less than maximum length of any get-list.
Sponsored by: Solarflare Communications, Inc.
|
#
283211 |
|
21-May-2015 |
arybchik |
MFC: r282998
sfxge: move mbuf free to sfxge_if_transmit()
It is a preparation to the next patch which will service packet queue even if packet addtion fails.
Sponsored by: Solarflare Communications, Inc.
|
#
283210 |
|
21-May-2015 |
arybchik |
MFC: r282997
sfxge: get rid of locked variable in sfxge_tx_packet_add()
Now each branch has one and only one possible TxQ lock state. It simplifies understanding of the code.
Sponsored by: Solarflare Communications, Inc.
|
#
283208 |
|
21-May-2015 |
arybchik |
MFC: r282942
sfxge: split sfxge_tx_qdpl_put() into *_locked() and *_unlocked()
It simplifies understanding of the sfxge_tx_packet_add() logic and avoids passing of 'locked' to called function.
Sponsored by: Solarflare Communications, Inc.
|
#
283205 |
|
21-May-2015 |
arybchik |
MFC: r282903
sfxge: advertise IPv6 Rx and Tx checksum offload support
Tx checksum offload may be enabled/disabled.
Sponsored by: Solarflare Communications, Inc.
|
#
281955 |
|
24-Apr-2015 |
hiren |
MFC r275358 r275483 r276982 - Removing M_FLOWID by hps@
r275358: Start process of removing the use of the deprecated "M_FLOWID" flag from the FreeBSD network code. The flag is still kept around in the "sys/mbuf.h" header file, but does no longer have any users. Instead the "m_pkthdr.rsstype" field in the mbuf structure is now used to decide the meaning of the "m_pkthdr.flowid" field. To modify the "m_pkthdr.rsstype" field please use the existing "M_HASHTYPE_XXX" macros as defined in the "sys/mbuf.h" header file.
This patch introduces new behaviour in the transmit direction. Previously network drivers checked if "M_FLOWID" was set in "m_flags" before using the "m_pkthdr.flowid" field. This check has now now been replaced by checking if "M_HASHTYPE_GET(m)" is different from "M_HASHTYPE_NONE". In the future more hashtypes will be added, for example hashtypes for hardware dedicated flows.
"M_HASHTYPE_OPAQUE" indicates that the "m_pkthdr.flowid" value is valid and has no particular type. This change removes the need for an "if" statement in TCP transmit code checking for the presence of a valid flowid value. The "if" statement mentioned above is now a direct variable assignment which is then later checked by the respective network drivers like before.
r275483: Remove M_FLOWID from SCTP code.
r276982: Remove no longer used "M_FLOWID" flag from mbuf.h and update the netisr manpage.
Note: The FreeBSD version has been bumped.
Reviewed by: hps, tuexen Sponsored by: Limelight Networks
|
#
280901 |
|
31-Mar-2015 |
arybchik |
MFC: r280807
sfxge: fix bug in TSO when a DMA segment has both header and data
Sponsored by: Solarflare Communications, Inc.
|
#
280613 |
|
25-Mar-2015 |
arybchik |
MFC: 280433
sfxge: cleanup: fix index variable type to match upper boundary type
Sponsored by: Solarflare Communications, Inc.
|
#
280607 |
|
25-Mar-2015 |
arybchik |
MFC: 280377
sfxge: add statistics for each Tx queue
Sponsored by: Solarflare Communications, Inc. Original Differential Revision: https://reviews.freebsd.org/D2082
|
#
280606 |
|
25-Mar-2015 |
arybchik |
MFC: 280376
sfxge: remove obsolete Tx non-multi queue support
Tx multi queue is added in FreeBSD 8.0. So, the changeset drops earlier versions support.
Sponsored by: Solarflare Communications, Inc. Original Differential Revision: https://reviews.freebsd.org/D2081
|
#
280604 |
|
25-Mar-2015 |
arybchik |
MFC: 280374
sfxge: assert either kernel or internal copy of interface flags
ioctl to put interface down sets ifp->if_flags which holds the intended administratively defined state and calls driver callback to apply it. When everything is done, driver updates internal copy of interface flags sc->if_flags which holds the operational state. So, transmit from Rx path is possible when interface is intended to be administratively down in accordance with ifp->if_flags, but not applied yet and the operational state is up in accordance with sc->if_flags.
Sponsored by: Solarflare Communications, Inc. Original Differential Revision: https://reviews.freebsd.org/D2075
|
#
280602 |
|
25-Mar-2015 |
arybchik |
MFC: 280163
sfxge: prefetch txq->common if TxQ is started only
Transmit may be called when TxQ is not started yet (i.e. txq->common is invalid). TxQ state is checked below when mbuf is processed and dropped if TxQ is not started.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280600 |
|
25-Mar-2015 |
arybchik |
MFC: 280161
sfxge: move deferred packet list statistics to dedicated node
It is done to structure sysctl and do not mix with Tx queue statistics to be added.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280596 |
|
25-Mar-2015 |
arybchik |
MFC: 279351
sfxge: expect required init_state on data path and in periodic calls
With the patch applied the number of instruction events is 1% less and number of mispredicted branch events is 5% less under multistream TCP traffic load close to line rate.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280592 |
|
25-Mar-2015 |
arybchik |
MFC: 279231
sfxge: add put-list high watermark
It is interesting to know how long put-list grows.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280585 |
|
25-Mar-2015 |
arybchik |
MFC: 279179
sfxge: DMA allocated memory is set to zeros because of BUS_DMA_ZERO flag
It is not required to set it to zeros once again.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280575 |
|
25-Mar-2015 |
arybchik |
MFC: 279147
sfxge: TxQ block level should use EFX_TXQ_LIMIT as maximum TxQ size
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280566 |
|
25-Mar-2015 |
arybchik |
MFC: 279144
sfxge: packet can't require more than n_dma_seg descriptors plus one
Use remaining number of DMA segment instead of maximum number in mapping when checking space for one more TSO segment packet.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280563 |
|
25-Mar-2015 |
arybchik |
MFC: 279141
sfxge: style fixes and cleanup
Sync endif comment with conditional. BOOTROM and SIENA_BOOTROM are the same, but highlight that it is Siena. Restore commented out assertion. Sync comments with out-of-tree driver.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280557 |
|
25-Mar-2015 |
arybchik |
MFC: 279094
sfxge: more accurate calculation of maximum number of TSO segments
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280556 |
|
25-Mar-2015 |
arybchik |
MFC: 279080
sfxge: reap Tx descriptors on unblock
Otherwise when processing finally comes to efx_tx_qdesc_post() it could be insufficient space between reaped and added to post pending descriptors.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280553 |
|
25-Mar-2015 |
arybchik |
MFC: 279077
sfxge: style fixes
Use nitem() to get number of array elements. Remove unused define. Use TAB to indent.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280547 |
|
25-Mar-2015 |
arybchik |
MFC: 279046
sfxge: handle fragmented TCP header in mbuf
TCP header is fragmented in the case of VLAN tagged IPv6 traffic without HW VLAN tagging.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280538 |
|
25-Mar-2015 |
arybchik |
MFC: 278938
sfxge: add driver context member with number of transmit queues
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280537 |
|
25-Mar-2015 |
arybchik |
MFC: 278937
sfxge: add TCP segment size to sfxge_tso_state
It avoids access to m_pkthdr when TSO packet is started and also makes tso_start_new_packet() function smaller.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280536 |
|
25-Mar-2015 |
arybchik |
MFC: 278841
sfxge: flush all Tx queues from if_qflush
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280532 |
|
25-Mar-2015 |
arybchik |
MFC: 278837
sfxge: remove inline specifiers
Now compiler does not need any help. The patch does not change generated code.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280530 |
|
25-Mar-2015 |
arybchik |
MFC: 278836
sfxge: remove used sfxge_tso_state member dma_seg_i
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280528 |
|
25-Mar-2015 |
arybchik |
MFC: 278835
sfxge: remove full_packet_size from sfxge_tso_state
It makes sfxge_tso_state smaller and even makes tso_start_new_packet() few bytes smaller. Data used to calculate packet size are used nearby, so it should be no problems with cache etc.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280527 |
|
25-Mar-2015 |
arybchik |
MFC: 278833
sfxge: remove unused variable
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280526 |
|
25-Mar-2015 |
arybchik |
MFC: 278255
sfxge: Add statistics for partially dropped TSO packets
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280524 |
|
25-Mar-2015 |
arybchik |
MFC: 278250
sfxge: make lock names unique
Lock name should include interface name. Tx queue and event queue lock name should include queue number.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280522 |
|
25-Mar-2015 |
arybchik |
MFC: 278221
sfxge: Add macros to init, destroy, acquire, release and assert locks
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280519 |
|
25-Mar-2015 |
arybchik |
MFC: 277895
sfxge: Separate software Tx queue limit for non-TCP traffic
Add separate software Tx queue limit for non-TCP traffic to make total limit higher and avoid local drops of TCP packets because of no backpressure. There is no point to make non-TCP limit high since without backpressure UDP stream easily overflows any sensible limit.
Split early drops statistics since it is better to have separate counter for each drop reason to make it unabmiguous.
Add software Tx queue high watermark. The information is very useful to understand how big queues grow under traffic load.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280513 |
|
25-Mar-2015 |
arybchik |
MFC: 277889
sfxge: Add evq argument to sfxge_tx_qcomplete()
It removes necessity to get evq pointer by its index in soft context.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280512 |
|
25-Mar-2015 |
arybchik |
MFC: 277888
sfxge: fixed TSO code to cope with VLAN headers
Submitted by: Artem V. Andreev <Artem.Andreev at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280505 |
|
25-Mar-2015 |
arybchik |
MFC: 272331
Support tunable to control Tx deferred packet list limits
Also increase default for Tx queue get-list limit. Too small limit results in TCP packets drops especiall when many streams are running simultaneously. Put list may be kept small enough since it is just a temporary location if transmit function can't get Tx queue lock.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280504 |
|
25-Mar-2015 |
arybchik |
MFC: 272330
The patch allows to check state of the software Tx queues at run time.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280502 |
|
25-Mar-2015 |
arybchik |
MFC: 272328
Make size of Tx and Rx rings configurable
Required size of event queue is calculated now.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280501 |
|
25-Mar-2015 |
arybchik |
MFC: 272325
cleanup: code style fixes
Remove trailing whitespaces and tabs. Enclose value in return statements in parentheses. Use tabs after #define. Do not skip comparison with 0/NULL in boolean expressions.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280499 |
|
25-Mar-2015 |
arybchik |
MFC: 263649
sfxge: limit software Tx queue size.
Previous implementation limits put queue size only (when Tx lock can't be acquired), but get queue may grow unboundedly which results in mbuf pools exhaustion and latency growth.
Submitted by: Andrew Rybchenko <Andrew.Rybchenko at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
280497 |
|
25-Mar-2015 |
arybchik |
MFC: 263332
Add counter for Tx errors returned from if_transmit.
Submitted by: Boris Misenov <Boris.Misenov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
280496 |
|
25-Mar-2015 |
arybchik |
MFC: 263297
Return error when packet is dropped because of link down.
Submitted by: Boris Misenov <Boris.Misenov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
265884 |
|
11-May-2014 |
gnn |
MFC: 263302, 264461, 264772
263302: fix mbuf leak if it does not fit in software queue
264461: Commit various fixes for the SolarFlare drivers, in particular this set of patches fixes support for systems with > 32 cores.
Details include
sfxge: RXQ index (not label) comes from FW in flush done/failed events
Change the second argument name of the efx_rxq_flush_done_ev_t and efx_rxq_flush_failed_ev_t prototypes to highlight that RXQ index (not label) comes from FW in flush done and failed events.
sfxge: TXQ index (not label) comes from FW in flush done event
Change the second argument name of the efx_txq_flush_done_ev_t prototype to highlight that TXQ index (not label) comes from FW in flush done event.
sfxge: use TXQ type as label to support more than 32 TXQs
There are 3 TXQs in event queue 0 and 1 TXQ (with TCP/UDP checksum offload) in all other event queues.
264772: Check that port is started when MAC filter is set
The MAC filter set may be called without softc_lock held in the case of SIOCADDMULTI and SIOCDELMULTI ioctls. The ioctl handler checks IFF_DRV_RUNNING flag which implies port started, but it is not guaranteed to remain. softc_lock shared lock can't be held in the case of these ioctls processing, since it results in failure where kernel complains that non-sleepable lock is held in sleeping thread.
Both problems are repeatable on LAG with LACP proto bring up.
Submitted by: Andrew Rybchenko <Andrew.Rybchenko at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
284555 |
|
18-Jun-2015 |
arybchik |
MFC: r283514
sfxge: add 7xxx NICs family support
Support 7xxx adapters including firmware-assisted TSO and VLAN tagging:
- Solarflare Flareon Ultra 7000 series 10/40G adapters: - Solarflare SFN7042Q QSFP+ Server Adapter - Solarflare SFN7142Q QSFP+ Server Adapter
- Solarflare Flareon Ultra 7000 series 10G adapters: - Solarflare SFN7022F SFP+ Server Adapter - Solarflare SFN7122F SFP+ Server Adapter - Solarflare SFN7322F Precision Time Synchronization Server Adapter
- Solarflare Flareon 7000 series 10G adapters: - Solarflare SFN7002F SFP+ Server Adapter
Support utilities to configure adapters and update firmware.
The work is done by Solarflare developers (Andy Moreton, Andrew Lee and many others), Artem V. Andreev <Artem.Andreev at oktetlabs.ru> and me.
Sponsored by: Solarflare Communications, Inc.
|
#
283350 |
|
24-May-2015 |
arybchik |
MFC: r283278
sfxge: relax assertion to allow RST flag in TSO packets
Kernel under stress load, mixed MC reboot and sfupdate really generates TSO packet with RST flag. It will generate many TCP packets with RST flag set. May be RST flag should be set in the last segment only, but it could be dropped. So, it is safer to keep the flag in all packets to be sure that connection is reset.
Sponsored by: Solarflare Communications, Inc.
|
#
283214 |
|
21-May-2015 |
arybchik |
MFC: r283048
sfxge: fix overflow queue freeze
If TxQ lock is obtained, deferred packet list shold be serviced even if the packet addition fails because of overflow.
Without the patch freeze happens if: - queue is not blocked (i.e. completion does not trigger unblock and service) - put-list overflow (1024 entries) - sfxge_tx_packet_add() acquires TxQ lock just as it is released it in sfxge_tx_qdpl_service() on the second CPU but before pending check - sfxge_tx_packet_add() swizzles put-list to get-list, fails because of non-tcp get-list overflow and returns without packet list service - sfxge_tx_qdpl_service() on the second CPU checks that there are no pending packets in the put-list and returns
Other possible solution is to guaranee that maximum length of the put-list is less than maximum length of any get-list.
Sponsored by: Solarflare Communications, Inc.
|
#
283211 |
|
21-May-2015 |
arybchik |
MFC: r282998
sfxge: move mbuf free to sfxge_if_transmit()
It is a preparation to the next patch which will service packet queue even if packet addtion fails.
Sponsored by: Solarflare Communications, Inc.
|
#
283210 |
|
21-May-2015 |
arybchik |
MFC: r282997
sfxge: get rid of locked variable in sfxge_tx_packet_add()
Now each branch has one and only one possible TxQ lock state. It simplifies understanding of the code.
Sponsored by: Solarflare Communications, Inc.
|
#
283208 |
|
21-May-2015 |
arybchik |
MFC: r282942
sfxge: split sfxge_tx_qdpl_put() into *_locked() and *_unlocked()
It simplifies understanding of the sfxge_tx_packet_add() logic and avoids passing of 'locked' to called function.
Sponsored by: Solarflare Communications, Inc.
|
#
283205 |
|
21-May-2015 |
arybchik |
MFC: r282903
sfxge: advertise IPv6 Rx and Tx checksum offload support
Tx checksum offload may be enabled/disabled.
Sponsored by: Solarflare Communications, Inc.
|
#
281955 |
|
24-Apr-2015 |
hiren |
MFC r275358 r275483 r276982 - Removing M_FLOWID by hps@
r275358: Start process of removing the use of the deprecated "M_FLOWID" flag from the FreeBSD network code. The flag is still kept around in the "sys/mbuf.h" header file, but does no longer have any users. Instead the "m_pkthdr.rsstype" field in the mbuf structure is now used to decide the meaning of the "m_pkthdr.flowid" field. To modify the "m_pkthdr.rsstype" field please use the existing "M_HASHTYPE_XXX" macros as defined in the "sys/mbuf.h" header file.
This patch introduces new behaviour in the transmit direction. Previously network drivers checked if "M_FLOWID" was set in "m_flags" before using the "m_pkthdr.flowid" field. This check has now now been replaced by checking if "M_HASHTYPE_GET(m)" is different from "M_HASHTYPE_NONE". In the future more hashtypes will be added, for example hashtypes for hardware dedicated flows.
"M_HASHTYPE_OPAQUE" indicates that the "m_pkthdr.flowid" value is valid and has no particular type. This change removes the need for an "if" statement in TCP transmit code checking for the presence of a valid flowid value. The "if" statement mentioned above is now a direct variable assignment which is then later checked by the respective network drivers like before.
r275483: Remove M_FLOWID from SCTP code.
r276982: Remove no longer used "M_FLOWID" flag from mbuf.h and update the netisr manpage.
Note: The FreeBSD version has been bumped.
Reviewed by: hps, tuexen Sponsored by: Limelight Networks
|
#
280901 |
|
31-Mar-2015 |
arybchik |
MFC: r280807
sfxge: fix bug in TSO when a DMA segment has both header and data
Sponsored by: Solarflare Communications, Inc.
|
#
280613 |
|
25-Mar-2015 |
arybchik |
MFC: 280433
sfxge: cleanup: fix index variable type to match upper boundary type
Sponsored by: Solarflare Communications, Inc.
|
#
280607 |
|
25-Mar-2015 |
arybchik |
MFC: 280377
sfxge: add statistics for each Tx queue
Sponsored by: Solarflare Communications, Inc. Original Differential Revision: https://reviews.freebsd.org/D2082
|
#
280606 |
|
25-Mar-2015 |
arybchik |
MFC: 280376
sfxge: remove obsolete Tx non-multi queue support
Tx multi queue is added in FreeBSD 8.0. So, the changeset drops earlier versions support.
Sponsored by: Solarflare Communications, Inc. Original Differential Revision: https://reviews.freebsd.org/D2081
|
#
280604 |
|
25-Mar-2015 |
arybchik |
MFC: 280374
sfxge: assert either kernel or internal copy of interface flags
ioctl to put interface down sets ifp->if_flags which holds the intended administratively defined state and calls driver callback to apply it. When everything is done, driver updates internal copy of interface flags sc->if_flags which holds the operational state. So, transmit from Rx path is possible when interface is intended to be administratively down in accordance with ifp->if_flags, but not applied yet and the operational state is up in accordance with sc->if_flags.
Sponsored by: Solarflare Communications, Inc. Original Differential Revision: https://reviews.freebsd.org/D2075
|
#
280602 |
|
25-Mar-2015 |
arybchik |
MFC: 280163
sfxge: prefetch txq->common if TxQ is started only
Transmit may be called when TxQ is not started yet (i.e. txq->common is invalid). TxQ state is checked below when mbuf is processed and dropped if TxQ is not started.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280600 |
|
25-Mar-2015 |
arybchik |
MFC: 280161
sfxge: move deferred packet list statistics to dedicated node
It is done to structure sysctl and do not mix with Tx queue statistics to be added.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280596 |
|
25-Mar-2015 |
arybchik |
MFC: 279351
sfxge: expect required init_state on data path and in periodic calls
With the patch applied the number of instruction events is 1% less and number of mispredicted branch events is 5% less under multistream TCP traffic load close to line rate.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280592 |
|
25-Mar-2015 |
arybchik |
MFC: 279231
sfxge: add put-list high watermark
It is interesting to know how long put-list grows.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280585 |
|
25-Mar-2015 |
arybchik |
MFC: 279179
sfxge: DMA allocated memory is set to zeros because of BUS_DMA_ZERO flag
It is not required to set it to zeros once again.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280575 |
|
25-Mar-2015 |
arybchik |
MFC: 279147
sfxge: TxQ block level should use EFX_TXQ_LIMIT as maximum TxQ size
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280566 |
|
25-Mar-2015 |
arybchik |
MFC: 279144
sfxge: packet can't require more than n_dma_seg descriptors plus one
Use remaining number of DMA segment instead of maximum number in mapping when checking space for one more TSO segment packet.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280563 |
|
25-Mar-2015 |
arybchik |
MFC: 279141
sfxge: style fixes and cleanup
Sync endif comment with conditional. BOOTROM and SIENA_BOOTROM are the same, but highlight that it is Siena. Restore commented out assertion. Sync comments with out-of-tree driver.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280557 |
|
25-Mar-2015 |
arybchik |
MFC: 279094
sfxge: more accurate calculation of maximum number of TSO segments
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280556 |
|
25-Mar-2015 |
arybchik |
MFC: 279080
sfxge: reap Tx descriptors on unblock
Otherwise when processing finally comes to efx_tx_qdesc_post() it could be insufficient space between reaped and added to post pending descriptors.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280553 |
|
25-Mar-2015 |
arybchik |
MFC: 279077
sfxge: style fixes
Use nitem() to get number of array elements. Remove unused define. Use TAB to indent.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280547 |
|
25-Mar-2015 |
arybchik |
MFC: 279046
sfxge: handle fragmented TCP header in mbuf
TCP header is fragmented in the case of VLAN tagged IPv6 traffic without HW VLAN tagging.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280538 |
|
25-Mar-2015 |
arybchik |
MFC: 278938
sfxge: add driver context member with number of transmit queues
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280537 |
|
25-Mar-2015 |
arybchik |
MFC: 278937
sfxge: add TCP segment size to sfxge_tso_state
It avoids access to m_pkthdr when TSO packet is started and also makes tso_start_new_packet() function smaller.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280536 |
|
25-Mar-2015 |
arybchik |
MFC: 278841
sfxge: flush all Tx queues from if_qflush
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280532 |
|
25-Mar-2015 |
arybchik |
MFC: 278837
sfxge: remove inline specifiers
Now compiler does not need any help. The patch does not change generated code.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280530 |
|
25-Mar-2015 |
arybchik |
MFC: 278836
sfxge: remove used sfxge_tso_state member dma_seg_i
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280528 |
|
25-Mar-2015 |
arybchik |
MFC: 278835
sfxge: remove full_packet_size from sfxge_tso_state
It makes sfxge_tso_state smaller and even makes tso_start_new_packet() few bytes smaller. Data used to calculate packet size are used nearby, so it should be no problems with cache etc.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280527 |
|
25-Mar-2015 |
arybchik |
MFC: 278833
sfxge: remove unused variable
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor), glebius
|
#
280526 |
|
25-Mar-2015 |
arybchik |
MFC: 278255
sfxge: Add statistics for partially dropped TSO packets
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280524 |
|
25-Mar-2015 |
arybchik |
MFC: 278250
sfxge: make lock names unique
Lock name should include interface name. Tx queue and event queue lock name should include queue number.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280522 |
|
25-Mar-2015 |
arybchik |
MFC: 278221
sfxge: Add macros to init, destroy, acquire, release and assert locks
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280519 |
|
25-Mar-2015 |
arybchik |
MFC: 277895
sfxge: Separate software Tx queue limit for non-TCP traffic
Add separate software Tx queue limit for non-TCP traffic to make total limit higher and avoid local drops of TCP packets because of no backpressure. There is no point to make non-TCP limit high since without backpressure UDP stream easily overflows any sensible limit.
Split early drops statistics since it is better to have separate counter for each drop reason to make it unabmiguous.
Add software Tx queue high watermark. The information is very useful to understand how big queues grow under traffic load.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280513 |
|
25-Mar-2015 |
arybchik |
MFC: 277889
sfxge: Add evq argument to sfxge_tx_qcomplete()
It removes necessity to get evq pointer by its index in soft context.
Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280512 |
|
25-Mar-2015 |
arybchik |
MFC: 277888
sfxge: fixed TSO code to cope with VLAN headers
Submitted by: Artem V. Andreev <Artem.Andreev at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc. Approved by: gnn (mentor)
|
#
280505 |
|
25-Mar-2015 |
arybchik |
MFC: 272331
Support tunable to control Tx deferred packet list limits
Also increase default for Tx queue get-list limit. Too small limit results in TCP packets drops especiall when many streams are running simultaneously. Put list may be kept small enough since it is just a temporary location if transmit function can't get Tx queue lock.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280504 |
|
25-Mar-2015 |
arybchik |
MFC: 272330
The patch allows to check state of the software Tx queues at run time.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280502 |
|
25-Mar-2015 |
arybchik |
MFC: 272328
Make size of Tx and Rx rings configurable
Required size of event queue is calculated now.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280501 |
|
25-Mar-2015 |
arybchik |
MFC: 272325
cleanup: code style fixes
Remove trailing whitespaces and tabs. Enclose value in return statements in parentheses. Use tabs after #define. Do not skip comparison with 0/NULL in boolean expressions.
Submitted by: Andrew Rybchenko <arybchenko at solarflare.com> Sponsored by: Solarflare Communications, Inc.
|
#
280499 |
|
25-Mar-2015 |
arybchik |
MFC: 263649
sfxge: limit software Tx queue size.
Previous implementation limits put queue size only (when Tx lock can't be acquired), but get queue may grow unboundedly which results in mbuf pools exhaustion and latency growth.
Submitted by: Andrew Rybchenko <Andrew.Rybchenko at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
280497 |
|
25-Mar-2015 |
arybchik |
MFC: 263332
Add counter for Tx errors returned from if_transmit.
Submitted by: Boris Misenov <Boris.Misenov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
280496 |
|
25-Mar-2015 |
arybchik |
MFC: 263297
Return error when packet is dropped because of link down.
Submitted by: Boris Misenov <Boris.Misenov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|
#
265884 |
|
11-May-2014 |
gnn |
MFC: 263302, 264461, 264772
263302: fix mbuf leak if it does not fit in software queue
264461: Commit various fixes for the SolarFlare drivers, in particular this set of patches fixes support for systems with > 32 cores.
Details include
sfxge: RXQ index (not label) comes from FW in flush done/failed events
Change the second argument name of the efx_rxq_flush_done_ev_t and efx_rxq_flush_failed_ev_t prototypes to highlight that RXQ index (not label) comes from FW in flush done and failed events.
sfxge: TXQ index (not label) comes from FW in flush done event
Change the second argument name of the efx_txq_flush_done_ev_t prototype to highlight that TXQ index (not label) comes from FW in flush done event.
sfxge: use TXQ type as label to support more than 32 TXQs
There are 3 TXQs in event queue 0 and 1 TXQ (with TCP/UDP checksum offload) in all other event queues.
264772: Check that port is started when MAC filter is set
The MAC filter set may be called without softc_lock held in the case of SIOCADDMULTI and SIOCDELMULTI ioctls. The ioctl handler checks IFF_DRV_RUNNING flag which implies port started, but it is not guaranteed to remain. softc_lock shared lock can't be held in the case of these ioctls processing, since it results in failure where kernel complains that non-sleepable lock is held in sleeping thread.
Both problems are repeatable on LAG with LACP proto bring up.
Submitted by: Andrew Rybchenko <Andrew.Rybchenko at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc.
|