Although the previous patch resolved issues with hangs when the
RX ram full interrupt is encountered, there are still situations
where lots of RX ramfull interrupts arrive, resulting in a noisy
log in syslog. There is no need for this.

Signed-off-by: Linas Vepstas <[EMAIL PROTECTED]>

----
 drivers/net/spider_net.c |   20 +++++++++++---------
 drivers/net/spider_net.h |    1 +
 2 files changed, 12 insertions(+), 9 deletions(-)

Index: linux-2.6.22-rc1/drivers/net/spider_net.c
===================================================================
--- linux-2.6.22-rc1.orig/drivers/net/spider_net.c      2007-06-11 
10:02:34.000000000 -0500
+++ linux-2.6.22-rc1/drivers/net/spider_net.c   2007-06-11 11:45:25.000000000 
-0500
@@ -1172,7 +1172,7 @@ spider_net_decode_one_descr(struct spide
                goto bad_desc;
        }
 
-       if (hwdescr->dmac_cmd_status & 0xfefe) {
+       if (hwdescr->dmac_cmd_status & 0xfcf4) {
                pr_err("%s: bad status, cmd_status=x%08x\n",
                               card->netdev->name,
                               hwdescr->dmac_cmd_status);
@@ -1251,6 +1251,7 @@ spider_net_poll(struct net_device *netde
        if (no_more_packets) {
                netif_rx_complete(netdev);
                spider_net_rx_irq_on(card);
+               card->ignore_rx_ramfull = 0;
                return 0;
        }
 
@@ -1521,15 +1522,15 @@ spider_net_handle_error_irq(struct spide
        case SPIDER_NET_GRFBFLLINT: /* fallthrough */
        case SPIDER_NET_GRFAFLLINT: /* fallthrough */
        case SPIDER_NET_GRMFLLINT:
-               if (netif_msg_intr(card) && net_ratelimit())
-                       pr_err("Spider RX RAM full, incoming packets "
-                              "might be discarded!\n");
                /* Could happen when rx chain is full */
-               spider_net_resync_head_ptr(card);
-               spider_net_refill_rx_chain(card);
-               spider_net_enable_rxdmac(card);
-               card->num_rx_ints ++;
-               netif_rx_schedule(card->netdev);
+               if (card->ignore_rx_ramfull == 0) {
+                       card->ignore_rx_ramfull = 1;
+                       spider_net_resync_head_ptr(card);
+                       spider_net_refill_rx_chain(card);
+                       spider_net_enable_rxdmac(card);
+                       card->num_rx_ints ++;
+                       netif_rx_schedule(card->netdev);
+               }
                show_error = 0;
                break;
 
@@ -2305,6 +2306,7 @@ spider_net_setup_netdev(struct spider_ne
 
        netdev->irq = card->pdev->irq;
        card->num_rx_ints = 0;
+       card->ignore_rx_ramfull = 0;
 
        dn = pci_device_to_OF_node(card->pdev);
        if (!dn)
Index: linux-2.6.22-rc1/drivers/net/spider_net.h
===================================================================
--- linux-2.6.22-rc1.orig/drivers/net/spider_net.h      2007-06-11 
10:02:25.000000000 -0500
+++ linux-2.6.22-rc1/drivers/net/spider_net.h   2007-06-11 11:45:50.000000000 
-0500
@@ -462,6 +462,7 @@ struct spider_net_card {
        atomic_t tx_timeout_task_counter;
        wait_queue_head_t waitq;
        int num_rx_ints;
+       int ignore_rx_ramfull;
 
        /* for ethtool */
        int msg_enable;
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to