Re: [PATCH v6 0/2] Ethernet drivers for WIZnet chips

From: Mike Sinkovsky
Date: Wed Apr 04 2012 - 01:58:39 EST


03.04.2012 18:29, Eric Dumazet ÐÐÐÐÑÐÐ:
On Tue, 2012-04-03 at 18:15 +0600, Mike Sinkovsky wrote:
03.04.2012 17:39, Eric Dumazet ÐÐÐÐÑÐÐ:
On Tue, 2012-04-03 at 16:58 +0600, Mike Sinkovsky wrote:
Based on original driver from chip manufacturer, but nearly full rewite.
Tested and used in production with Blackfin BF531 embedded processor.

Signed-off-by: Mike Sinkovsky<msink@xxxxxxxxxxxxx>
---
v6:
- remove (S0_TX_FSR< skb->len) check in TX handler, it doesn't work
anyway. Chip can transmit only one frame with MTU 1500 at a time,
and tx buffer size is bigger.

So what happens if XXX frames are given to start_xmit() in a flood ?

You removed any flow control, how can this work ?

Device has an infinite queue ?

As I understand from datasheet, device doesn't have tx queue at all.
It have tx buffer, processor must save transmitted frame to it, and then
save SEND command to command register. When transmission completed,
SENDOK bit in interrupt register will be set to '1', and interrupt
handler will be called.

So, according to datasheet, driver must stop queue in start_xmit()
routine, and wake in interrupt handler of SENDOK bit.
I tried this, and it basically works, but SOMETIMES, very rare, I see
tx_timeout().

And without any flow control - driver works perfectly.
Weird, don't know why.

Really this should be fixed, since your driver makes qdisc flow control
impossible (unless adding a rate limiter like HTB/CBQ)

You probably had a race on your xmit routine, and interrupt routine.

You need proper synchronization : A spinlock to make this easy, or a
smart barrier game.

I can at least make it configurable from Kconfig with default 'y', and disable for our boards.
Would it be acceptable?

About races - I can't see any, in this very simple procedure.
But maybe I missed something..


--
Mike

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/