History log of /freebsd-10-stable/sys/dev/sfxge/sfxge_tx.c
Revision Date Author Comments
# 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.