s390: some more qeth fixes
Subsystems (4)
PATCH 4/7 s390: some more qeth fixes
[patch 4/7] s390: some more qeth fixes
From: Frank Pavlic <[email protected]>
From: Peter Tiedemann <[email protected]>
- possible race on list fixed by reset
list processing after every operation
- traffic hang fixed
Signed-off-by Frank Pavlic <[email protected]>
diffstat:
qeth_main.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-)
drivers/s390/net/qeth_main.c +7 -4
@@ -1,6 +1,6 @@/* * -* linux/drivers/s390/net/qeth_main.c ($Revision: 1.236 $) +* linux/drivers/s390/net/qeth_main.c ($Revision: 1.238 $) * * Linux on zSeries OSA Express and HiperSockets support *
@@ -12,7 +12,7 @@* Frank Pavlic ([email protected]) and * Thomas Spatzier <[email protected]> * -* $Revision: 1.236 $ $Date: 2005/05/04 20:19:18 $ +* $Revision: 1.238 $ $Date: 2005/05/04 20:19:18 $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
@@ -72,7 +72,7 @@#include "qeth_eddp.h" #include "qeth_tso.h" -#define VERSION_QETH_C "$Revision: 1.236 $" +#define VERSION_QETH_C "$Revision: 1.238 $"static const char *version ="qeth S/390 OSA-Express driver" ;/**
@@ -799,7 +799,7 @@ __qeth_delete_all_mc(struct qeth_card *c {struct qeth_ipaddr *addr, *tmp;int rc; - +again:list_for_each_entry_safe (addr, tmp, &card->ip_list, entry) {if (addr->is_multicast) {spin_unlock_irqrestore (&card->ip_lock, *flags);
@@ -808,6 +808,7 @@ __qeth_delete_all_mc(struct qeth_card *cif (!rc) {list_del (&addr->entry);kfree (addr); + goto again; } } }
@@ -4336,6 +4337,8 @@ qeth_do_send_packet(struct qeth_card *ca out:if (flush_count)qeth_flush_buffers (queue,0 , start_index, flush_count); +else if (!atomic_read (&queue->set_pci_flags_count)) +atomic_swap (&queue->state,QETH_OUT_Q_LOCKED_FLUSH );/* * queue->state will go from LOCKED -> UNLOCKED or from * LOCKED_FLUSH -> LOCKED if output_handler wanted to 'notify' us