On 16-11-09 08:09 AM, Hayes Wang wrote: > Mark Lord [mailto:ml...@pobox.com] .. >> The MTU/MRU on this link is the standard 1500 bytes, so a pkt_len of 2045 >> isn't >> valid here. >> And the rx_desc values look an awful lot like the rx_data values that follow >> it. >> >> There's definitely more broken here than just TCP RX checksums. > > I don't think it is the issue of our hw. If it happens, windows or > other OS may have problems, too. It is like the memory issue described > in commit 990c9b347245("Merge branch 'r8152-fixes'"). It seems that > the data in memory is not same with the one from the device.
I am still doing long-term testing of various tweaks to the driver, and can now confirm that changing from kmalloc() to usb_alloc_coherent() vastly improves reliability, and re-enabling RX checksums works fine with that change. However, even with coherent URB buffers, I still see the occasional bad rx_desc: like, twice in 36 hours of continuous bashing at it. So having code in the driver to sanitize the rx_desc is essential. My current test code (shared with Hayes already) includes validation of various key fields of the rx_desc, and detects when the chip/driver/whatever gets confused. Hopefully r8152.c will get updated to take more care before trusting what it sees in the rx_desc fields. Cheers -- Mark Lord ml...@pobox.com