diff options
| -rw-r--r-- | drivers/net/ehea/ehea.h | 2 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_main.c | 37 |
2 files changed, 20 insertions, 19 deletions
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index 6628fa622e2c..489c8b260dd8 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
| 40 | 40 | ||
| 41 | #define DRV_NAME "ehea" | 41 | #define DRV_NAME "ehea" |
| 42 | #define DRV_VERSION "EHEA_0070" | 42 | #define DRV_VERSION "EHEA_0071" |
| 43 | 43 | ||
| 44 | /* eHEA capability flags */ | 44 | /* eHEA capability flags */ |
| 45 | #define DLPAR_PORT_ADD_REM 1 | 45 | #define DLPAR_PORT_ADD_REM 1 |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 1d1571cf322e..4c70a9301c1b 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
| @@ -466,6 +466,8 @@ static struct ehea_cqe *ehea_proc_rwqes(struct net_device *dev, | |||
| 466 | cqe->vlan_tag); | 466 | cqe->vlan_tag); |
| 467 | else | 467 | else |
| 468 | netif_receive_skb(skb); | 468 | netif_receive_skb(skb); |
| 469 | |||
| 470 | dev->last_rx = jiffies; | ||
| 469 | } else { | 471 | } else { |
| 470 | pr->p_stats.poll_receive_errors++; | 472 | pr->p_stats.poll_receive_errors++; |
| 471 | port_reset = ehea_treat_poll_error(pr, rq, cqe, | 473 | port_reset = ehea_treat_poll_error(pr, rq, cqe, |
| @@ -1433,7 +1435,8 @@ static int ehea_broadcast_reg_helper(struct ehea_port *port, u32 hcallid) | |||
| 1433 | port->logical_port_id, | 1435 | port->logical_port_id, |
| 1434 | reg_type, port->mac_addr, 0, hcallid); | 1436 | reg_type, port->mac_addr, 0, hcallid); |
| 1435 | if (hret != H_SUCCESS) { | 1437 | if (hret != H_SUCCESS) { |
| 1436 | ehea_error("reg_dereg_bcmc failed (tagged)"); | 1438 | ehea_error("%sregistering bc address failed (tagged)", |
| 1439 | hcallid == H_REG_BCMC ? "" : "de"); | ||
| 1437 | ret = -EIO; | 1440 | ret = -EIO; |
| 1438 | goto out_herr; | 1441 | goto out_herr; |
| 1439 | } | 1442 | } |
| @@ -1444,7 +1447,8 @@ static int ehea_broadcast_reg_helper(struct ehea_port *port, u32 hcallid) | |||
| 1444 | port->logical_port_id, | 1447 | port->logical_port_id, |
| 1445 | reg_type, port->mac_addr, 0, hcallid); | 1448 | reg_type, port->mac_addr, 0, hcallid); |
| 1446 | if (hret != H_SUCCESS) { | 1449 | if (hret != H_SUCCESS) { |
| 1447 | ehea_error("reg_dereg_bcmc failed (vlan)"); | 1450 | ehea_error("%sregistering bc address failed (vlan)", |
| 1451 | hcallid == H_REG_BCMC ? "" : "de"); | ||
| 1448 | ret = -EIO; | 1452 | ret = -EIO; |
| 1449 | } | 1453 | } |
| 1450 | out_herr: | 1454 | out_herr: |
| @@ -2170,7 +2174,6 @@ static int ehea_up(struct net_device *dev) | |||
| 2170 | { | 2174 | { |
| 2171 | int ret, i; | 2175 | int ret, i; |
| 2172 | struct ehea_port *port = netdev_priv(dev); | 2176 | struct ehea_port *port = netdev_priv(dev); |
| 2173 | u64 mac_addr = 0; | ||
| 2174 | 2177 | ||
| 2175 | if (port->state == EHEA_PORT_UP) | 2178 | if (port->state == EHEA_PORT_UP) |
| 2176 | return 0; | 2179 | return 0; |
| @@ -2189,18 +2192,10 @@ static int ehea_up(struct net_device *dev) | |||
| 2189 | goto out_clean_pr; | 2192 | goto out_clean_pr; |
| 2190 | } | 2193 | } |
| 2191 | 2194 | ||
| 2192 | ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); | ||
| 2193 | if (ret) { | ||
| 2194 | ret = -EIO; | ||
| 2195 | ehea_error("out_clean_pr"); | ||
| 2196 | goto out_clean_pr; | ||
| 2197 | } | ||
| 2198 | mac_addr = (*(u64*)dev->dev_addr) >> 16; | ||
| 2199 | |||
| 2200 | ret = ehea_reg_interrupts(dev); | 2195 | ret = ehea_reg_interrupts(dev); |
| 2201 | if (ret) { | 2196 | if (ret) { |
| 2202 | ehea_error("out_dereg_bc"); | 2197 | ehea_error("reg_interrupts failed. ret:%d", ret); |
| 2203 | goto out_dereg_bc; | 2198 | goto out_clean_pr; |
| 2204 | } | 2199 | } |
| 2205 | 2200 | ||
| 2206 | for(i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) { | 2201 | for(i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) { |
| @@ -2226,9 +2221,6 @@ static int ehea_up(struct net_device *dev) | |||
| 2226 | out_free_irqs: | 2221 | out_free_irqs: |
| 2227 | ehea_free_interrupts(dev); | 2222 | ehea_free_interrupts(dev); |
| 2228 | 2223 | ||
| 2229 | out_dereg_bc: | ||
| 2230 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
| 2231 | |||
| 2232 | out_clean_pr: | 2224 | out_clean_pr: |
| 2233 | ehea_clean_all_portres(port); | 2225 | ehea_clean_all_portres(port); |
| 2234 | out: | 2226 | out: |
| @@ -2273,7 +2265,6 @@ static int ehea_down(struct net_device *dev) | |||
| 2273 | &port->port_res[i].d_netdev->state)) | 2265 | &port->port_res[i].d_netdev->state)) |
| 2274 | msleep(1); | 2266 | msleep(1); |
| 2275 | 2267 | ||
| 2276 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
| 2277 | port->state = EHEA_PORT_DOWN; | 2268 | port->state = EHEA_PORT_DOWN; |
| 2278 | 2269 | ||
| 2279 | ret = ehea_clean_all_portres(port); | 2270 | ret = ehea_clean_all_portres(port); |
| @@ -2655,12 +2646,18 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter, | |||
| 2655 | 2646 | ||
| 2656 | INIT_WORK(&port->reset_task, ehea_reset_port); | 2647 | INIT_WORK(&port->reset_task, ehea_reset_port); |
| 2657 | 2648 | ||
| 2649 | ret = ehea_broadcast_reg_helper(port, H_REG_BCMC); | ||
| 2650 | if (ret) { | ||
| 2651 | ret = -EIO; | ||
| 2652 | goto out_unreg_port; | ||
| 2653 | } | ||
| 2654 | |||
| 2658 | ehea_set_ethtool_ops(dev); | 2655 | ehea_set_ethtool_ops(dev); |
| 2659 | 2656 | ||
| 2660 | ret = register_netdev(dev); | 2657 | ret = register_netdev(dev); |
| 2661 | if (ret) { | 2658 | if (ret) { |
| 2662 | ehea_error("register_netdev failed. ret=%d", ret); | 2659 | ehea_error("register_netdev failed. ret=%d", ret); |
| 2663 | goto out_unreg_port; | 2660 | goto out_dereg_bc; |
| 2664 | } | 2661 | } |
| 2665 | 2662 | ||
| 2666 | ret = ehea_get_jumboframe_status(port, &jumbo); | 2663 | ret = ehea_get_jumboframe_status(port, &jumbo); |
| @@ -2675,6 +2672,9 @@ struct ehea_port *ehea_setup_single_port(struct ehea_adapter *adapter, | |||
| 2675 | 2672 | ||
| 2676 | return port; | 2673 | return port; |
| 2677 | 2674 | ||
| 2675 | out_dereg_bc: | ||
| 2676 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
| 2677 | |||
| 2678 | out_unreg_port: | 2678 | out_unreg_port: |
| 2679 | ehea_unregister_port(port); | 2679 | ehea_unregister_port(port); |
| 2680 | 2680 | ||
| @@ -2694,6 +2694,7 @@ static void ehea_shutdown_single_port(struct ehea_port *port) | |||
| 2694 | { | 2694 | { |
| 2695 | unregister_netdev(port->netdev); | 2695 | unregister_netdev(port->netdev); |
| 2696 | ehea_unregister_port(port); | 2696 | ehea_unregister_port(port); |
| 2697 | ehea_broadcast_reg_helper(port, H_DEREG_BCMC); | ||
| 2697 | kfree(port->mc_list); | 2698 | kfree(port->mc_list); |
| 2698 | free_netdev(port->netdev); | 2699 | free_netdev(port->netdev); |
| 2699 | port->adapter->active_ports--; | 2700 | port->adapter->active_ports--; |
