spidernet: improve interrupt handling
authorIshizaki Kou <kou.ishizaki@toshiba.co.jp>
Mon, 9 Jul 2007 23:17:42 +0000 (18:17 -0500)
committerJeff Garzik <jeff@garzik.org>
Tue, 10 Jul 2007 16:22:30 +0000 (12:22 -0400)
commit7a627558214664f0e071b2652fc37e4d7d3dce32
treeccaa169e29df4f8ea82716a2489ac7451edf6efc
parentb8a1fcee26126b566d9e28ba80c643a7a10543eb
spidernet: improve interrupt handling

We intend this patch to improve spidernet interrupt handling to be
more strict.  We had following problem and this patch solves it.

 -when CONFIG_DEBUG_SHIRQ=y, request_irq() calls handler().
 -when spider_net_open() is called, it calls request_irq() which calls
  spider_net_interrupt().
 -if some specific interrupt bit is set at this timing, it calls
  netif_rx_schedule() and spider_net_poll() is scheduled.
 -spider_net_open() calls netif_poll_enable() which clears the bit
  __LINK_STATE_RX_SCHED.
 -when spider_net_poll() is called, it calls netif_rx_complete() which
  causes BUG_ON() because __LINK_STATE_RX_SCHED is not set.

Signed-off-by: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/spider_net.c