Altough 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, rsulting 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 |    3 ++-
 2 files changed, 12 insertions(+), 11 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-07 
11:53:55.000000000 -0500
+++ linux-2.6.22-rc1/drivers/net/spider_net.c   2007-06-07 11:56:10.000000000 
-0500
@@ -1314,6 +1314,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;
        }
 
@@ -1584,17 +1585,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()) {
-                       dev_info(&card->netdev->dev, "Spider RX RAM full, "
-                               "incoming packets might be discarded!\n");
-                       show_rx_chain(card);
-               }
                /* 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;
 
@@ -2374,6 +2373,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-07 
11:52:35.000000000 -0500
+++ linux-2.6.22-rc1/drivers/net/spider_net.h   2007-06-07 11:55:06.000000000 
-0500
@@ -164,7 +164,7 @@ extern char spider_net_driver_name[];
 
 /** interrupt mask registers */
 #define SPIDER_NET_INT0_MASK_VALUE     0x3f7fe2c7
-#define SPIDER_NET_INT1_MASK_VALUE     0xffff7ff7
+#define SPIDER_NET_INT1_MASK_VALUE     0xffff5ff5
 /* no MAC aborts -> auto retransmission */
 #define SPIDER_NET_INT2_MASK_VALUE     0xffef7ff1
 
@@ -467,6 +467,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