missing sent packets of via-rhine
hi!
i'v got some troubles with the via-rhine driver
resp. the via nic and hope someone can give me some hint.
the problem:
i'm sending some ethernet frames
from kernel to the nic (with dev_queue_xmit). everything seems to be ok,
/proc/net/dev lists all packets sent, but the target nic did not receive all
frames.
to exclude failures on the receiving station, i
used different receiving stations with different nics. allways the same -
missing frames.
sending frames out of user mode leads to no loss,
sending frames out of kernel mode with some timegap between two dev_queue_xmit
calls leads to no loss. just "fast" sending of frames leads to this
loss.
i compiled the via-rhine driver with highest
debug-level to check the problem in detail.
here is the debug output of
sending 10 frames, where just 6 frames were received at the destination
station:
eth0: VIA Rhine monitor tick, status 0000.
eth0:
Transmit frame #39 queued in slot 7.
eth0: Transmit frame #40 queued in slot
8.
eth0: Interrupt, status 0002.
Tx scavenge 7 status
00000000.
collisions: 0:0
Tx scavenge 8 status
00000000.
collisions: 0:0
eth0: exiting interrupt, status=0000.
eth0:
Transmit frame #41 queued in slot 9.
eth0: Transmit frame #42 queued in slot
10.
eth0: Transmit frame #43 queued in slot 11.
eth0: Transmit frame #44
queued in slot 12.
eth0: Interrupt, status 0002.
Tx scavenge 9
status 00000000.
collisions: 0:0
Tx scavenge 10 status
00000000.
collisions: 0:0
Tx scavenge 11 status 80000000.
eth0:
Interrupt, status 0002.
Tx scavenge 11 status 80000000.
eth0:
Interrupt, status 0002.
Tx scavenge 11 status 00000000.
collisions:
0:0
Tx scavenge 12 status 80000000.
eth0: exiting interrupt,
status=0000.
eth0: Interrupt, status 0002.
Tx scavenge 12 status
00000000.
collisions: 0:0
eth0: exiting interrupt, status=0000.
eth0:
Transmit frame #45 queued in slot 13.
eth0: Transmit frame #46 queued in slot
14.
eth0: Transmit frame #47 queued in slot 15.
eth0: Transmit frame #48
queued in slot 0.
eth0: Interrupt, status 0002.
Tx scavenge 13
status 00000000.
collisions: 0:0
Tx scavenge 14 status
00000000.
collisions: 0:0
Tx scavenge 15 status 80000000.
eth0:
exiting interrupt, status=0000.
eth0: Interrupt, status 0002.
Tx
scavenge 15 status 00000000.
collisions: 0:0
Tx scavenge 0 status
00000000.
collisions: 0:0
eth0: exiting interrupt, status=0000.
eth0:
VIA Rhine monitor tick, status 0000.
so as far as i can estimate this output (i do not
have technical documentation of the nic) everything looks right.
the status
of all 10 frames was set to 0. i guess this means "frame sent"
just frame 5
(frame 43 at slot 11 in the debug output) is a little bit confusing me. there is
an interrupt with status 0002 (TxDone) and the next frame in the ring buffer
still has the status DescOwn. ???
but it seams not serious to
me.
does anyone got an idea why i'm losing
frames?
a bug in the driver, or bug of the
nic?
thank you and best regards,
roman
Reply to: