* [patch 0/2] s390: qeth fixes 2.6.27-rc6
@ 2008-09-19 10:56 frank.blaschka
2008-09-19 10:56 ` [patch 1/2] qeth: use firmware MAC-address for layer2 hsi-devices frank.blaschka
2008-09-19 10:56 ` [patch 2/2] qeth: avoid qeth recovery problems frank.blaschka
0 siblings, 2 replies; 4+ messages in thread
From: frank.blaschka @ 2008-09-19 10:56 UTC (permalink / raw)
To: jgarzik; +Cc: netdev, linux-s390
Hi Jeff,
our internal regression found 2 more qeth bugs.
shortlog:
Ursula Braun (2)
qeth: use firmware MAC-address for layer2 hsi-devices
qeth: avoid qeth recovery problems
Thanks,
Frank
--
^ permalink raw reply [flat|nested] 4+ messages in thread* [patch 1/2] qeth: use firmware MAC-address for layer2 hsi-devices 2008-09-19 10:56 [patch 0/2] s390: qeth fixes 2.6.27-rc6 frank.blaschka @ 2008-09-19 10:56 ` frank.blaschka 2008-09-19 10:56 ` [patch 2/2] qeth: avoid qeth recovery problems frank.blaschka 1 sibling, 0 replies; 4+ messages in thread From: frank.blaschka @ 2008-09-19 10:56 UTC (permalink / raw) To: jgarzik; +Cc: netdev, linux-s390, Ursula Braun [-- Attachment #1: 600-qeth-mac.diff --] [-- Type: text/plain, Size: 1055 bytes --] From: Ursula Braun <ursula.braun@de.ibm.com> Real HiperSocket devices in layer2 mode have a firmware-created MAC-address. This change enables the qeth driver to use this firmware MAC-address for layer2 HiperSocket devices. Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com> Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com> --- drivers/s390/net/qeth_l2_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff -urpN linux-2.6/drivers/s390/net/qeth_l2_main.c linux-2.6-patched/drivers/s390/net/qeth_l2_main.c --- linux-2.6/drivers/s390/net/qeth_l2_main.c 2008-09-19 00:08:20.000000000 +0200 +++ linux-2.6-patched/drivers/s390/net/qeth_l2_main.c 2008-09-19 00:08:39.000000000 +0200 @@ -559,7 +559,8 @@ static int qeth_l2_request_initial_mac(s "device %s: x%x\n", CARD_BUS_ID(card), rc); } - if (card->info.guestlan) { + if ((card->info.type == QETH_CARD_TYPE_IQD) || + (card->info.guestlan)) { rc = qeth_setadpparms_change_macaddr(card); if (rc) { QETH_DBF_MESSAGE(2, "couldn't get MAC address on " -- ^ permalink raw reply [flat|nested] 4+ messages in thread
* [patch 2/2] qeth: avoid qeth recovery problems 2008-09-19 10:56 [patch 0/2] s390: qeth fixes 2.6.27-rc6 frank.blaschka 2008-09-19 10:56 ` [patch 1/2] qeth: use firmware MAC-address for layer2 hsi-devices frank.blaschka @ 2008-09-19 10:56 ` frank.blaschka 2008-09-25 0:52 ` Jeff Garzik 1 sibling, 1 reply; 4+ messages in thread From: frank.blaschka @ 2008-09-19 10:56 UTC (permalink / raw) To: jgarzik; +Cc: netdev, linux-s390, Ursula Braun [-- Attachment #1: 601-qeth-recovery.diff --] [-- Type: text/plain, Size: 3860 bytes --] From: Ursula Braun <ursula.braun@de.ibm.com> Do not touch IFF_UP flag during qeth recovery, but invoke dev_close() in case of failing recovery. Cancel outstanding control commands in case of Data Checks or Channel Checks. Do not invoke qeth_l2_del_all_mc() in case of a hard stop to speed up removal of qeth devices. Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com> Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com> --- drivers/s390/net/qeth_core_main.c | 4 +++- drivers/s390/net/qeth_l2_main.c | 11 +++++++---- drivers/s390/net/qeth_l3_main.c | 8 +++++--- 3 files changed, 15 insertions(+), 8 deletions(-) Index: git_linus/drivers/s390/net/qeth_core_main.c =================================================================== --- git_linus.orig/drivers/s390/net/qeth_core_main.c 2008-09-17 13:46:00.000000000 +0200 +++ git_linus/drivers/s390/net/qeth_core_main.c 2008-09-19 11:08:55.000000000 +0200 @@ -760,7 +760,7 @@ if (sense[SENSE_COMMAND_REJECT_BYTE] & SENSE_COMMAND_REJECT_FLAG) { QETH_DBF_TEXT(TRACE, 2, "CMDREJi"); - return 0; + return 1; } if ((sense[2] == 0xaf) && (sense[3] == 0xfe)) { QETH_DBF_TEXT(TRACE, 2, "AFFE"); @@ -884,6 +884,7 @@ } rc = qeth_get_problem(cdev, irb); if (rc) { + qeth_clear_ipacmd_list(card); qeth_schedule_recovery(card); goto out; } @@ -4147,6 +4148,7 @@ unsigned long flags; struct qeth_card *card = dev_get_drvdata(&gdev->dev); + QETH_DBF_TEXT(SETUP, 2, "removedv"); if (card->discipline.ccwgdriver) { card->discipline.ccwgdriver->remove(gdev); qeth_core_free_discipline(card); Index: git_linus/drivers/s390/net/qeth_l2_main.c =================================================================== --- git_linus.orig/drivers/s390/net/qeth_l2_main.c 2008-09-19 11:08:36.000000000 +0200 +++ git_linus/drivers/s390/net/qeth_l2_main.c 2008-09-19 11:08:55.000000000 +0200 @@ -395,7 +395,8 @@ } if (card->state == CARD_STATE_SOFTSETUP) { qeth_l2_process_vlans(card, 1); - qeth_l2_del_all_mc(card); + if (!card->use_hard_stop) + qeth_l2_del_all_mc(card); qeth_clear_ipacmd_list(card); card->state = CARD_STATE_HARDSETUP; } @@ -826,7 +827,6 @@ } card->data.state = CH_STATE_UP; card->state = CARD_STATE_UP; - card->dev->flags |= IFF_UP; netif_start_queue(dev); if (!card->lan_online && netif_carrier_ok(dev)) @@ -841,7 +841,6 @@ QETH_DBF_TEXT(TRACE, 4, "qethstop"); netif_tx_disable(dev); - card->dev->flags &= ~IFF_UP; if (card->state == CARD_STATE_UP) card->state = CARD_STATE_SOFTSETUP; return 0; @@ -1138,9 +1137,13 @@ if (!rc) PRINT_INFO("Device %s successfully recovered!\n", CARD_BUS_ID(card)); - else + else { + rtnl_lock(); + dev_close(card->dev); + rtnl_unlock(); PRINT_INFO("Device %s could not be recovered!\n", CARD_BUS_ID(card)); + } return 0; } Index: git_linus/drivers/s390/net/qeth_l3_main.c =================================================================== --- git_linus.orig/drivers/s390/net/qeth_l3_main.c 2008-09-17 13:46:00.000000000 +0200 +++ git_linus/drivers/s390/net/qeth_l3_main.c 2008-09-19 11:08:55.000000000 +0200 @@ -2795,7 +2795,6 @@ return -ENODEV; card->data.state = CH_STATE_UP; card->state = CARD_STATE_UP; - card->dev->flags |= IFF_UP; netif_start_queue(dev); if (!card->lan_online && netif_carrier_ok(dev)) @@ -2809,7 +2808,6 @@ QETH_DBF_TEXT(TRACE, 4, "qethstop"); netif_tx_disable(dev); - card->dev->flags &= ~IFF_UP; if (card->state == CARD_STATE_UP) card->state = CARD_STATE_SOFTSETUP; return 0; @@ -3218,9 +3216,13 @@ if (!rc) PRINT_INFO("Device %s successfully recovered!\n", CARD_BUS_ID(card)); - else + else { + rtnl_lock(); + dev_close(card->dev); + rtnl_unlock(); PRINT_INFO("Device %s could not be recovered!\n", CARD_BUS_ID(card)); + } return 0; } -- ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch 2/2] qeth: avoid qeth recovery problems 2008-09-19 10:56 ` [patch 2/2] qeth: avoid qeth recovery problems frank.blaschka @ 2008-09-25 0:52 ` Jeff Garzik 0 siblings, 0 replies; 4+ messages in thread From: Jeff Garzik @ 2008-09-25 0:52 UTC (permalink / raw) To: frank.blaschka; +Cc: netdev, linux-s390, Ursula Braun frank.blaschka@de.ibm.com wrote: > From: Ursula Braun <ursula.braun@de.ibm.com> > > Do not touch IFF_UP flag during qeth recovery, but invoke dev_close() > in case of failing recovery. > Cancel outstanding control commands in case of Data Checks or > Channel Checks. > Do not invoke qeth_l2_del_all_mc() in case of a hard stop to speed up > removal of qeth devices. > > Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com> > Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com> > --- > > drivers/s390/net/qeth_core_main.c | 4 +++- > drivers/s390/net/qeth_l2_main.c | 11 +++++++---- > drivers/s390/net/qeth_l3_main.c | 8 +++++--- > 3 files changed, 15 insertions(+), 8 deletions(-) > > Index: git_linus/drivers/s390/net/qeth_core_main.c > =================================================================== > --- git_linus.orig/drivers/s390/net/qeth_core_main.c 2008-09-17 13:46:00.000000000 +0200 > +++ git_linus/drivers/s390/net/qeth_core_main.c 2008-09-19 11:08:55.000000000 +0200 > @@ -760,7 +760,7 @@ > if (sense[SENSE_COMMAND_REJECT_BYTE] & > SENSE_COMMAND_REJECT_FLAG) { > QETH_DBF_TEXT(TRACE, 2, "CMDREJi"); > - return 0; > + return 1; > } > if ((sense[2] == 0xaf) && (sense[3] == 0xfe)) { > QETH_DBF_TEXT(TRACE, 2, "AFFE"); > @@ -884,6 +884,7 @@ > } > rc = qeth_get_problem(cdev, irb); > if (rc) { > + qeth_clear_ipacmd_list(card); > qeth_schedule_recovery(card); > goto out; > } > @@ -4147,6 +4148,7 @@ > unsigned long flags; > struct qeth_card *card = dev_get_drvdata(&gdev->dev); > > + QETH_DBF_TEXT(SETUP, 2, "removedv"); > if (card->discipline.ccwgdriver) { > card->discipline.ccwgdriver->remove(gdev); > qeth_core_free_discipline(card); > Index: git_linus/drivers/s390/net/qeth_l2_main.c > =================================================================== > --- git_linus.orig/drivers/s390/net/qeth_l2_main.c 2008-09-19 11:08:36.000000000 +0200 > +++ git_linus/drivers/s390/net/qeth_l2_main.c 2008-09-19 11:08:55.000000000 +0200 > @@ -395,7 +395,8 @@ > } > if (card->state == CARD_STATE_SOFTSETUP) { > qeth_l2_process_vlans(card, 1); > - qeth_l2_del_all_mc(card); > + if (!card->use_hard_stop) > + qeth_l2_del_all_mc(card); > qeth_clear_ipacmd_list(card); > card->state = CARD_STATE_HARDSETUP; > } > @@ -826,7 +827,6 @@ > } > card->data.state = CH_STATE_UP; > card->state = CARD_STATE_UP; > - card->dev->flags |= IFF_UP; > netif_start_queue(dev); > > if (!card->lan_online && netif_carrier_ok(dev)) > @@ -841,7 +841,6 @@ > > QETH_DBF_TEXT(TRACE, 4, "qethstop"); > netif_tx_disable(dev); > - card->dev->flags &= ~IFF_UP; > if (card->state == CARD_STATE_UP) > card->state = CARD_STATE_SOFTSETUP; > return 0; > @@ -1138,9 +1137,13 @@ > if (!rc) > PRINT_INFO("Device %s successfully recovered!\n", > CARD_BUS_ID(card)); > - else > + else { > + rtnl_lock(); > + dev_close(card->dev); > + rtnl_unlock(); > PRINT_INFO("Device %s could not be recovered!\n", > CARD_BUS_ID(card)); > + } > return 0; > } > > Index: git_linus/drivers/s390/net/qeth_l3_main.c > =================================================================== > --- git_linus.orig/drivers/s390/net/qeth_l3_main.c 2008-09-17 13:46:00.000000000 +0200 > +++ git_linus/drivers/s390/net/qeth_l3_main.c 2008-09-19 11:08:55.000000000 +0200 > @@ -2795,7 +2795,6 @@ > return -ENODEV; > card->data.state = CH_STATE_UP; > card->state = CARD_STATE_UP; > - card->dev->flags |= IFF_UP; > netif_start_queue(dev); > > if (!card->lan_online && netif_carrier_ok(dev)) > @@ -2809,7 +2808,6 @@ > > QETH_DBF_TEXT(TRACE, 4, "qethstop"); > netif_tx_disable(dev); > - card->dev->flags &= ~IFF_UP; > if (card->state == CARD_STATE_UP) > card->state = CARD_STATE_SOFTSETUP; > return 0; > @@ -3218,9 +3216,13 @@ > if (!rc) > PRINT_INFO("Device %s successfully recovered!\n", > CARD_BUS_ID(card)); > - else > + else { > + rtnl_lock(); > + dev_close(card->dev); > + rtnl_unlock(); > PRINT_INFO("Device %s could not be recovered!\n", > CARD_BUS_ID(card)); > + } > return 0; applied 1-2 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-09-25 0:52 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-09-19 10:56 [patch 0/2] s390: qeth fixes 2.6.27-rc6 frank.blaschka 2008-09-19 10:56 ` [patch 1/2] qeth: use firmware MAC-address for layer2 hsi-devices frank.blaschka 2008-09-19 10:56 ` [patch 2/2] qeth: avoid qeth recovery problems frank.blaschka 2008-09-25 0:52 ` Jeff Garzik
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).