diff options
author | Ursula Braun <braunu@de.ibm.com> | 2006-05-24 03:51:11 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-05-26 21:56:40 -0400 |
commit | b85e1fa196da91e07c98eaf014ae773c2a2e0c4f (patch) | |
tree | 30411831501e1af00d4d13b283a70f550c8ab801 /drivers/s390/net | |
parent | 7401a4670f0e81d50dcc4e0a7bd2dcb4a5d65e6b (diff) |
[PATCH] s390: qeth driver fixes
From: Frank Pavlic <fpavlic@de.ibm.com>
- correct checking of sscanf-%n value in qeth_string_to_ipaddr().
- don't use netif_stop_queue outside the hard_start_xmit routine.
Rather use netif_tx_disable.
- don't call qeth_netdev_init on a recovery.
Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r-- | drivers/s390/net/qeth.h | 2 | ||||
-rw-r--r-- | drivers/s390/net/qeth_main.c | 22 |
2 files changed, 12 insertions, 12 deletions
diff --git a/drivers/s390/net/qeth.h b/drivers/s390/net/qeth.h index 4df0fcd7b10b..65e2b1bc08a5 100644 --- a/drivers/s390/net/qeth.h +++ b/drivers/s390/net/qeth.h | |||
@@ -1099,7 +1099,7 @@ qeth_string_to_ipaddr4(const char *buf, __u8 *addr) | |||
1099 | 1099 | ||
1100 | rc = sscanf(buf, "%d.%d.%d.%d%n", | 1100 | rc = sscanf(buf, "%d.%d.%d.%d%n", |
1101 | &in[0], &in[1], &in[2], &in[3], &count); | 1101 | &in[0], &in[1], &in[2], &in[3], &count); |
1102 | if (rc != 4 || count) | 1102 | if (rc != 4 || count<=0) |
1103 | return -EINVAL; | 1103 | return -EINVAL; |
1104 | for (count = 0; count < 4; count++) { | 1104 | for (count = 0; count < 4; count++) { |
1105 | if (in[count] > 255) | 1105 | if (in[count] > 255) |
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index cb14642d97aa..0f6648fdec1d 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -3817,7 +3817,7 @@ qeth_stop(struct net_device *dev) | |||
3817 | 3817 | ||
3818 | card = (struct qeth_card *) dev->priv; | 3818 | card = (struct qeth_card *) dev->priv; |
3819 | 3819 | ||
3820 | netif_stop_queue(dev); | 3820 | netif_tx_disable(dev); |
3821 | card->dev->flags &= ~IFF_UP; | 3821 | card->dev->flags &= ~IFF_UP; |
3822 | if (card->state == CARD_STATE_UP) | 3822 | if (card->state == CARD_STATE_UP) |
3823 | card->state = CARD_STATE_SOFTSETUP; | 3823 | card->state = CARD_STATE_SOFTSETUP; |
@@ -6359,12 +6359,9 @@ qeth_netdev_init(struct net_device *dev) | |||
6359 | dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid; | 6359 | dev->vlan_rx_kill_vid = qeth_vlan_rx_kill_vid; |
6360 | dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid; | 6360 | dev->vlan_rx_add_vid = qeth_vlan_rx_add_vid; |
6361 | #endif | 6361 | #endif |
6362 | dev->hard_header = card->orig_hard_header; | ||
6363 | if (qeth_get_netdev_flags(card) & IFF_NOARP) { | 6362 | if (qeth_get_netdev_flags(card) & IFF_NOARP) { |
6364 | dev->rebuild_header = NULL; | 6363 | dev->rebuild_header = NULL; |
6365 | dev->hard_header = NULL; | 6364 | dev->hard_header = NULL; |
6366 | if (card->options.fake_ll) | ||
6367 | dev->hard_header = qeth_fake_header; | ||
6368 | dev->header_cache_update = NULL; | 6365 | dev->header_cache_update = NULL; |
6369 | dev->hard_header_cache = NULL; | 6366 | dev->hard_header_cache = NULL; |
6370 | } | 6367 | } |
@@ -6477,6 +6474,9 @@ retry: | |||
6477 | /*network device will be recovered*/ | 6474 | /*network device will be recovered*/ |
6478 | if (card->dev) { | 6475 | if (card->dev) { |
6479 | card->dev->hard_header = card->orig_hard_header; | 6476 | card->dev->hard_header = card->orig_hard_header; |
6477 | if (card->options.fake_ll && | ||
6478 | (qeth_get_netdev_flags(card) & IFF_NOARP)) | ||
6479 | card->dev->hard_header = qeth_fake_header; | ||
6480 | return 0; | 6480 | return 0; |
6481 | } | 6481 | } |
6482 | /* at first set_online allocate netdev */ | 6482 | /* at first set_online allocate netdev */ |
@@ -7031,7 +7031,7 @@ qeth_softsetup_ipv6(struct qeth_card *card) | |||
7031 | 7031 | ||
7032 | QETH_DBF_TEXT(trace,3,"softipv6"); | 7032 | QETH_DBF_TEXT(trace,3,"softipv6"); |
7033 | 7033 | ||
7034 | netif_stop_queue(card->dev); | 7034 | netif_tx_disable(card->dev); |
7035 | rc = qeth_send_startlan(card, QETH_PROT_IPV6); | 7035 | rc = qeth_send_startlan(card, QETH_PROT_IPV6); |
7036 | if (rc) { | 7036 | if (rc) { |
7037 | PRINT_ERR("IPv6 startlan failed on %s\n", | 7037 | PRINT_ERR("IPv6 startlan failed on %s\n", |
@@ -7352,7 +7352,8 @@ qeth_set_large_send(struct qeth_card *card, enum qeth_large_send_types type) | |||
7352 | card->options.large_send = type; | 7352 | card->options.large_send = type; |
7353 | return 0; | 7353 | return 0; |
7354 | } | 7354 | } |
7355 | netif_stop_queue(card->dev); | 7355 | if (card->state == CARD_STATE_UP) |
7356 | netif_tx_disable(card->dev); | ||
7356 | card->options.large_send = type; | 7357 | card->options.large_send = type; |
7357 | switch (card->options.large_send) { | 7358 | switch (card->options.large_send) { |
7358 | case QETH_LARGE_SEND_EDDP: | 7359 | case QETH_LARGE_SEND_EDDP: |
@@ -7374,7 +7375,8 @@ qeth_set_large_send(struct qeth_card *card, enum qeth_large_send_types type) | |||
7374 | card->dev->features &= ~(NETIF_F_TSO | NETIF_F_SG); | 7375 | card->dev->features &= ~(NETIF_F_TSO | NETIF_F_SG); |
7375 | break; | 7376 | break; |
7376 | } | 7377 | } |
7377 | netif_wake_queue(card->dev); | 7378 | if (card->state == CARD_STATE_UP) |
7379 | netif_wake_queue(card->dev); | ||
7378 | return rc; | 7380 | return rc; |
7379 | } | 7381 | } |
7380 | 7382 | ||
@@ -7427,7 +7429,7 @@ qeth_softsetup_card(struct qeth_card *card) | |||
7427 | if ((rc = qeth_setrouting_v6(card))) | 7429 | if ((rc = qeth_setrouting_v6(card))) |
7428 | QETH_DBF_TEXT_(setup, 2, "5err%d", rc); | 7430 | QETH_DBF_TEXT_(setup, 2, "5err%d", rc); |
7429 | out: | 7431 | out: |
7430 | netif_stop_queue(card->dev); | 7432 | netif_tx_disable(card->dev); |
7431 | return 0; | 7433 | return 0; |
7432 | } | 7434 | } |
7433 | 7435 | ||
@@ -7736,10 +7738,8 @@ static int | |||
7736 | qeth_register_netdev(struct qeth_card *card) | 7738 | qeth_register_netdev(struct qeth_card *card) |
7737 | { | 7739 | { |
7738 | QETH_DBF_TEXT(setup, 3, "regnetd"); | 7740 | QETH_DBF_TEXT(setup, 3, "regnetd"); |
7739 | if (card->dev->reg_state != NETREG_UNINITIALIZED) { | 7741 | if (card->dev->reg_state != NETREG_UNINITIALIZED) |
7740 | qeth_netdev_init(card->dev); | ||
7741 | return 0; | 7742 | return 0; |
7742 | } | ||
7743 | /* sysfs magic */ | 7743 | /* sysfs magic */ |
7744 | SET_NETDEV_DEV(card->dev, &card->gdev->dev); | 7744 | SET_NETDEV_DEV(card->dev, &card->gdev->dev); |
7745 | return register_netdev(card->dev); | 7745 | return register_netdev(card->dev); |