mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-14 09:47:20 +00:00
[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>
This commit is contained in:
parent
6c88ad2ded
commit
d805d7c692
@ -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
|
* Linux on zSeries OSA Express and HiperSockets support
|
||||||
*
|
*
|
||||||
@ -12,7 +12,7 @@
|
|||||||
* Frank Pavlic (pavlic@de.ibm.com) and
|
* Frank Pavlic (pavlic@de.ibm.com) and
|
||||||
* Thomas Spatzier <tspat@de.ibm.com>
|
* Thomas Spatzier <tspat@de.ibm.com>
|
||||||
*
|
*
|
||||||
* $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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -72,7 +72,7 @@
|
|||||||
#include "qeth_eddp.h"
|
#include "qeth_eddp.h"
|
||||||
#include "qeth_tso.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";
|
static const char *version = "qeth S/390 OSA-Express driver";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -799,7 +799,7 @@ __qeth_delete_all_mc(struct qeth_card *card, unsigned long *flags)
|
|||||||
{
|
{
|
||||||
struct qeth_ipaddr *addr, *tmp;
|
struct qeth_ipaddr *addr, *tmp;
|
||||||
int rc;
|
int rc;
|
||||||
|
again:
|
||||||
list_for_each_entry_safe(addr, tmp, &card->ip_list, entry) {
|
list_for_each_entry_safe(addr, tmp, &card->ip_list, entry) {
|
||||||
if (addr->is_multicast) {
|
if (addr->is_multicast) {
|
||||||
spin_unlock_irqrestore(&card->ip_lock, *flags);
|
spin_unlock_irqrestore(&card->ip_lock, *flags);
|
||||||
@ -808,6 +808,7 @@ __qeth_delete_all_mc(struct qeth_card *card, unsigned long *flags)
|
|||||||
if (!rc) {
|
if (!rc) {
|
||||||
list_del(&addr->entry);
|
list_del(&addr->entry);
|
||||||
kfree(addr);
|
kfree(addr);
|
||||||
|
goto again;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4336,6 +4337,8 @@ qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
|
|||||||
out:
|
out:
|
||||||
if (flush_count)
|
if (flush_count)
|
||||||
qeth_flush_buffers(queue, 0, start_index, 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
|
* queue->state will go from LOCKED -> UNLOCKED or from
|
||||||
* LOCKED_FLUSH -> LOCKED if output_handler wanted to 'notify' us
|
* LOCKED_FLUSH -> LOCKED if output_handler wanted to 'notify' us
|
||||||
|
Loading…
x
Reference in New Issue
Block a user