#
296373 |
|
04-Mar-2016 |
marius |
- Copy stable/10@296371 to releng/10.3 in preparation for 10.3-RC1 builds. - Update newvers.sh to reflect RC1. - Update __FreeBSD_version to reflect 10.3. - Update default pkg(8) configuration to use the quarterly branch.
Approved by: re (implicit) |
#
286274 |
|
04-Aug-2015 |
np |
MFC r284988, r285220, and r285221.
r284988: cxgbe(4): request an automatic tx update when a netmap tx queue idles. The NIC tx queues already do this.
r285220: cxgbe(4): Do not override the the global defaults for congestion drops. The hw.cxgbe.cong_drop knob is not affected by this change because the driver sets up congestion drop on a per-queue basis.
r285221: cxgbe(4): Add a new knob that controls the congestion response of netmap rx queues. The default is to drop rather than backpressure.
This decouples the congestion settings of NIC and netmap rx queues.
|
#
286273 |
|
04-Aug-2015 |
np |
MFC r284718:
cxgbe: get_fl_payload returns a header mbuf when successful.
|
#
284093 |
|
06-Jun-2015 |
np |
MFC r283858 and r284007.
r283858: cxgbe: set minimum burst size when fetching freelist buffers to 128B.
r284007: cxgbe: set the minimum burst size when fetching fl buffers to 128B for netmap rx queues too. This should have gone in as part of r283858.
|
#
284052 |
|
06-Jun-2015 |
np |
MFC r276480, r276485, r276498, r277225, r277226, r277227, r277230, r277637, and r283149 (by emaste@).
r276485 is the real change here, the rest deal with the fallout of mp_ring's reliance on 64b atomics.
Use the incorrectly spelled 'eigth' from struct pkthdr in this branch instead of MFC'ing r261733, which would have renamed the field of a public structure in a -STABLE branch. ---
r276480: Temporarily unplug cxgbe(4) from !amd64 builds.
r276485: cxgbe(4): major tx rework.
a) Front load as much work as possible in if_transmit, before any driver lock or software queue has to get involved.
b) Replace buf_ring with a brand new mp_ring (multiproducer ring). This is specifically for the tx multiqueue model where one of the if_transmit producer threads becomes the consumer and other producers carry on as usual. mp_ring is implemented as standalone code and it should be possible to use it in any driver with tx multiqueue. It also has: - the ability to enqueue/dequeue multiple items. This might become significant if packet batching is ever implemented. - an abdication mechanism to allow a thread to give up writing tx descriptors and have another if_transmit thread take over. A thread that's writing tx descriptors can end up doing so for an unbounded time period if a) there are other if_transmit threads continuously feeding the sofware queue, and b) the chip keeps up with whatever the thread is throwing at it. - accurate statistics about interesting events even when the stats come at the expense of additional branches/conditional code.
The NIC txq lock is uncontested on the fast path at this point. I've left it there for synchronization with the control events (interface up/down, modload/unload).
c) Add support for "type 1" coalescing work request in the normal NIC tx path. This work request is optimized for frames with a single item in the DMA gather list. These are very common when forwarding packets. Note that netmap tx in cxgbe already uses these "type 1" work requests.
d) Do not request automatic cidx updates every 32 descriptors. Instead, request updates via bits in individual work requests (still every 32 descriptors approximately). Also, request an automatic final update when the queue idles after activity. This means NIC tx reclaim is still performed lazily but it will catch up quickly as soon as the queue idles. This seems to be the best middle ground and I'll probably do something similar for netmap tx as well.
e) Implement a faster tx path for WRQs (used by TOE tx and control queues, _not_ by the normal NIC tx). Allow work requests to be written directly to the hardware descriptor ring if room is available. I will convert t4_tom and iw_cxgbe modules to this faster style gradually.
r276498: cxgbe(4): remove buf_ring specific restriction on the txq size.
r277225: Make cxgbe(4) buildable with the gcc in base.
r277226: Allow cxgbe(4) to be built on i386. Driver attach will succeed only on a subset of i386 systems.
r277227: Plug cxgbe(4) back into !powerpc && !arm builds, instead of building it on amd64 only.
r277230: Build cxgbe(4) on powerpc64 too.
r277637: Make sure the compiler flag to get cxgbe(4) to compile with gcc is used only when gcc is being used. This is what r277225 should have been.
|
#
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
|
#
281264 |
|
08-Apr-2015 |
np |
MFC r279092:
cxgbe(4): there is no need to force an "unimplemented" panic needlessly. The calls to free_nm_txq and free_nm_rxq are made just a few lines prior to the panic.
|
#
281253 |
|
08-Apr-2015 |
np |
MFC r279243-r279246, r279251, r279691, r279700, and r279701.
r279243: cxgbe(4): request an automatic tx update when a netmap txq idles.
r279244: cxgbe(4): wait for the hardware to catch up before destroying a netmap txq.
r279245: cxgbe(4): do not set the netmap rxq interrupts on a hair-trigger.
r279246: cxgbe(4): set up congestion management for netmap rx queues.
The hw.cxgbe.cong_drop knob controls the response of the chip when netmap queues are congested.
r279251: cxgbe(4): allow tx hardware checksumming on the netmap interface.
It is disabled by default but users can set IFCAP_TXCSUM on the netmap ifnet (ifconfig ncxl0 txcsum) to override netmap and force the hardware to calculate and insert proper IP and L4 checksums in outbound frames.
r279691: cxgbe(4): provide the correct size of freelists associated with netmap rx queues to the chip. This will fix many problems with native netmap rx on ncxl/ncxgbe interfaces.
r279700: cxgbe(4): knobs to experiment with the interrupt coalescing timer for netmap rx queues, and the "batchiness" of rx updates sent to the chip.
These knobs will probably become per-rxq in the near future and will be documented only after their final form is decided.
r279701: cxgbe(4): experimental rx packet sink for netmap queues. This is not intended for general use.
|
#
281212 |
|
07-Apr-2015 |
np |
MFC r275539, r275554.
r275539: cxgbe(4): Allow for different pad and pack boundaries for different adapters. Set the pack boundary for T5 cards to be the same as the PCIe max payload size. The chip likes it this way.
In this revision the driver allocate rx buffers that align on both boundaries. This is not a strict requirement and a followup commit will switch the driver to a more relaxed allocation strategy.
r275554: cxgbe(4): allow the driver to use rx buffers that do not end on a pack boundary.
|
#
270297 |
|
21-Aug-2014 |
np |
MFC r266571, r266757, r268536, r269076, r269364, r269366, r269411, r269413, r269428, r269440, r269537, r269644, r269731, and the cxgbe portion of r270063.
r266571: cxgbe(4): Remove stray if_up from the code that creates the tracing ifnet.
r266757: cxgbe(4): netmap support for Terminator 5 (T5) based 10G/40G cards. Netmap gets its own hardware-assisted virtual interface and won't take over or disrupt the "normal" interface in any way. You can use both simultaneously.
For kernels with DEV_NETMAP, cxgbe(4) carves out an ncxl<N> interface (note the 'n' prefix) in the hardware to accompany each cxl<N> interface. These two ifnet's per port share the same wire but really are separate interfaces in the hardware and software. Each gets its own L2 MAC addresses (unicast and multicast), MTU, checksum caps, etc. You should run netmap on the 'n' interfaces only, that's what they are for.
With this, pkt-gen is able to transmit > 45Mpps out of a single 40G port of a T580 card. 2 port tx is at ~56Mpps total (28M + 28M) as of now. Single port receive is at 33Mpps but this is very much a work in progress. I expect it to be closer to 40Mpps once done. In any case the current effort can already saturate multiple 10G ports of a T5 card at the smallest legal packet size. T4 gear is totally untested.
trantor:~# ./pkt-gen -i ncxl0 -f tx -D 00:07:43:ab:cd:ef 881.952141 main [1621] interface is ncxl0 881.952250 extract_ip_range [275] range is 10.0.0.1:0 to 10.0.0.1:0 881.952253 extract_ip_range [275] range is 10.1.0.1:0 to 10.1.0.1:0 881.962540 main [1804] mapped 334980KB at 0x801dff000 Sending on netmap:ncxl0: 4 queues, 1 threads and 1 cpus. 10.0.0.1 -> 10.1.0.1 (00:00:00:00:00:00 -> 00:07:43:ab:cd:ef) 881.962562 main [1882] Sending 512 packets every 0.000000000 s 881.962563 main [1884] Wait 2 secs for phy reset 884.088516 main [1886] Ready... 884.088535 nm_open [457] overriding ifname ncxl0 ringid 0x0 flags 0x1 884.088607 sender_body [996] start 884.093246 sender_body [1064] drop copy 885.090435 main_thread [1418] 45206353 pps (45289533 pkts in 1001840 usec) 886.091600 main_thread [1418] 45322792 pps (45375593 pkts in 1001165 usec) 887.092435 main_thread [1418] 45313992 pps (45351784 pkts in 1000834 usec) 888.094434 main_thread [1418] 45315765 pps (45406397 pkts in 1002000 usec) 889.095434 main_thread [1418] 45333218 pps (45378551 pkts in 1001000 usec) 890.097434 main_thread [1418] 45315247 pps (45405877 pkts in 1002000 usec) 891.099434 main_thread [1418] 45326515 pps (45417168 pkts in 1002000 usec) 892.101434 main_thread [1418] 45333039 pps (45423705 pkts in 1002000 usec) 893.103434 main_thread [1418] 45324105 pps (45414708 pkts in 1001999 usec) 894.105434 main_thread [1418] 45318042 pps (45408723 pkts in 1002001 usec) 895.106434 main_thread [1418] 45332430 pps (45377762 pkts in 1001000 usec) 896.107434 main_thread [1418] 45338072 pps (45383410 pkts in 1001000 usec) ...
r268536: cxgbe(4): Add an iSCSI softc to the adapter structure.
r269076: Some hooks in cxgbe(4) for the offloaded iSCSI driver.
r269364: Improve compliance with style.Makefile(5).
r269366: List one file per line in the Makefiles. This makes it easier to read diffs when a file is added or removed.
r269411: cxgbe(4): minor optimizations in ingress queue processing.
Reorganize struct sge_iq. Make the iq entry size a compile time constant. While here, eliminate RX_FL_ESIZE and use EQ_ESIZE directly.
r269413: cxgbe(4): Fix an off by one error when looking for the BAR2 doorbell address of an egress queue.
r269428: cxgbe(4): some optimizations in freelist handling.
r269440: cxgbe(4): Remove an unused version of t4_enable_vi.
r269537: cxgbe(4): Do not run any sleepable code in the SIOCSIFFLAGS handler when IFF_PROMISC or IFF_ALLMULTI is being flipped. bpf(4) holds its global mutex around ifpromisc in at least the bpf_dtor path.
r269644: cxgbe(4): Let caller specify whether it's ok to sleep in t4_sched_config and t4_sched_params.
r269731: cxgbe(4): Do not poke T4-only registers on a T5 (and vice versa).
Relnotes: Yes (native netmap support for Chelsio T4/T5 cards)
|
#
269356 |
|
31-Jul-2014 |
np |
MFC r268971 and r269032.
r268971: Simplify r267600, there's no need to distinguish between allocated and inlined mbufs.
r269032: cxgbe(4): Keep track of the clusters that have to be freed by the custom free routine (rxb_free) in the driver. Fail MOD_UNLOAD with EBUSY if any such cluster has been handed up to the kernel but hasn't been freed yet. This prevents a panic later when the cluster finally needs to be freed but rxb_free is gone from the kernel.
|
#
269082 |
|
25-Jul-2014 |
np |
MFC r268640 and r268989.
r268640: Allow multi-byte reads in the private CHELSIO_T4_GET_I2C ioctl. The firmware allows up to 48B to be read this way but the driver limits itself to 8B at a time to remain compatible with old cxgbetool binaries.
r268989: Add missing newline to an error message.
|
#
267849 |
|
25-Jun-2014 |
np |
MFC r267757:
cxgbe(4): Update the bundled T4 and T5 firmwares to versions 1.11.27.0
Obtained from: Chelsio
|
#
267764 |
|
23-Jun-2014 |
np |
MFC r267689:
Consider the total number of descriptors available (and not just those that are ready to be reclaimed) when deciding whether to resume tx after a stall.
|
#
267694 |
|
21-Jun-2014 |
np |
MFC r267600:
cxgbe(4): Fix bug in the fast rx buffer recycle path. In some cases rx buffers were getting recycled when they should have been left alone.
|
#
267244 |
|
08-Jun-2014 |
np |
MFC r267082: cxgbe(4): Properly account for the freelist buffers used when returning early from service_iq due to a budget restriction. This fixes a potential rx hang when using INTx.
|
#
266965 |
|
02-Jun-2014 |
np |
MFC r266908:
cxgbe(4): Fix a NULL dereference when the very first call to get_scatter_segment() in get_fl_payload() fails. While here, fix the code to adjust fl_bufs_used when a failure occurs for any other scatter segment.
|
#
265426 |
|
06-May-2014 |
np |
MFC r259382:
Read card capabilities after firmware initialization, instead of setting them up as part of firmware initialization (which the driver gets to do only if it's the master driver).
Read the range of tids available for the ETHOFLD functionality if it's enabled.
New is_ftid() and is_etid() functions to test whether a tid falls within the range of filter tids or ETHOFLD tids respectively.
|
#
265425 |
|
06-May-2014 |
np |
MFC r263317, r263412, and r263451.
r263317: cxgbe(4): significant rx rework.
- More flexible cluster size selection, including the ability to fall back to a safe cluster size (PAGE_SIZE from zone_jumbop by default) in case an allocation of a larger size fails. - A single get_fl_payload() function that assembles the payload into an mbuf chain for any kind of freelist. This replaces two variants: one for freelists with buffer packing enabled and another for those without. - Buffer packing with any sized cluster. It was limited to 4K clusters only before this change. - Enable buffer packing for TOE rx queues as well. - Statistics and tunables to go with all these changes. The driver's man page will be updated separately.
r263412: cxgbe(4): if_iqdrops statistic should include tunnel congestion drops.
r263451: cxgbe(4): man page updates.
|
#
265421 |
|
06-May-2014 |
np |
MFC r260210 (by adrian@): Add an option to enable or disable the small RX packet copying that is done to improve performance of small frames.
When doing RX packing, the RX copying isn't necessarily required.
|
#
265410 |
|
06-May-2014 |
np |
MFC r261533, r261536, r261537, and r263457.
r261533: cxgbe(4): Use the port's tx channel to identify it to t4_clr_port_stats.
r261536: cxgbe(4): The T5 allows for a different freelist starvation threshold for queues with buffer packing. Use the correct value to calculate a freelist's low water mark.
r261537: cxgbe(4): Use the rx channel map (instead of the tx channel map) as the congestion channel map.
r263457: cxgbe(4): Recognize the "spider" configuration where a T5 card's 40G QSFP port is presented as 4 distinct 10G SFP+ ports to the driver.
|
#
259142 |
|
09-Dec-2013 |
np |
MFC r257654, r257772, r258441, r258689, r258698, r258879, r259048, and r259103.
r257654: cxgbe(4): Exclude MPS_RPLC_MAP_CTL (0x11114) from the register dump. Turns out it's a write-only register with strange side effects on read.
r257772: cxgbe(4): Tidy up the display for payload memory statistics (pm_stats).
r258441: cxgbe(4): update the internal list of device features.
r258689: Disable an assertion that relies on some code[1] that isn't in HEAD yet.
r258698: cxgbetool: "modinfo" command to display SFP+ module information.
r258879: cxgbe(4): T4_SET_SCHED_CLASS and T4_SET_SCHED_QUEUE ioctls to program scheduling classes in the chip and to bind tx queue(s) to a scheduling class respectively. These can be used for various kinds of tx traffic throttling (to force selected tx queues to drain at a fixed Kbps rate, or a % of the port's total bandwidth, or at a fixed pps rate, etc.).
r259048: Two new cxgbetool subcommands to set up scheduler classes and to bind them to NIC queues.
r259103: cxgbe(4): save a copy of the RSS map for each port for the driver's use.
|
#
256794 |
|
20-Oct-2013 |
np |
MFC r256477:
cxgbe(4): Store the log2 of the # of doorbells per BAR2 page for both ingress and egress queues, and for both T4 and T5. These values are used by the T4/T5 iWARP driver.
Approved by: re (glebius)
|
#
256281 |
|
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
#
256131 |
|
07-Oct-2013 |
dim |
Fix kernel build on amd64 after r256118, since the machine/md_var.h header is not implicitly included there. So include it explicitly.
Approved by: re (delphij) Pointy hat to: dim MFC after: 3 days X-MFC-With: r256118
|
#
256118 |
|
07-Oct-2013 |
dim |
Remove redundant declaration of cpu_clflush_line_size in sys/dev/cxgbe/t4_sge.c, to silence a gcc warning.
Approved by: re (gjb) MFC after: 3 days
|
#
255052 |
|
30-Aug-2013 |
np |
Fix the sysctl that displays whether buffer packing is enabled or not.
|
#
255050 |
|
30-Aug-2013 |
np |
Implement support for rx buffer packing. Enable it by default for T5 cards.
This is a T4 and T5 chip feature which lets the chip deliver multiple Ethernet frames in a single buffer. This is more efficient within the chip, in the driver, and reduces wastage of space in rx buffers.
- Always allocate rx buffers from the jumbop zone, no matter what the MTU is. Do not use the normal cluster refcounting mechanism. - Reserve space for an mbuf and a refcount in the cluster itself and let the chip DMA multiple frames in the rest. - Use the embedded mbuf for the first frame and allocate mbufs on the fly for any additional frames delivered in the cluster. Each of these mbufs has a reference on the underlying cluster.
|
#
255015 |
|
29-Aug-2013 |
np |
Merge r254386 from user/np/cxl_tuning. Add an INET|INET6 check missing in said revision.
r254386: Flush inactive LRO entries periodically.
|
#
255005 |
|
28-Aug-2013 |
np |
Add hooks in base cxgbe(4) for the iWARP upper-layer driver. Update a couple of assertions in the TOE driver as well.
|
#
254727 |
|
23-Aug-2013 |
np |
There is no need to hold the freelist lock around alloc/free of software descriptors. This also silences WITNESS warnings when the software descriptors are allocated with M_WAITOK.
MFC after: 1 week
|
#
253889 |
|
02-Aug-2013 |
np |
Fix previous commit (r253873). "cong" has one bit per channel but the congestion channel map has 1 nibble per channel. So bits wxyz need to be blown up into 000w000x000y000z.
|
#
253873 |
|
01-Aug-2013 |
np |
Set up congestion manager context properly for T5 based cards.
MFC after: 3 days (will check with re@)
|
#
253829 |
|
31-Jul-2013 |
np |
Display SGE tunables in the sysctl tree.
dev.t5nex.0.fl_pktshift: payload DMA offset in rx buffer (bytes) dev.t5nex.0.fl_pad: payload pad boundary (bytes) dev.t5nex.0.spg_len: status page size (bytes) dev.t5nex.0.cong_drop: congestion drop setting
Discussed with: scottl
|
#
253691 |
|
26-Jul-2013 |
np |
Add support for packet-sniffing tracers to cxgbe(4). This works with all T4 and T5 based cards and is useful for analyzing TSO, LRO, TOE, and for general purpose monitoring without tapping any cxgbe or cxl ifnet directly.
Tracers on the T4/T5 chips provide access to Ethernet frames exactly as they were received from or transmitted on the wire. On transmit, a tracer will capture a frame after TSO segmentation, hw VLAN tag insertion, hw L3 & L4 checksum insertion, etc. It will also capture frames generated by the TCP offload engine (TOE traffic is normally invisible to the kernel). On receive, a tracer will capture a frame before hw VLAN extraction, runt filtering, other badness filtering, before the steering/drop/L2-rewrite filters or the TOE have had a go at it, and of course before sw LRO in the driver.
There are 4 tracers on a chip. A tracer can trace only in one direction (tx or rx). For now cxgbetool will set up tracers to capture the first 128B of every transmitted or received frame on a given port. This is a small subset of what the hardware can do. A pseudo ifnet with the same name as the nexus driver (t4nex0 or t5nex0) will be created for tracing. The data delivered to this ifnet is an additional copy made inside the chip. Normal delivery to cxgbe<n> or cxl<n> will be made as usual.
/* watch cxl0, which is the first port hanging off t5nex0. */ # cxgbetool t5nex0 tracer 0 tx0 (watch what cxl0 is transmitting) # cxgbetool t5nex0 tracer 1 rx0 (watch what cxl0 is receiving) # cxgbetool t5nex0 tracer list # tcpdump -i t5nex0 <== all that cxl0 sees and puts on the wire
If you were doing TSO, a tcpdump on cxl0 may have shown you ~64K "frames" with no L3/L4 checksum but this will show you the frames that were actually transmitted.
/* all done */ # cxgbetool t5nex0 tracer 0 disable # cxgbetool t5nex0 tracer 1 disable # cxgbetool t5nex0 tracer list # ifconfig t5nex0 destroy
|
#
252728 |
|
04-Jul-2013 |
np |
- Make note of interface MTU change if the rx queues exist, and not just when the interface is up. - Add a tunable to control the TOE's rx coalesce feature (enabled by default as it always has been). Consider the interface MTU or the coalesce size when deciding which cluster zone to use to fill the offload rx queue's free list. The tunable is: dev.{t4nex,t5nex}.<N>.toe.rx_coalesce
MFC after: 1 day
|
#
252715 |
|
04-Jul-2013 |
np |
Ring the egress queue's doorbell as soon as there are 8 or more descriptors ready to be processed.
MFC after: 1 day
|
#
252705 |
|
04-Jul-2013 |
np |
- Read all TP parameters in one place. - Read the filter mode, calculate various shifts, and use them properly during active open (in select_ntuple).
MFC after: 1 day
|
#
249392 |
|
11-Apr-2013 |
np |
Cosmetic change (s/wrwc/wcwr/;s/WRWC/WCWR/).
MFC after: 3 days.
|
#
249391 |
|
11-Apr-2013 |
np |
Auto-reduce the holdoff timers that are greater than the maximum value allowed by the hardware.
MFC after: 3 days
|
#
248925 |
|
30-Mar-2013 |
np |
cxgbe(4): Add support for Chelsio's Terminator 5 (aka T5) ASIC. This includes support for the NIC and TOE features of the 40G, 10G, and 1G/100M cards based on the T5.
The ASIC is mostly backward compatible with the Terminator 4 so cxgbe(4) has been updated instead of writing a brand new driver. T5 cards will show up as cxl (short for cxlgb) ports attached to the t5nex bus driver.
Sponsored by: Chelsio
|
#
247291 |
|
26-Feb-2013 |
np |
cxgbe(4): Ask the card's firmware to pad up tiny CPLs by encapsulating them in a firmware message if it is able to do so. This works out better for one of the FIFOs in the chip.
MFC after: 5 days
|
#
247062 |
|
20-Feb-2013 |
np |
cxgbe(4): Assume that CSUM_TSO in the transmit path implies CSUM_IP and CSUM_TCP too. They are all set explicitly by the kernel usually.
While here, fix an unrelated bug where hardware L4 checksum calculation was accidentally disabled for some IPv6 packets.
Reported by: alfred@ MFC after: 3 days
|
#
246093 |
|
29-Jan-2013 |
np |
Provide a statistic to track the number of drops in each of the port's txq's buf_ring. The aggregate for all the queues of a port is already provided in ifnet->if_snd.ifq_drops.
MFC after: 3 days.
|
#
243857 |
|
04-Dec-2012 |
glebius |
Mechanically substitute flags from historic mbuf allocator with malloc(9) flags in sys/dev.
|
#
241493 |
|
12-Oct-2012 |
np |
Use global knob in the TP_PARA_REG3 register to disable congestion drops if the user has chosen this behaviour.
MFC after: 3 days
|
#
241398 |
|
10-Oct-2012 |
np |
There is no need to report the same error twice.
MFC after: 3 days
|
#
241397 |
|
10-Oct-2012 |
np |
Remove unused item. cxgbe's rx queue's lock was removed a long time ago.
MFC after: 3 days
|
#
239341 |
|
16-Aug-2012 |
np |
Initialize various DDP parameters in the main cxgbe(4) driver:
- Setup multiple DDP page sizes. When the driver attempts DDP it will try to combine physically contiguous pages into regions of these sizes.
- Set the indicate size such that the payload carried in the indicate can be copied in the header mbuf (and the 16K rx buffer can be recycled).
- Set DDP threshold to the max payload that the chip will coalesce and deliver to the driver (this is ~16K by default, which is also why the offload rx queue is backed by 16K buffers). If the chip is able to coalesce up to the max it's allowed to, it's a good sign that the peer is transmitting in bulk without any TCP PSH.
MFC after: 2 weeks
|
#
239336 |
|
16-Aug-2012 |
np |
Allow for a different handler for each type of firmware message.
MFC after: 2 weeks
|
#
239266 |
|
15-Aug-2012 |
np |
The size of the buffers in an Ethernet freelist has to be higher than the interface's MTU. Initialize such freelists with correct values.
This wasn't a problem for common MTUs (1500 and 9000) as the buffers (2048 and 9216 in size) happened to have enough spare room. I ran into it when playing around with unusual MTUs.
MFC after: 2 weeks
|
#
239258 |
|
14-Aug-2012 |
np |
Convert some fixed parameters to tunables (with reasonable default values).
- cong_drop specifies what to do on congestion: nothing, backpressure, or drop. - fl_pktshift specifies the padding before Ethernet payload. - fl_pad specifies the boundary upto which to pad Ethernet payload. - spg_len controls the length of the status page.
MFC after: 2 weeks
|
#
238313 |
|
09-Jul-2012 |
np |
Fix a bug in code that calculates the number of the first interrupt vector for a port. This affected the gigabit ports of T422 cards (the ones with 2x10G ports and 2x1G ports).
MFC after: will check with re@
|
#
237831 |
|
30-Jun-2012 |
np |
- Assign (don't OR) the CSUM_XXX bits to csum_flags in the rx checksum code. - Fix TSO/TSO4 mixup. - Add IFCAP_LINKSTATE to the available/enabled capabilities.
|
#
237819 |
|
29-Jun-2012 |
np |
cxgbe(4): support for IPv6 TSO and LRO.
Submitted by: bz (this is a modified version of that patch)
|
#
237799 |
|
29-Jun-2012 |
np |
cxgbe(4): support for IPv6 hardware checksumming (rx and tx).
|
#
237512 |
|
23-Jun-2012 |
np |
Better way to determine the status page length and rx pad boundary.
|
#
237463 |
|
22-Jun-2012 |
np |
Do not allocate extra vectors when adapter is not TOE capable (or toecaps have been disallowed by the user).
+ one very minor unrelated cleanup in t4_sge.c
|
#
237436 |
|
22-Jun-2012 |
np |
cxgbe(4): update to firmware interface 1.5.2.0; updates to shared code.
|
#
237263 |
|
19-Jun-2012 |
np |
- Updated TOE support in the kernel.
- Stateful TCP offload drivers for Terminator 3 and 4 (T3 and T4) ASICs. These are available as t3_tom and t4_tom modules that augment cxgb(4) and cxgbe(4) respectively. The cxgb/cxgbe drivers continue to work as usual with or without these extra features.
- iWARP driver for Terminator 3 ASIC (kernel verbs). T4 iWARP in the works and will follow soon.
Build-tested with make universe.
30s overview ============ What interfaces support TCP offload? Look for TOE4 and/or TOE6 in the capabilities of an interface: # ifconfig -m | grep TOE
Enable/disable TCP offload on an interface (just like any other ifnet capability): # ifconfig cxgbe0 toe # ifconfig cxgbe0 -toe
Which connections are offloaded? Look for toe4 and/or toe6 in the output of netstat and sockstat: # netstat -np tcp | grep toe # sockstat -46c | grep toe
Reviewed by: bz, gnn Sponsored by: Chelsio communications. MFC after: ~3 months (after 9.1, and after ensuring MFC is feasible)
|
#
234833 |
|
30-Apr-2012 |
np |
Change the default to not use packet counters to generate rx interrupts. Rely solely on the timer based mechanism.
Update man page to reflect this change.
MFC after: 1 week
|
#
228561 |
|
16-Dec-2011 |
np |
Many updates to cxgbe(4)
- Device configuration via plain text config file. Also able to operate when not attached to the chip as the master driver.
- Generic "work request" queue that serves as the base for both ctrl and ofld tx queues.
- Generic interrupt handler routine that can process any event on any kind of ingress queue (via a dispatch table).
- A couple of new driver ioctls. cxgbetool can now install a firmware to the card ("loadfw" command) and can read the card's memory ("memdump" and "tcb" commands).
- Lots of assorted information within dev.t4nex.X.misc.* This is primarily for debugging and won't show up in sysctl -a.
- Code to manage the L2 tables on the chip.
- Updates to cxgbe(4) man page to go with the tunables that have changed.
- Updates to the shared code in common/
- Updates to the driver-firmware interface (now at fw 1.4.16.0)
MFC after: 1 month
|
#
228491 |
|
14-Dec-2011 |
np |
Do not clobber the ingress queue's congestion setting.
MFC after: 1 month
|
#
222973 |
|
11-Jun-2011 |
np |
- driver ioctl to get SGE context for any given queue. - sysctls to display the context id, cidx, and pidx of all kinds of queues.
MFC after: 3 days
|
#
222701 |
|
04-Jun-2011 |
np |
Allow lazy fill up of freelists.
MFC after: 3 days
|
#
222513 |
|
30-May-2011 |
np |
Update to firmware interface 1.3.10
MFC after: 1 week
|
#
222510 |
|
30-May-2011 |
np |
- Specialized ingress queues that take interrupts for other ingress queues. Try to have a set of these per port when possible, fall back to sharing a common pool between all ports otherwise.
- One control queue per port (used to be one per hardware channel).
- t4_eth_rx now handles Ethernet rx only.
- sysctls to display pidx/cidx for some queues.
MFC after: 1 week
|
#
222085 |
|
18-May-2011 |
np |
- Enable per-channel congestion notification. - Enable PCIe relaxed ordering for all egress queues and rx data buffers.
MFC after: 3 days
|
#
221911 |
|
14-May-2011 |
np |
sysctl that displays the absolute queue id of an rxq.
|
#
221477 |
|
05-May-2011 |
np |
T4 packet timestamps.
Reference code that shows how to get a packet's timestamp out of cxgbe(4). Disabled by default because we don't have a standard way today to pass this information up the stack.
The timestamp is 60 bits wide and each increment represents 1 tick of the T4's core clock. As an example, the timestamp granularity is ~4.4ns for this card:
# sysctl dev.t4nex.0.core_clock dev.t4nex.0.core_clock: 228125
MFC after: 1 week
|
#
221474 |
|
05-May-2011 |
np |
T4 packet filtering/steering.
- Enable 5-tuple and every-packet lookup.
- Setup the default filter mode to allow filtering/steering based on IP protocol, ingress port, inner VLAN ID, IP frag, FCoE, and MPS match type; all combined together. You can also filter based on MAC index, Ethernet type, IP TOS/IPv6 Traffic Class, and outer VLAN ID but you'll have to modify the default filter mode and exclude some of the match-fields in it.
IPv4 and IPv6 SIP/DIP/SPORT/DPORT are always available in all filter rules.
- Add driver ioctls to get/set the global filter mode.
- Add driver ioctls to program and delete hardware filters. A couple of the "switch" actions that rewrite Ethernet and VLAN information and switch the packet out of another port may not work as the L2 code is not yet in place. Everything else, including all "drop" and "pass" rules with RSS or absolute qid, should work.
Obtained from: Chelsio Communications
|
#
221464 |
|
04-May-2011 |
np |
Always re-arm an iq's interrupt before leaving the handler.
MFC after: 1 week
|
#
220905 |
|
20-Apr-2011 |
np |
Ring the freelist doorbell from within refill_fl. While here, fix a bug that could have allowed the hardware pidx to reach the cidx even though the freelist isn't empty. (Haven't actually seen this but it was there waiting to happen..)
MFC after: 1 week
|
#
220897 |
|
20-Apr-2011 |
np |
Use the correct free routine when destroying a control queue.
X-MFC after: r220873
|
#
220873 |
|
19-Apr-2011 |
np |
- Move all Ethernet specific items from sge_eq to sge_txq. sge_eq is now a suitable base for all kinds of egress queues.
- Add control queues (sge_ctrlq) and allocate one of these per hardware channel. They can be used to program filters and steer traffic (and more).
MFC after: 1 week
|
#
220649 |
|
15-Apr-2011 |
np |
Fix a couple of bad races that can occur when a cxgbe interface is taken down. The ingress queue lock was unused and has been removed as part of these changes.
- An in-flight egress update from the SGE must be handled before the queue that requested it is destroyed. Wait for the update to arrive.
- Interrupt handlers must stop processing rx events for a queue before the queue is destroyed. Events that have not yet been processed should be ignored once the queue disappears.
MFC after: 1 week
|
#
220643 |
|
14-Apr-2011 |
np |
There is no need to request a tx credit flush if such a request is already pending.
MFC after: 3 days
|
#
219944 |
|
24-Mar-2011 |
np |
Do not over-allocate MSI interrupts for the case where each ingress queue has its own interrupt. If the exact number that we need is not a power of 2 and we're using MSI, then switch to interrupt multiplexing.
While here, replace the magic numbers with something more readable.
MFC after: 3 days
|
#
219883 |
|
22-Mar-2011 |
np |
Fix an error while constructing the table that maps context id -> egress queue.
MFC after: 1 day
|
#
219392 |
|
08-Mar-2011 |
np |
cxgbe shouldn't directly know of the UMA zones where network buffers come from.
MFC after: 1 week
|
#
219293 |
|
05-Mar-2011 |
np |
There is no need to hold an ingress queue's lock while processing its descriptors.
MFC after: 1 week
|
#
219292 |
|
05-Mar-2011 |
np |
Calculate how many descriptors can be reclaimed before calling reclaim_tx_descs
|
#
219290 |
|
05-Mar-2011 |
np |
Tweaks for rx:
- everything related to LRO should be in #ifdef INET blocks - reorder sge_iq's fields so that the most frequently used are all together - pull all rx code into t4_intr_data directly - let go of the ingress queue lock when passing up data - refill the freelist only if it is short of at least 32 buffers
|
#
219289 |
|
05-Mar-2011 |
np |
Store the ifnet rather than the port_info in each txq and rxq struct.
MFC after: 1 week
|
#
219288 |
|
05-Mar-2011 |
np |
A txpkts work request should have a valid FID.
MFC after: 1 week
|
#
219286 |
|
05-Mar-2011 |
np |
Resume tx immediately in response to an SGE egress update from the hardware.
MFC after: 1 week
|
#
218792 |
|
18-Feb-2011 |
np |
cxgbe(4) - NIC driver for Chelsio T4 (Terminator 4) based 10Gb/1Gb adapters.
MFC after: 3 weeks
|