diff options
author | Frank Pavlic <fpavlic@de.ibm.com> | 2005-11-10 07:50:58 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-11-11 08:26:21 -0500 |
commit | d805d7c692e414c3adf01bb414a8c542ac2e67d1 (patch) | |
tree | d1c3707b423e992970c24573a5d9689d569105ce /drivers/s390/net | |
parent | 6c88ad2ded1de1fe87e917b4a0a45873939c16e1 (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>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r-- | drivers/s390/net/qeth_main.c | 11 |
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 $" |
76 | static const char *version = "qeth S/390 OSA-Express driver"; | 76 | static 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 | 802 | again: | |
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, | |||
4336 | out: | 4337 | out: |
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 |