| Summary: | xl0 network card (509B) fails on heavy traffic | ||
|---|---|---|---|
| Product: | Base System | Reporter: | yuri |
| Component: | alpha | Assignee: | freebsd-alpha (Nobody) <alpha> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | ||
| Priority: | Normal | ||
| Version: | Unspecified | ||
| Hardware: | Any | ||
| OS: | Any | ||
|
Description
yuri
2002-04-23 18:10:01 UTC
The message is mostly harmless. I see it only at a very high
packets/sec rate on my UP1000.
It may simply be a race if the card writes portions of xl_status
independantly (eg, updates the csum status, then marks it complete in
another DMA).
> "xl0: bad receive status -- packet dropped"
> dropped in log by if_xl driver when traffic is really
> heavy -- (download of huge file from LAN).
>
> might be endianness issue again since number of similar cards
> work on i386 platform.
Nonsense. The alpha and the i386 platform have the same byte order.
Also, xl_status is 32-bits, so the reads of it should be atomic from the
host's perspective.
If the card is doing the DMAs separately, then we
should be looking for XL_RXSTAT_UP_CMPLT (or XL_RXSTAT_UP_ERROR) explicitly.
Something like
while((rxstat = sc->xl_cdata.xl_rx_head->xl_ptr->xl_status) & (XL_RXSTAT_UP_ERROR|XL_RXSTAT_UP_CMPLT)) {
Drew
State Changed From-To: open->closed I just finished testing xl(4) on alpha and it works just fine, no errors/warnings. This was using netperf. |