Previously the tx housekeeping was done in a spin_lock_irqsave critical
section which causes irqs to be disabled during that time. Since the
housekeeping is already prepared to be scheduled as a tasklet process
the housekeeping only in softirq context and revise the locking between
the tx path and the housekeeping tasklet by using a normal spin_lock
which in most situations will be a NOP anyway.
This makes sure that interrupts are only disabled for a short time
since in the worst case the housekeeping might have to free up to 256
skbs.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
SVN-Revision: 29762
The skb_reserve call prior to DMA mapping the RX skb reduced the skb
data len by 2. To not allow DMA to write behind the skb we should pass
the correct skb data len to the device.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
SVN-Revision: 24123
Instead just drop the rx'ed frame silently and reuse the already
available buffer.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
SVN-Revision: 24122
Taking the ramips ethernet interface down and up again resulted in the
driver not receiving any frames anymore. Fix this by correctly disabling
interrupts in the hw on ifdown.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
SVN-Revision: 23243
Bridging between the ramips ethernet driver and rt2800pci was somewhat
broken. Frames received by the ethernet driver which were passed to the
wifi driver for transmission were sometimes corrupted or sent out with
huge delays.
The reason for this is the missing assignment of skb->tail in the ramips
ethernet driver's rx path resulting in skb->tail pointing to skb->data.
Since skb->tail is used by mac80211 it writes into skb->data which messes
up the frames content.
Fix this by using skb_put to correctly set skb->len and skb->tail.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
SVN-Revision: 22172