[PATCH] s390: minor qeth network driver fixes

[patch 2/3] s390: minor qeth network driver fixes

From: Frank Pavlic <pavlic@de.ibm.com>
- use netif_carrier_on/off calls to tell network stack
link carrier state
- fix possible kfree on NULL
- PDU_LEN2 is at offset 0x29 otherwise OSN chpid won't initialize

Signed-off-by: Frank Pavlic <pavlic@de.ibm.com>

diffstat:
qeth_eddp.c | 3 ++-
qeth_main.c | 17 +++++++----------
qeth_mpc.h | 2 +-
3 files changed, 10 insertions(+), 12 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>

authored by Frank Pavlic and committed by Jeff Garzik 4965e97f 6c6b3e7c

+10 -12
+2 -1
drivers/s390/net/qeth_eddp.c
··· 62 for (i = 0; i < ctx->num_pages; ++i) 63 free_page((unsigned long)ctx->pages[i]); 64 kfree(ctx->pages); 65 - kfree(ctx->elements); 66 kfree(ctx); 67 } 68
··· 62 for (i = 0; i < ctx->num_pages; ++i) 63 free_page((unsigned long)ctx->pages[i]); 64 kfree(ctx->pages); 65 + if (ctx->elements != NULL) 66 + kfree(ctx->elements); 67 kfree(ctx); 68 } 69
+7 -10
drivers/s390/net/qeth_main.c
··· 518 519 QETH_DBF_TEXT(setup, 3, "setoffl"); 520 QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); 521 - 522 recover_flag = card->state; 523 if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ 524 PRINT_WARN("Stopping card %s interrupted by user!\n", ··· 1021 qeth_schedule_recovery(struct qeth_card *card) 1022 { 1023 QETH_DBF_TEXT(trace,2,"startrec"); 1024 - 1025 if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0) 1026 schedule_work(&card->kernel_thread_starter); 1027 } ··· 1710 "IP address reset.\n", 1711 QETH_CARD_IFNAME(card), 1712 card->info.chpid); 1713 - netif_carrier_on(card->dev); 1714 qeth_schedule_recovery(card); 1715 return NULL; 1716 case IPA_CMD_MODCCID: ··· 1958 { 1959 u16 s1, s2; 1960 1961 - QETH_DBF_TEXT(trace,4,"osndipa"); 1962 1963 qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2); 1964 s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len); ··· 3808 card->data.state = CH_STATE_UP; 3809 card->state = CARD_STATE_UP; 3810 3811 - if (!card->lan_online){ 3812 - if (netif_carrier_ok(dev)) 3813 - netif_carrier_off(dev); 3814 - } 3815 return 0; 3816 } 3817 ··· 7933 QETH_DBF_TEXT_(setup, 2, "6err%d", rc); 7934 goto out_remove; 7935 } 7936 - /*maybe it was set offline without ifconfig down 7937 - * we can also use this state for recovery purposes*/ 7938 qeth_set_allowed_threads(card, 0xffffffff, 0); 7939 if (recover_flag == CARD_STATE_RECOVER) 7940 qeth_start_again(card, recovery_mode);
··· 518 519 QETH_DBF_TEXT(setup, 3, "setoffl"); 520 QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); 521 + 522 + netif_carrier_off(card->dev); 523 recover_flag = card->state; 524 if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ 525 PRINT_WARN("Stopping card %s interrupted by user!\n", ··· 1020 qeth_schedule_recovery(struct qeth_card *card) 1021 { 1022 QETH_DBF_TEXT(trace,2,"startrec"); 1023 if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0) 1024 schedule_work(&card->kernel_thread_starter); 1025 } ··· 1710 "IP address reset.\n", 1711 QETH_CARD_IFNAME(card), 1712 card->info.chpid); 1713 qeth_schedule_recovery(card); 1714 return NULL; 1715 case IPA_CMD_MODCCID: ··· 1959 { 1960 u16 s1, s2; 1961 1962 + QETH_DBF_TEXT(trace,4,"osndipa"); 1963 1964 qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2); 1965 s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len); ··· 3809 card->data.state = CH_STATE_UP; 3810 card->state = CARD_STATE_UP; 3811 3812 + if (!card->lan_online && netif_carrier_ok(dev)) 3813 + netif_carrier_off(dev); 3814 return 0; 3815 } 3816 ··· 7936 QETH_DBF_TEXT_(setup, 2, "6err%d", rc); 7937 goto out_remove; 7938 } 7939 + netif_carrier_on(card->dev); 7940 + 7941 qeth_set_allowed_threads(card, 0xffffffff, 0); 7942 if (recover_flag == CARD_STATE_RECOVER) 7943 qeth_start_again(card, recovery_mode);
+1 -1
drivers/s390/net/qeth_mpc.h
··· 21 #define IPA_PDU_HEADER_SIZE 0x40 22 #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) 23 #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) 24 - #define QETH_IPA_PDU_LEN_PDU2(buffer) (buffer+0x2a) 25 #define QETH_IPA_PDU_LEN_PDU3(buffer) (buffer+0x3a) 26 27 extern unsigned char IPA_PDU_HEADER[];
··· 21 #define IPA_PDU_HEADER_SIZE 0x40 22 #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) 23 #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) 24 + #define QETH_IPA_PDU_LEN_PDU2(buffer) (buffer+0x29) 25 #define QETH_IPA_PDU_LEN_PDU3(buffer) (buffer+0x3a) 26 27 extern unsigned char IPA_PDU_HEADER[];