aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Pavlic <fpavlic@de.ibm.com>2005-11-10 07:50:58 -0500
committerJeff Garzik <jgarzik@pobox.com>2005-11-11 08:26:21 -0500
commitd805d7c692e414c3adf01bb414a8c542ac2e67d1 (patch)
treed1c3707b423e992970c24573a5d9689d569105ce
parent6c88ad2ded1de1fe87e917b4a0a45873939c16e1 (diff)
[PATCH] s390: some more qeth fixes
[patch 4/7] s390: some more qeth fixes From: Frank Pavlic <fpavlic@de.ibm.com> From: Peter Tiedemann <ptiedem@de.ibm.com> - possible race on list fixed by reset list processing after every operation - traffic hang fixed Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> diffstat: qeth_main.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
-rw-r--r--drivers/s390/net/qeth_main.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
index 0a5d758b531e..d6844b24a8aa 100644
--- a/drivers/s390/net/qeth_main.c
+++ b/drivers/s390/net/qeth_main.c
@@ -1,6 +1,6 @@
1/* 1/*
2 * 2 *
3 * linux/drivers/s390/net/qeth_main.c ($Revision: 1.236 $) 3 * linux/drivers/s390/net/qeth_main.c ($Revision: 1.238 $)
4 * 4 *
5 * Linux on zSeries OSA Express and HiperSockets support 5 * Linux on zSeries OSA Express and HiperSockets support
6 * 6 *
@@ -12,7 +12,7 @@
12 * Frank Pavlic (pavlic@de.ibm.com) and 12 * Frank Pavlic (pavlic@de.ibm.com) and
13 * Thomas Spatzier <tspat@de.ibm.com> 13 * Thomas Spatzier <tspat@de.ibm.com>
14 * 14 *
15 * $Revision: 1.236 $ $Date: 2005/05/04 20:19:18 $ 15 * $Revision: 1.238 $ $Date: 2005/05/04 20:19:18 $
16 * 16 *
17 * This program is free software; you can redistribute it and/or modify 17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 18 * it under the terms of the GNU General Public License as published by
@@ -72,7 +72,7 @@
72#include "qeth_eddp.h" 72#include "qeth_eddp.h"
73#include "qeth_tso.h" 73#include "qeth_tso.h"
74 74
75#define VERSION_QETH_C "$Revision: 1.236 $" 75#define VERSION_QETH_C "$Revision: 1.238 $"
76static const char *version = "qeth S/390 OSA-Express driver"; 76static const char *version = "qeth S/390 OSA-Express driver";
77 77
78/** 78/**
@@ -799,7 +799,7 @@ __qeth_delete_all_mc(struct qeth_card *card, unsigned long *flags)
799{ 799{
800 struct qeth_ipaddr *addr, *tmp; 800 struct qeth_ipaddr *addr, *tmp;
801 int rc; 801 int rc;
802 802again:
803 list_for_each_entry_safe(addr, tmp, &card->ip_list, entry) { 803 list_for_each_entry_safe(addr, tmp, &card->ip_list, entry) {
804 if (addr->is_multicast) { 804 if (addr->is_multicast) {
805 spin_unlock_irqrestore(&card->ip_lock, *flags); 805 spin_unlock_irqrestore(&card->ip_lock, *flags);
@@ -808,6 +808,7 @@ __qeth_delete_all_mc(struct qeth_card *card, unsigned long *flags)
808 if (!rc) { 808 if (!rc) {
809 list_del(&addr->entry); 809 list_del(&addr->entry);
810 kfree(addr); 810 kfree(addr);
811 goto again;
811 } 812 }
812 } 813 }
813 } 814 }
@@ -4336,6 +4337,8 @@ qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
4336out: 4337out:
4337 if (flush_count) 4338 if (flush_count)
4338 qeth_flush_buffers(queue, 0, start_index, flush_count); 4339 qeth_flush_buffers(queue, 0, start_index, flush_count);
4340 else if (!atomic_read(&queue->set_pci_flags_count))
4341 atomic_swap(&queue->state, QETH_OUT_Q_LOCKED_FLUSH);
4339 /* 4342 /*
4340 * queue->state will go from LOCKED -> UNLOCKED or from 4343 * queue->state will go from LOCKED -> UNLOCKED or from
4341 * LOCKED_FLUSH -> LOCKED if output_handler wanted to 'notify' us 4344 * LOCKED_FLUSH -> LOCKED if output_handler wanted to 'notify' us