diff options
| -rw-r--r-- | drivers/s390/net/qeth_main.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index 0f6648fdec1d..9dbb5be2b63c 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
| @@ -3798,11 +3798,11 @@ qeth_open(struct net_device *dev) | |||
| 3798 | QETH_DBF_TEXT(trace,4,"nomacadr"); | 3798 | QETH_DBF_TEXT(trace,4,"nomacadr"); |
| 3799 | return -EPERM; | 3799 | return -EPERM; |
| 3800 | } | 3800 | } |
| 3801 | card->dev->flags |= IFF_UP; | ||
| 3802 | netif_start_queue(dev); | ||
| 3803 | card->data.state = CH_STATE_UP; | 3801 | card->data.state = CH_STATE_UP; |
| 3804 | card->state = CARD_STATE_UP; | 3802 | card->state = CARD_STATE_UP; |
| 3805 | 3803 | card->dev->flags |= IFF_UP; | |
| 3804 | netif_start_queue(dev); | ||
| 3805 | |||
| 3806 | if (!card->lan_online && netif_carrier_ok(dev)) | 3806 | if (!card->lan_online && netif_carrier_ok(dev)) |
| 3807 | netif_carrier_off(dev); | 3807 | netif_carrier_off(dev); |
| 3808 | return 0; | 3808 | return 0; |
| @@ -3958,7 +3958,7 @@ qeth_prepare_skb(struct qeth_card *card, struct sk_buff **skb, | |||
| 3958 | #endif | 3958 | #endif |
| 3959 | *hdr = (struct qeth_hdr *) | 3959 | *hdr = (struct qeth_hdr *) |
| 3960 | qeth_push_skb(card, skb, sizeof(struct qeth_hdr)); | 3960 | qeth_push_skb(card, skb, sizeof(struct qeth_hdr)); |
| 3961 | if (hdr == NULL) | 3961 | if (*hdr == NULL) |
| 3962 | return -EINVAL; | 3962 | return -EINVAL; |
| 3963 | return 0; | 3963 | return 0; |
| 3964 | } | 3964 | } |
| @@ -4416,6 +4416,8 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb) | |||
| 4416 | enum qeth_large_send_types large_send = QETH_LARGE_SEND_NO; | 4416 | enum qeth_large_send_types large_send = QETH_LARGE_SEND_NO; |
| 4417 | struct qeth_eddp_context *ctx = NULL; | 4417 | struct qeth_eddp_context *ctx = NULL; |
| 4418 | int tx_bytes = skb->len; | 4418 | int tx_bytes = skb->len; |
| 4419 | unsigned short nr_frags = skb_shinfo(skb)->nr_frags; | ||
| 4420 | unsigned short tso_size = skb_shinfo(skb)->tso_size; | ||
| 4419 | int rc; | 4421 | int rc; |
| 4420 | 4422 | ||
| 4421 | QETH_DBF_TEXT(trace, 6, "sendpkt"); | 4423 | QETH_DBF_TEXT(trace, 6, "sendpkt"); |
| @@ -4498,16 +4500,16 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb) | |||
| 4498 | card->stats.tx_packets++; | 4500 | card->stats.tx_packets++; |
| 4499 | card->stats.tx_bytes += tx_bytes; | 4501 | card->stats.tx_bytes += tx_bytes; |
| 4500 | #ifdef CONFIG_QETH_PERF_STATS | 4502 | #ifdef CONFIG_QETH_PERF_STATS |
| 4501 | if (skb_shinfo(skb)->tso_size && | 4503 | if (tso_size && |
| 4502 | !(large_send == QETH_LARGE_SEND_NO)) { | 4504 | !(large_send == QETH_LARGE_SEND_NO)) { |
| 4503 | card->perf_stats.large_send_bytes += skb->len; | 4505 | card->perf_stats.large_send_bytes += tx_bytes; |
| 4504 | card->perf_stats.large_send_cnt++; | 4506 | card->perf_stats.large_send_cnt++; |
| 4505 | } | 4507 | } |
| 4506 | if (skb_shinfo(skb)->nr_frags > 0){ | 4508 | if (nr_frags > 0){ |
| 4507 | card->perf_stats.sg_skbs_sent++; | 4509 | card->perf_stats.sg_skbs_sent++; |
| 4508 | /* nr_frags + skb->data */ | 4510 | /* nr_frags + skb->data */ |
| 4509 | card->perf_stats.sg_frags_sent += | 4511 | card->perf_stats.sg_frags_sent += |
| 4510 | skb_shinfo(skb)->nr_frags + 1; | 4512 | nr_frags + 1; |
| 4511 | } | 4513 | } |
| 4512 | #endif /* CONFIG_QETH_PERF_STATS */ | 4514 | #endif /* CONFIG_QETH_PERF_STATS */ |
| 4513 | } | 4515 | } |
| @@ -6370,6 +6372,9 @@ qeth_netdev_init(struct net_device *dev) | |||
| 6370 | if (!(card->info.unique_id & UNIQUE_ID_NOT_BY_CARD)) | 6372 | if (!(card->info.unique_id & UNIQUE_ID_NOT_BY_CARD)) |
| 6371 | card->dev->dev_id = card->info.unique_id & 0xffff; | 6373 | card->dev->dev_id = card->info.unique_id & 0xffff; |
| 6372 | #endif | 6374 | #endif |
| 6375 | if (card->options.fake_ll && | ||
| 6376 | (qeth_get_netdev_flags(card) & IFF_NOARP)) | ||
| 6377 | dev->hard_header = qeth_fake_header; | ||
| 6373 | dev->hard_header_parse = NULL; | 6378 | dev->hard_header_parse = NULL; |
| 6374 | dev->set_mac_address = qeth_layer2_set_mac_address; | 6379 | dev->set_mac_address = qeth_layer2_set_mac_address; |
| 6375 | dev->flags |= qeth_get_netdev_flags(card); | 6380 | dev->flags |= qeth_get_netdev_flags(card); |
| @@ -7031,14 +7036,12 @@ qeth_softsetup_ipv6(struct qeth_card *card) | |||
| 7031 | 7036 | ||
| 7032 | QETH_DBF_TEXT(trace,3,"softipv6"); | 7037 | QETH_DBF_TEXT(trace,3,"softipv6"); |
| 7033 | 7038 | ||
| 7034 | netif_tx_disable(card->dev); | ||
| 7035 | rc = qeth_send_startlan(card, QETH_PROT_IPV6); | 7039 | rc = qeth_send_startlan(card, QETH_PROT_IPV6); |
| 7036 | if (rc) { | 7040 | if (rc) { |
| 7037 | PRINT_ERR("IPv6 startlan failed on %s\n", | 7041 | PRINT_ERR("IPv6 startlan failed on %s\n", |
| 7038 | QETH_CARD_IFNAME(card)); | 7042 | QETH_CARD_IFNAME(card)); |
| 7039 | return rc; | 7043 | return rc; |
| 7040 | } | 7044 | } |
| 7041 | netif_wake_queue(card->dev); | ||
| 7042 | rc = qeth_query_ipassists(card,QETH_PROT_IPV6); | 7045 | rc = qeth_query_ipassists(card,QETH_PROT_IPV6); |
| 7043 | if (rc) { | 7046 | if (rc) { |
| 7044 | PRINT_ERR("IPv6 query ipassist failed on %s\n", | 7047 | PRINT_ERR("IPv6 query ipassist failed on %s\n", |
