forked from luck/tmp_suning_uos_patched
Merge branch 's390-fixes'
Julian Wiedmann says: ==================== s390/qeth: fixes 2019-12-18 please apply the following patch series to your net tree. This brings two fixes for initialization / teardown issues, and one ENOTSUPP cleanup. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
f80742b9c5
|
@ -655,17 +655,17 @@ static int qeth_check_idx_response(struct qeth_card *card,
|
|||
unsigned char *buffer)
|
||||
{
|
||||
QETH_DBF_HEX(CTRL, 2, buffer, QETH_DBF_CTRL_LEN);
|
||||
if ((buffer[2] & 0xc0) == 0xc0) {
|
||||
if ((buffer[2] & QETH_IDX_TERMINATE_MASK) == QETH_IDX_TERMINATE) {
|
||||
QETH_DBF_MESSAGE(2, "received an IDX TERMINATE with cause code %#04x\n",
|
||||
buffer[4]);
|
||||
QETH_CARD_TEXT(card, 2, "ckidxres");
|
||||
QETH_CARD_TEXT(card, 2, " idxterm");
|
||||
QETH_CARD_TEXT_(card, 2, " rc%d", -EIO);
|
||||
if (buffer[4] == 0xf6) {
|
||||
QETH_CARD_TEXT_(card, 2, "rc%x", buffer[4]);
|
||||
if (buffer[4] == QETH_IDX_TERM_BAD_TRANSPORT ||
|
||||
buffer[4] == QETH_IDX_TERM_BAD_TRANSPORT_VM) {
|
||||
dev_err(&card->gdev->dev,
|
||||
"The qeth device is not configured "
|
||||
"for the OSI layer required by z/VM\n");
|
||||
return -EPERM;
|
||||
"The device does not support the configured transport mode\n");
|
||||
return -EPROTONOSUPPORT;
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
|
@ -742,10 +742,10 @@ static void qeth_issue_next_read_cb(struct qeth_card *card,
|
|||
case 0:
|
||||
break;
|
||||
case -EIO:
|
||||
qeth_clear_ipacmd_list(card);
|
||||
qeth_schedule_recovery(card);
|
||||
/* fall through */
|
||||
default:
|
||||
qeth_clear_ipacmd_list(card);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
@ -899,6 +899,11 @@ extern unsigned char IDX_ACTIVATE_WRITE[];
|
|||
#define QETH_IDX_ACT_ERR_AUTH 0x1E
|
||||
#define QETH_IDX_ACT_ERR_AUTH_USER 0x20
|
||||
|
||||
#define QETH_IDX_TERMINATE 0xc0
|
||||
#define QETH_IDX_TERMINATE_MASK 0xc0
|
||||
#define QETH_IDX_TERM_BAD_TRANSPORT 0x41
|
||||
#define QETH_IDX_TERM_BAD_TRANSPORT_VM 0xf6
|
||||
|
||||
#define PDU_ENCAPSULATION(buffer) \
|
||||
(buffer + *(buffer + (*(buffer + 0x0b)) + \
|
||||
*(buffer + *(buffer + 0x0b) + 0x11) + 0x07))
|
||||
|
|
|
@ -207,7 +207,7 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev,
|
|||
card->qdio.default_out_queue = QETH_DEFAULT_QUEUE;
|
||||
} else if (sysfs_streq(buf, "prio_queueing_vlan")) {
|
||||
if (IS_LAYER3(card)) {
|
||||
rc = -ENOTSUPP;
|
||||
rc = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_VLAN;
|
||||
|
|
|
@ -295,6 +295,7 @@ static void qeth_l2_stop_card(struct qeth_card *card)
|
|||
|
||||
flush_workqueue(card->event_wq);
|
||||
card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED;
|
||||
card->info.promisc_mode = 0;
|
||||
}
|
||||
|
||||
static int qeth_l2_process_inbound_buffer(struct qeth_card *card,
|
||||
|
|
|
@ -262,7 +262,8 @@ void qeth_l2_setup_bridgeport_attrs(struct qeth_card *card)
|
|||
return;
|
||||
|
||||
mutex_lock(&card->sbp_lock);
|
||||
if (card->options.sbp.role != QETH_SBP_ROLE_NONE) {
|
||||
if (!card->options.sbp.reflect_promisc &&
|
||||
card->options.sbp.role != QETH_SBP_ROLE_NONE) {
|
||||
/* Conditional to avoid spurious error messages */
|
||||
qeth_bridgeport_setrole(card, card->options.sbp.role);
|
||||
/* Let the callback function refresh the stored role value. */
|
||||
|
|
|
@ -1314,6 +1314,7 @@ static void qeth_l3_stop_card(struct qeth_card *card)
|
|||
}
|
||||
|
||||
flush_workqueue(card->event_wq);
|
||||
card->info.promisc_mode = 0;
|
||||
}
|
||||
|
||||
static void qeth_l3_set_promisc_mode(struct qeth_card *card)
|
||||
|
|
Loading…
Reference in New Issue
Block a user