aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-04-22 20:32:51 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-22 20:32:51 -0400
commit6e0895c2ea326cc4bb11e8fa2f654628d5754c31 (patch)
tree7089303ac11a12edc43a8c4fa1b23974e10937ea /drivers/s390/net
parent55fbbe46e9eb3cbe6c335503f5550855a1128dce (diff)
parent60d509fa6a9c4653a86ad830e4c4b30360b23f0e (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/emulex/benet/be_main.c drivers/net/ethernet/intel/igb/igb_main.c drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c include/net/scm.h net/batman-adv/routing.c net/ipv4/tcp_input.c The e{uid,gid} --> {uid,gid} credentials fix conflicted with the cleanup in net-next to now pass cred structs around. The be2net driver had a bug fix in 'net' that overlapped with the VLAN interface changes by Patrick McHardy in net-next. An IGB conflict existed because in 'net' the build_skb() support was reverted, and in 'net-next' there was a comment style fix within that code. Several batman-adv conflicts were resolved by making sure that all calls to batadv_is_my_mac() are changed to have a new bat_priv first argument. Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO rewrite in 'net-next', mostly overlapping changes. Thanks to Stephen Rothwell and Antonio Quartulli for help with several of these merge resolutions. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r--drivers/s390/net/qeth_core.h3
-rw-r--r--drivers/s390/net/qeth_core_main.c19
-rw-r--r--drivers/s390/net/qeth_l2_main.c2
-rw-r--r--drivers/s390/net/qeth_l3_main.c2
4 files changed, 26 insertions, 0 deletions
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
index ab4d2861ef3c..c4f392d5db4c 100644
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -769,6 +769,7 @@ struct qeth_card {
769 unsigned long thread_start_mask; 769 unsigned long thread_start_mask;
770 unsigned long thread_allowed_mask; 770 unsigned long thread_allowed_mask;
771 unsigned long thread_running_mask; 771 unsigned long thread_running_mask;
772 struct task_struct *recovery_task;
772 spinlock_t ip_lock; 773 spinlock_t ip_lock;
773 struct list_head ip_list; 774 struct list_head ip_list;
774 struct list_head *ip_tbd_list; 775 struct list_head *ip_tbd_list;
@@ -862,6 +863,8 @@ extern struct qeth_card_list_struct qeth_core_card_list;
862extern struct kmem_cache *qeth_core_header_cache; 863extern struct kmem_cache *qeth_core_header_cache;
863extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS]; 864extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS];
864 865
866void qeth_set_recovery_task(struct qeth_card *);
867void qeth_clear_recovery_task(struct qeth_card *);
865void qeth_set_allowed_threads(struct qeth_card *, unsigned long , int); 868void qeth_set_allowed_threads(struct qeth_card *, unsigned long , int);
866int qeth_threads_running(struct qeth_card *, unsigned long); 869int qeth_threads_running(struct qeth_card *, unsigned long);
867int qeth_wait_for_threads(struct qeth_card *, unsigned long); 870int qeth_wait_for_threads(struct qeth_card *, unsigned long);
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index a86ce07736ef..6cd0fc1b203a 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -177,6 +177,23 @@ const char *qeth_get_cardname_short(struct qeth_card *card)
177 return "n/a"; 177 return "n/a";
178} 178}
179 179
180void qeth_set_recovery_task(struct qeth_card *card)
181{
182 card->recovery_task = current;
183}
184EXPORT_SYMBOL_GPL(qeth_set_recovery_task);
185
186void qeth_clear_recovery_task(struct qeth_card *card)
187{
188 card->recovery_task = NULL;
189}
190EXPORT_SYMBOL_GPL(qeth_clear_recovery_task);
191
192static bool qeth_is_recovery_task(const struct qeth_card *card)
193{
194 return card->recovery_task == current;
195}
196
180void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads, 197void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads,
181 int clear_start_mask) 198 int clear_start_mask)
182{ 199{
@@ -205,6 +222,8 @@ EXPORT_SYMBOL_GPL(qeth_threads_running);
205 222
206int qeth_wait_for_threads(struct qeth_card *card, unsigned long threads) 223int qeth_wait_for_threads(struct qeth_card *card, unsigned long threads)
207{ 224{
225 if (qeth_is_recovery_task(card))
226 return 0;
208 return wait_event_interruptible(card->wait_q, 227 return wait_event_interruptible(card->wait_q,
209 qeth_threads_running(card, threads) == 0); 228 qeth_threads_running(card, threads) == 0);
210} 229}
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 2d425416b0a1..ec8ccdae7aba 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -1144,6 +1144,7 @@ static int qeth_l2_recover(void *ptr)
1144 QETH_CARD_TEXT(card, 2, "recover2"); 1144 QETH_CARD_TEXT(card, 2, "recover2");
1145 dev_warn(&card->gdev->dev, 1145 dev_warn(&card->gdev->dev,
1146 "A recovery process has been started for the device\n"); 1146 "A recovery process has been started for the device\n");
1147 qeth_set_recovery_task(card);
1147 __qeth_l2_set_offline(card->gdev, 1); 1148 __qeth_l2_set_offline(card->gdev, 1);
1148 rc = __qeth_l2_set_online(card->gdev, 1); 1149 rc = __qeth_l2_set_online(card->gdev, 1);
1149 if (!rc) 1150 if (!rc)
@@ -1154,6 +1155,7 @@ static int qeth_l2_recover(void *ptr)
1154 dev_warn(&card->gdev->dev, "The qeth device driver " 1155 dev_warn(&card->gdev->dev, "The qeth device driver "
1155 "failed to recover an error on the device\n"); 1156 "failed to recover an error on the device\n");
1156 } 1157 }
1158 qeth_clear_recovery_task(card);
1157 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD); 1159 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD);
1158 qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD); 1160 qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD);
1159 return 0; 1161 return 0;
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index 449676e48fd0..c1b0b2761f8d 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -3520,6 +3520,7 @@ static int qeth_l3_recover(void *ptr)
3520 QETH_CARD_TEXT(card, 2, "recover2"); 3520 QETH_CARD_TEXT(card, 2, "recover2");
3521 dev_warn(&card->gdev->dev, 3521 dev_warn(&card->gdev->dev,
3522 "A recovery process has been started for the device\n"); 3522 "A recovery process has been started for the device\n");
3523 qeth_set_recovery_task(card);
3523 __qeth_l3_set_offline(card->gdev, 1); 3524 __qeth_l3_set_offline(card->gdev, 1);
3524 rc = __qeth_l3_set_online(card->gdev, 1); 3525 rc = __qeth_l3_set_online(card->gdev, 1);
3525 if (!rc) 3526 if (!rc)
@@ -3530,6 +3531,7 @@ static int qeth_l3_recover(void *ptr)
3530 dev_warn(&card->gdev->dev, "The qeth device driver " 3531 dev_warn(&card->gdev->dev, "The qeth device driver "
3531 "failed to recover an error on the device\n"); 3532 "failed to recover an error on the device\n");
3532 } 3533 }
3534 qeth_clear_recovery_task(card);
3533 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD); 3535 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD);
3534 qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD); 3536 qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD);
3535 return 0; 3537 return 0;