diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-10-16 20:44:59 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-10-16 20:44:59 -0400 |
commit | bcb5febb248f7cc1e4a39ff61507f6343ba1c594 (patch) | |
tree | c6e91a0b62b48e0a7609f955ec84d2c9e47dbc7f /drivers/net | |
parent | 2b0460b534f383eca744eb8fff66ec9f57e702b9 (diff) |
forcedeth: fix NAPI rx poll function
fix the forcedeth NAPI poll function to not emit this warning:
[ 186.635916] WARNING: at net/core/dev.c:2166 net_rx_action()
[ 186.641351] [<c060d9f5>] net_rx_action+0x145/0x1b0
[ 186.646191] [<c011d752>] __do_softirq+0x42/0x90
[ 186.650784] [<c011d7c6>] do_softirq+0x26/0x30
[ 186.655202] [<c011db48>] local_bh_enable+0x48/0xa0
[ 186.660055] [<c06023e0>] lock_sock_nested+0xa0/0xc0
[ 186.664995] [<c065da16>] tcp_recvmsg+0x16/0xbc0
[ 186.669588] [<c013e94b>] __generic_file_aio_write_nolock+0x27b/0x520
[ 186.676001] [<c0601d75>] sock_common_recvmsg+0x45/0x70
[ 186.681202] [<c05ff5df>] sock_aio_read+0x11f/0x140
[ 186.686054] [<c015c086>] do_sync_read+0xc6/0x110
[ 186.690735] [<c012b9b0>] autoremove_wake_function+0x0/0x40
[ 186.696280] [<c060dcfc>] net_tx_action+0x3c/0xe0
[ 186.700961] [<c015c9c2>] vfs_read+0x132/0x140
[ 186.705378] [<c015cd41>] sys_read+0x41/0x70
[ 186.709625] [<c0102b66>] sysenter_past_esp+0x5f/0x89
[ 186.714651] =======================
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/forcedeth.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index dae30b731342..2e708150b014 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
@@ -2268,13 +2268,13 @@ static int nv_rx_process(struct net_device *dev, int limit) | |||
2268 | { | 2268 | { |
2269 | struct fe_priv *np = netdev_priv(dev); | 2269 | struct fe_priv *np = netdev_priv(dev); |
2270 | u32 flags; | 2270 | u32 flags; |
2271 | u32 rx_processed_cnt = 0; | 2271 | int rx_work = 0; |
2272 | struct sk_buff *skb; | 2272 | struct sk_buff *skb; |
2273 | int len; | 2273 | int len; |
2274 | 2274 | ||
2275 | while((np->get_rx.orig != np->put_rx.orig) && | 2275 | while((np->get_rx.orig != np->put_rx.orig) && |
2276 | !((flags = le32_to_cpu(np->get_rx.orig->flaglen)) & NV_RX_AVAIL) && | 2276 | !((flags = le32_to_cpu(np->get_rx.orig->flaglen)) & NV_RX_AVAIL) && |
2277 | (rx_processed_cnt++ < limit)) { | 2277 | (rx_work < limit)) { |
2278 | 2278 | ||
2279 | dprintk(KERN_DEBUG "%s: nv_rx_process: flags 0x%x.\n", | 2279 | dprintk(KERN_DEBUG "%s: nv_rx_process: flags 0x%x.\n", |
2280 | dev->name, flags); | 2280 | dev->name, flags); |
@@ -2396,9 +2396,11 @@ next_pkt: | |||
2396 | np->get_rx.orig = np->first_rx.orig; | 2396 | np->get_rx.orig = np->first_rx.orig; |
2397 | if (unlikely(np->get_rx_ctx++ == np->last_rx_ctx)) | 2397 | if (unlikely(np->get_rx_ctx++ == np->last_rx_ctx)) |
2398 | np->get_rx_ctx = np->first_rx_ctx; | 2398 | np->get_rx_ctx = np->first_rx_ctx; |
2399 | |||
2400 | rx_work++; | ||
2399 | } | 2401 | } |
2400 | 2402 | ||
2401 | return rx_processed_cnt; | 2403 | return rx_work; |
2402 | } | 2404 | } |
2403 | 2405 | ||
2404 | static int nv_rx_process_optimized(struct net_device *dev, int limit) | 2406 | static int nv_rx_process_optimized(struct net_device *dev, int limit) |