we have written a linux network device driver with an ethernet interface, developed using the skeleton device driver. But now - with kernel 2.0.34 - we ran into a problem with the transmit handler. My question is: what should be done in the transmit handler if the device is not ready to transmit another packet?
1. Return a value != 0 and say "Hey kernel, requeue this packet! I can't send now!" ? The effect I saw then was that the machine locks up with interrupts disabled.
2. Return 0 and say "Ok kernel, I sent this packet (no one knows it's a lie)!" ? This works, but it seems not to be the perfect solution.
Do you have any ideas or seen similar problems? Is it possible that the kernel (ethernet device interface) has a bug in the skb queueing (queueing a skb with a link to itself and a _cli() is surely the kernels death)?
Michael Tross
mtross@compu-shack.com