| From foo@baz Thu Nov 9 09:48:01 CET 2017 |
| From: Julian Wiedmann <jwi@linux.vnet.ibm.com> |
| Date: Thu, 12 Jan 2017 15:48:42 +0100 |
| Subject: s390/qeth: issue STARTLAN as first IPA command |
| |
| From: Julian Wiedmann <jwi@linux.vnet.ibm.com> |
| |
| |
| [ Upstream commit 1034051045d125579ab1e8fcd5a724eeb0e70149 ] |
| |
| STARTLAN needs to be the first IPA command after MPC initialization |
| completes. |
| So move the qeth_send_startlan() call from the layer disciplines |
| into the core path, right after the MPC handshake. |
| While at it, replace the magic LAN OFFLINE return code |
| with the existing enum. |
| |
| Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com> |
| Reviewed-by: Thomas Richter <tmricht@linux.vnet.ibm.com> |
| Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <alexander.levin@verizon.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/s390/net/qeth_core.h | 1 - |
| drivers/s390/net/qeth_core_main.c | 21 +++++++++++++++++---- |
| drivers/s390/net/qeth_l2_main.c | 15 --------------- |
| drivers/s390/net/qeth_l3_main.c | 15 --------------- |
| 4 files changed, 17 insertions(+), 35 deletions(-) |
| |
| --- a/drivers/s390/net/qeth_core.h |
| +++ b/drivers/s390/net/qeth_core.h |
| @@ -921,7 +921,6 @@ void qeth_clear_thread_running_bit(struc |
| int qeth_core_hardsetup_card(struct qeth_card *); |
| void qeth_print_status_message(struct qeth_card *); |
| int qeth_init_qdio_queues(struct qeth_card *); |
| -int qeth_send_startlan(struct qeth_card *); |
| int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *, |
| int (*reply_cb) |
| (struct qeth_card *, struct qeth_reply *, unsigned long), |
| --- a/drivers/s390/net/qeth_core_main.c |
| +++ b/drivers/s390/net/qeth_core_main.c |
| @@ -2944,7 +2944,7 @@ int qeth_send_ipa_cmd(struct qeth_card * |
| } |
| EXPORT_SYMBOL_GPL(qeth_send_ipa_cmd); |
| |
| -int qeth_send_startlan(struct qeth_card *card) |
| +static int qeth_send_startlan(struct qeth_card *card) |
| { |
| int rc; |
| struct qeth_cmd_buffer *iob; |
| @@ -2957,7 +2957,6 @@ int qeth_send_startlan(struct qeth_card |
| rc = qeth_send_ipa_cmd(card, iob, NULL, NULL); |
| return rc; |
| } |
| -EXPORT_SYMBOL_GPL(qeth_send_startlan); |
| |
| static int qeth_default_setadapterparms_cb(struct qeth_card *card, |
| struct qeth_reply *reply, unsigned long data) |
| @@ -5091,6 +5090,20 @@ retriable: |
| goto out; |
| } |
| |
| + rc = qeth_send_startlan(card); |
| + if (rc) { |
| + QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc); |
| + if (rc == IPA_RC_LAN_OFFLINE) { |
| + dev_warn(&card->gdev->dev, |
| + "The LAN is offline\n"); |
| + card->lan_online = 0; |
| + } else { |
| + rc = -ENODEV; |
| + goto out; |
| + } |
| + } else |
| + card->lan_online = 1; |
| + |
| card->options.ipa4.supported_funcs = 0; |
| card->options.ipa6.supported_funcs = 0; |
| card->options.adp.supported_funcs = 0; |
| @@ -5102,14 +5115,14 @@ retriable: |
| if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) { |
| rc = qeth_query_setadapterparms(card); |
| if (rc < 0) { |
| - QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc); |
| + QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc); |
| goto out; |
| } |
| } |
| if (qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) { |
| rc = qeth_query_setdiagass(card); |
| if (rc < 0) { |
| - QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc); |
| + QETH_DBF_TEXT_(SETUP, 2, "8err%d", rc); |
| goto out; |
| } |
| } |
| --- a/drivers/s390/net/qeth_l2_main.c |
| +++ b/drivers/s390/net/qeth_l2_main.c |
| @@ -1204,21 +1204,6 @@ static int __qeth_l2_set_online(struct c |
| /* softsetup */ |
| QETH_DBF_TEXT(SETUP, 2, "softsetp"); |
| |
| - rc = qeth_send_startlan(card); |
| - if (rc) { |
| - QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); |
| - if (rc == 0xe080) { |
| - dev_warn(&card->gdev->dev, |
| - "The LAN is offline\n"); |
| - card->lan_online = 0; |
| - goto contin; |
| - } |
| - rc = -ENODEV; |
| - goto out_remove; |
| - } else |
| - card->lan_online = 1; |
| - |
| -contin: |
| if ((card->info.type == QETH_CARD_TYPE_OSD) || |
| (card->info.type == QETH_CARD_TYPE_OSX)) { |
| rc = qeth_l2_start_ipassists(card); |
| --- a/drivers/s390/net/qeth_l3_main.c |
| +++ b/drivers/s390/net/qeth_l3_main.c |
| @@ -3230,21 +3230,6 @@ static int __qeth_l3_set_online(struct c |
| /* softsetup */ |
| QETH_DBF_TEXT(SETUP, 2, "softsetp"); |
| |
| - rc = qeth_send_startlan(card); |
| - if (rc) { |
| - QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); |
| - if (rc == 0xe080) { |
| - dev_warn(&card->gdev->dev, |
| - "The LAN is offline\n"); |
| - card->lan_online = 0; |
| - goto contin; |
| - } |
| - rc = -ENODEV; |
| - goto out_remove; |
| - } else |
| - card->lan_online = 1; |
| - |
| -contin: |
| rc = qeth_l3_setadapter_parms(card); |
| if (rc) |
| QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc); |