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 | |
| 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>
| -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 |
