Re: Problem with dev_kfree_skb_any() in 2.6.0

From: David S. Miller
Date: Mon Dec 29 2003 - 23:57:56 EST


On Mon, 29 Dec 2003 23:09:14 -0500
Jeff Garzik <jgarzik@xxxxxxxxx> wrote:

> Not really... pretty much _all_ TX queue packet freeing occurs inside
> an irq handler and inside the driver spinlock. Further, we don't want
> to reinvent some sort of "queue skb for freeing" code in every driver.

There is one important detail not mentioned.

If we let the TX free occur in cpu IRQ disabled context, the
BH to actually do the work will occur as some indeterminate
time in the future after the top level IRQ spinlock release
occurs.

Unlike local_bh_enable(), local_irq_enable() does not run
softirq work. Similarly when comparing IRQ handler return
(which also runs softirq work if pending).

This is the most important reason why the suggested change is wrong.
-
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/