qeth: provide specific message for OSA-adapters exclusively used
Subsystems (3)
PATCH 6/7 qeth: provide specific message for OSA-adapters exclusively used
From: Ursula Braun <[email protected]>
Exclusive usage of OSA-cards has been introduced. Even though Linux does not make use of it, qeth should be prepared to receive a bad RC for some initialization steps. A meaningful message is now given, if an OSA-device is set online, even though the OSA-adapter is already exclusively used by another host.
Signed-off-by Ursula Braun <[email protected]>
---
drivers/s390/net/qeth_main.c | 28 +++++++++++++++++++--------- drivers/s390/net/qeth_mpc.h | 1 + 2 files changed, 20 insertions(+), 9 deletions(-)
drivers/s390/net/qeth_main.c +19 -9
@@ -1541,16 +1541,21 @@ qeth_idx_write_cb(struct qeth_channel *c card =CARD_FROM_CDEV (channel->ccwdev);if (!(QETH_IS_IDX_ACT_POS_REPLY (iob->data))) { -PRINT_ERR ("IDX_ACTIVATE on write channel device %s: negative " -"reply\n" ,CARD_WDEV_ID (card)); +if (QETH_IDX_ACT_CAUSE_CODE (iob->data) ==0x19 ) +PRINT_ERR ("IDX_ACTIVATE on write channel device %s: " +"adapter exclusively used by another host\n" , +CARD_WDEV_ID (card)); +else +PRINT_ERR ("IDX_ACTIVATE on write channel device %s: " +"negative reply\n" ,CARD_WDEV_ID (card)); goto out; }memcpy (&temp,QETH_IDX_ACT_FUNC_LEVEL (iob->data),2 );if ((temp & ~0x0100 ) !=qeth_peer_func_level (card->info.func_level)) {PRINT_WARN ("IDX_ACTIVATE on write channel device %s: " -"function level mismatch " -"(sent: 0x%x, received: 0x%x)\n" , -CARD_WDEV_ID (card), card->info.func_level, temp); +"function level mismatch " +"(sent: 0x%x, received: 0x%x)\n" , +CARD_WDEV_ID (card), card->info.func_level, temp); goto out; } channel->state =CH_STATE_UP ;
@@ -1596,8 +1601,13 @@ qeth_idx_read_cb(struct qeth_channel *ch goto out; }if (!(QETH_IS_IDX_ACT_POS_REPLY (iob->data))) { -PRINT_ERR ("IDX_ACTIVATE on read channel device %s: negative " -"reply\n" ,CARD_RDEV_ID (card)); +if (QETH_IDX_ACT_CAUSE_CODE (iob->data) ==0x19 ) +PRINT_ERR ("IDX_ACTIVATE on read channel device %s: " +"adapter exclusively used by another host\n" , +CARD_RDEV_ID (card)); +else +PRINT_ERR ("IDX_ACTIVATE on read channel device %s: " +"negative reply\n" ,CARD_RDEV_ID (card)); goto out; }
@@ -1612,8 +1622,8 @@ qeth_idx_read_cb(struct qeth_channel *chmemcpy (&temp,QETH_IDX_ACT_FUNC_LEVEL (iob->data),2 );if (temp !=qeth_peer_func_level (card->info.func_level)) {PRINT_WARN ("IDX_ACTIVATE on read channel device %s: function " -"level mismatch (sent: 0x%x, received: 0x%x)\n" , -CARD_RDEV_ID (card), card->info.func_level, temp); +"level mismatch (sent: 0x%x, received: 0x%x)\n" , +CARD_RDEV_ID (card), card->info.func_level, temp); goto out; } memcpy(&card->token.issuer_rm_r,
drivers/s390/net/qeth_mpc.h +1 -0
@@ -565,6 +565,7 @@ extern unsigned char IDX_ACTIVATE_WRITE[#define QETH_IDX_ACT_QDIO_DEV_REALADDR (buffer) (buffer+0x20)#define QETH_IS_IDX_ACT_POS_REPLY (buffer) (((buffer)[0x08]&3)==2)#define QETH_IDX_REPLY_LEVEL (buffer) (buffer+0x12) +#define QETH_IDX_ACT_CAUSE_CODE (buffer) (buffer)[0x09]#define PDU_ENCAPSULATION (buffer) \ (buffer + *(buffer + (*(buffer+0x0b)) + \