diff options
author | Frank Blaschka <frank.blaschka@de.ibm.com> | 2007-08-29 11:26:53 +0200 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-08-31 12:52:57 +0200 |
commit | cde46035161d677617983177e877c87d89fbb5e1 (patch) | |
tree | ab4c24ac03f2b54f5a3faa9dc46ee85331df479e /drivers/s390 | |
parent | qeth: ungrouping a device must not be interruptible (diff) | |
download | linux-cde46035161d677617983177e877c87d89fbb5e1.tar.xz linux-cde46035161d677617983177e877c87d89fbb5e1.zip |
qeth: enforce a rate limit for inbound scatter gather messages
under memory pressure scatter gather mode switching messages must be
rate limited.
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/qeth_main.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index ba10d42a1a56..610d27cfd28b 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c @@ -2803,13 +2803,16 @@ qeth_queue_input_buffer(struct qeth_card *card, int index) if (newcount < count) { /* we are in memory shortage so we switch back to traditional skb allocation and drop packages */ - if (atomic_cmpxchg(&card->force_alloc_skb, 0, 1)) - printk(KERN_WARNING - "qeth: switch to alloc skb\n"); + if (!atomic_read(&card->force_alloc_skb) && + net_ratelimit()) + PRINT_WARN("Switch to alloc skb\n"); + atomic_set(&card->force_alloc_skb, 3); count = newcount; } else { - if (atomic_cmpxchg(&card->force_alloc_skb, 1, 0)) - printk(KERN_WARNING "qeth: switch to sg\n"); + if ((atomic_read(&card->force_alloc_skb) == 1) && + net_ratelimit()) + PRINT_WARN("Switch to sg\n"); + atomic_add_unless(&card->force_alloc_skb, -1, 0); } /* |