Re: Today Linus redesigns the networking driver interface (was Re: tulip driver in ...)

Alan Cox (alan@lxorguk.ukuu.org.uk)
Sun, 20 Sep 1998 15:32:08 +0100 (BST)


> I don't think that's the case, I think it's the other bh routines being
> starved or something, so that while the clock is being updated, timers
> nerver occur because they occur in bottom half entries too (and are thus
> shut out if net_bh() runs forever).

net_bh gets starved. Which incidentally means your "process only so
many packets per net_bh run" proposal is unworkable. Since we never get
-into- net_bh we can't control there.

Flow control on interrupts has to be done on the hardware interrupt context
but probably only needs to be done for 100Mbit+ adapters. I've refined the
code a bit. Its actually doable in a 2.2 timescale. Viz..

In netif_rx insert

if(backlog.qlen >= netdev_flowcontrol_len)
{
if(dev->flow_control)
{
dev->flow_control(dev,1);
dev->flow_timer.expires=jiffies+netdev_backoff_time;
/* These two would be set up once at init .. */
dev->flow_timer.data=(long)dev;
dev->flow_timer.func=dev_flow_manager;
add_timer(&dev->flow_timer);
}
}

add

void dev_flow_manager(long cookie)
{
struct device *dev=(struct device *)cookie;
dev->flow_control(dev,0);
}

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