freebsd-dev/sys
Pyun YongHyeon 65c12bf571 r184610 changed the way how TX frames are handled on AX88178 and
AX88772 controllers. ASIX added a new feature for AX88178/AX88772
controllers which allows combining multiple TX frames into a single
big frame. This was to overcome one of USB limitation where it
can't generate more than 8k interrupts/sec which in turn means USB
ethernet controllers can not send more than 8k packets per second.
Using ASIX's feature greatly enhanced TX performance(more than 3~4
times) compared to 7.x driver. However it seems r184610 removed
boundary checking for buffered frames which in turn caused
instability issues under certain conditions. In addition, using
ASIX's feature triggered another issue which made USB controller
hang under certain conditions. Restarting ethernet controller
didn't help under this hang condition and unplugging and replugging
the controller was the only solution. I believe there is a silicon
bug in TX frame combining feature on AX88178/AX88772 controllers.

To address these issues, reintroduce the boundary checking for both
AX88178 and AX88772 after copying a frame to USB buffer and do not
use ASIX's multiple frame combining feature. Instead, use USB
controller's multi-frame transmit capability to enhance TX
performance as suggested by Hans[1].
This should fix a long standing axe(4) instability issues reported
on AX88772 and AX88178 controllers. While I'm here remove
unnecessary TX frame length check since upper stack always
guarantee the size of a frame to be less than MCLBYTES.

Special thanks to Derrick Brashear who tried numerous patches
during last 4 months and waited real fix with patience. Without
this enthusiastic support, patience and H/W donation I couldn't fix
it since I was not able to trigger the issue on my box.

Suggested by:	hselasky [1]
Tested by:	Derrick Brashear (shadow <> gmail dot com>
H/W donated by:	Derrick Brashear (shadow <> gmail dot com>
PR:		usb/140883
2010-12-08 01:24:05 +00:00
..
amd64 Merge sys/amd64/amd64/tsc.c and sys/i386/i386/tsc.c and move to sys/x86/x86. 2010-12-08 00:09:24 +00:00
arm Fix double ;; 2010-12-06 10:24:06 +00:00
boot Give a bit of a hint of the failure (read != expected) but don't make 2010-11-25 03:16:31 +00:00
bsm
cam Add Serial Management Protocol (SMP) passthrough support to CAM. 2010-11-30 22:39:46 +00:00
cddl Undo r216230: the interaction between saved ashift in metadata and 2010-12-07 15:24:08 +00:00
compat Implement NdisGetRoutineAddress and MmGetSystemRoutineAddress used in 2010-12-06 20:54:53 +00:00
conf Merge sys/amd64/amd64/tsc.c and sys/i386/i386/tsc.c and move to sys/x86/x86. 2010-12-08 00:09:24 +00:00
contrib Merge Cavium Octeon SDK 2.0 Simple Executive; this brings some fixes and new 2010-11-28 08:18:16 +00:00
crypto Remove DEBUG sections. 2010-11-27 15:41:44 +00:00
ddb One more use for _SIG_VALID. 2010-07-12 10:18:10 +00:00
dev r184610 changed the way how TX frames are handled on AX88178 and 2010-12-08 01:24:05 +00:00
fs Replace pointer to "struct uidinfo" with pointer to "struct ucred" 2010-12-02 17:37:16 +00:00
gdb there must be only one SYSINIT with SI_SUB_RUN_SCHEDULER+SI_ORDER_ANY order 2010-09-30 17:05:23 +00:00
geom Don't warn if a partition appears not to be aligned on a track boundary. 2010-12-07 20:46:11 +00:00
gnu Remove prtactive variable and related printf()s in the vop_inactive 2010-11-19 21:17:34 +00:00
i386 Merge sys/amd64/amd64/tsc.c and sys/i386/i386/tsc.c and move to sys/x86/x86. 2010-12-08 00:09:24 +00:00
ia64 Revert r216134. This checkin broke platforms where bus_space are macros: 2010-12-03 07:09:23 +00:00
isa bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
kern Add a KASSERT to make it obvious when fork_norfproc() is to be called, 2010-12-06 19:15:38 +00:00
kgssapi
libkern Add support for asterisk characters when filling in the GELI password 2010-11-14 14:12:43 +00:00
mips Fix double ;; 2010-12-06 10:24:06 +00:00
modules Import a clean-room implementation of the experimental H-TCP congestion control 2010-12-02 06:40:21 +00:00
net Adds IFF_CANTCONFIG to IFF_CANTCHANGE that it shouldn't happen through 2010-12-07 20:31:04 +00:00
net80211 The meshid element is memcpy()'ed into se_meshid if included in either 2010-11-22 19:01:47 +00:00
netatalk
netgraph Simplify ng_pipe locking model by relying on the netgraph framework 2010-11-24 16:02:58 +00:00
netinet Use correct field to track statistics counting error as bad header length. 2010-12-05 01:09:48 +00:00
netinet6 Loosen the locking in nd6-free() again after r216022 to avoid 2010-12-07 22:43:29 +00:00
netipsec After some off-list discussion, revert a number of changes to the 2010-11-22 19:32:54 +00:00
netipx
netnatm
netncp Switch to our preferred 2-clause BSD license. 2010-04-07 16:50:38 +00:00
netsmb Switch to our preferred 2-clause BSD license. 2010-04-07 16:50:38 +00:00
nfs Fix the type of the 3rd argument for nm_getinfo so that it works 2010-10-19 11:55:58 +00:00
nfsclient Remove prtactive variable and related printf()s in the vop_inactive 2010-11-19 21:17:34 +00:00
nfsserver Fix a bug in r214049. The nvp == vp case shall be handled specially 2010-11-05 21:13:16 +00:00
nlm Modify the NFS clients and the NLM so that the NLM can be used 2010-10-19 00:20:00 +00:00
opencrypto Let cryptosoft(4) add its pseudo-device with a specific unit number and its 2010-11-14 13:09:32 +00:00
pc98 Revert r216134. This checkin broke platforms where bus_space are macros: 2010-12-03 07:09:23 +00:00
pci Remove standard PCI configuration space register definitions. 2010-11-08 22:10:51 +00:00
powerpc Switch which software-reserved bit is used to designate a locked PTE 2010-12-05 01:17:53 +00:00
rpc Fix the krpc so that it can handle NFSv3,UDP mounts with a read/write 2010-10-13 00:57:14 +00:00
security Fix typos. 2010-11-09 10:59:09 +00:00
sparc64 Revert r216134. This checkin broke platforms where bus_space are macros: 2010-12-03 07:09:23 +00:00
sun4v Revert r216134. This checkin broke platforms where bus_space are macros: 2010-12-03 07:09:23 +00:00
sys Bump __FreeBSD_version for the addition of log2(). This is mainly for the 2010-12-05 22:12:07 +00:00
teken Use proper bounds checking on VPA. 2010-12-05 10:15:23 +00:00
tools Add an extra comment to the SDT probes definition. This allows us to get 2010-08-22 11:18:57 +00:00
ufs Journal start looks up .sujournal file by doing lookup on the root dvp. 2010-12-01 21:19:11 +00:00
vm Fix comment intentation. 2010-12-04 17:41:58 +00:00
x86 Merge sys/amd64/amd64/tsc.c and sys/i386/i386/tsc.c and move to sys/x86/x86. 2010-12-08 00:09:24 +00:00
xdr
xen Postpone the unmasking of event channels (aka. interrupts) until after 2010-12-07 23:33:20 +00:00
Makefile Add lex and yacc sources to things cscope'd. 2010-11-21 03:58:11 +00:00