spidernet: silence the ramfull messages
Linas Vepstas [Mon, 11 Jun 2007 18:26:50 +0000 (13:26 -0500)]
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 <linas@austin.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

drivers/net/spider_net.c
drivers/net/spider_net.h

index f5ede5f..0e79bac 100644 (file)
@@ -1172,7 +1172,7 @@ spider_net_decode_one_descr(struct spider_net_card *card)
                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 *netdev, int *budget)
        if (no_more_packets) {
                netif_rx_complete(netdev);
                spider_net_rx_irq_on(card);
+               card->ignore_rx_ramfull = 0;
                return 0;
        }
 
@@ -1484,15 +1485,15 @@ spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg)
        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;
 
@@ -2265,6 +2266,7 @@ spider_net_setup_netdev(struct spider_net_card *card)
 
        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 b620f18..f457bce 100644 (file)
@@ -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;