diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/ehea/ehea.h | 2 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_main.c | 32 |
2 files changed, 28 insertions, 6 deletions
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index 1321cb6401cf..8e745e74828d 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h | |||
| @@ -396,7 +396,9 @@ struct ehea_port_res { | |||
| 396 | int swqe_ll_count; | 396 | int swqe_ll_count; |
| 397 | u32 swqe_id_counter; | 397 | u32 swqe_id_counter; |
| 398 | u64 tx_packets; | 398 | u64 tx_packets; |
| 399 | u64 tx_bytes; | ||
| 399 | u64 rx_packets; | 400 | u64 rx_packets; |
| 401 | u64 rx_bytes; | ||
| 400 | u32 poll_counter; | 402 | u32 poll_counter; |
| 401 | struct net_lro_mgr lro_mgr; | 403 | struct net_lro_mgr lro_mgr; |
| 402 | struct net_lro_desc lro_desc[MAX_LRO_DESCRIPTORS]; | 404 | struct net_lro_desc lro_desc[MAX_LRO_DESCRIPTORS]; |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index e59d38629099..182b2a7be8dc 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
| @@ -330,7 +330,7 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev) | |||
| 330 | struct ehea_port *port = netdev_priv(dev); | 330 | struct ehea_port *port = netdev_priv(dev); |
| 331 | struct net_device_stats *stats = &port->stats; | 331 | struct net_device_stats *stats = &port->stats; |
| 332 | struct hcp_ehea_port_cb2 *cb2; | 332 | struct hcp_ehea_port_cb2 *cb2; |
| 333 | u64 hret, rx_packets, tx_packets; | 333 | u64 hret, rx_packets, tx_packets, rx_bytes = 0, tx_bytes = 0; |
| 334 | int i; | 334 | int i; |
| 335 | 335 | ||
| 336 | memset(stats, 0, sizeof(*stats)); | 336 | memset(stats, 0, sizeof(*stats)); |
| @@ -353,18 +353,22 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev) | |||
| 353 | ehea_dump(cb2, sizeof(*cb2), "net_device_stats"); | 353 | ehea_dump(cb2, sizeof(*cb2), "net_device_stats"); |
| 354 | 354 | ||
| 355 | rx_packets = 0; | 355 | rx_packets = 0; |
| 356 | for (i = 0; i < port->num_def_qps; i++) | 356 | for (i = 0; i < port->num_def_qps; i++) { |
| 357 | rx_packets += port->port_res[i].rx_packets; | 357 | rx_packets += port->port_res[i].rx_packets; |
| 358 | rx_bytes += port->port_res[i].rx_bytes; | ||
| 359 | } | ||
| 358 | 360 | ||
| 359 | tx_packets = 0; | 361 | tx_packets = 0; |
| 360 | for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) | 362 | for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++) { |
| 361 | tx_packets += port->port_res[i].tx_packets; | 363 | tx_packets += port->port_res[i].tx_packets; |
| 364 | tx_bytes += port->port_res[i].tx_bytes; | ||
| 365 | } | ||
| 362 | 366 | ||
| 363 | stats->tx_packets = tx_packets; | 367 | stats->tx_packets = tx_packets; |
| 364 | stats->multicast = cb2->rxmcp; | 368 | stats->multicast = cb2->rxmcp; |
| 365 | stats->rx_errors = cb2->rxuerr; | 369 | stats->rx_errors = cb2->rxuerr; |
| 366 | stats->rx_bytes = cb2->rxo; | 370 | stats->rx_bytes = rx_bytes; |
| 367 | stats->tx_bytes = cb2->txo; | 371 | stats->tx_bytes = tx_bytes; |
| 368 | stats->rx_packets = rx_packets; | 372 | stats->rx_packets = rx_packets; |
| 369 | 373 | ||
| 370 | out_herr: | 374 | out_herr: |
| @@ -703,6 +707,7 @@ static int ehea_proc_rwqes(struct net_device *dev, | |||
| 703 | int skb_arr_rq2_len = pr->rq2_skba.len; | 707 | int skb_arr_rq2_len = pr->rq2_skba.len; |
| 704 | int skb_arr_rq3_len = pr->rq3_skba.len; | 708 | int skb_arr_rq3_len = pr->rq3_skba.len; |
| 705 | int processed, processed_rq1, processed_rq2, processed_rq3; | 709 | int processed, processed_rq1, processed_rq2, processed_rq3; |
| 710 | u64 processed_bytes = 0; | ||
| 706 | int wqe_index, last_wqe_index, rq, port_reset; | 711 | int wqe_index, last_wqe_index, rq, port_reset; |
| 707 | 712 | ||
| 708 | processed = processed_rq1 = processed_rq2 = processed_rq3 = 0; | 713 | processed = processed_rq1 = processed_rq2 = processed_rq3 = 0; |
| @@ -760,6 +765,7 @@ static int ehea_proc_rwqes(struct net_device *dev, | |||
| 760 | processed_rq3++; | 765 | processed_rq3++; |
| 761 | } | 766 | } |
| 762 | 767 | ||
| 768 | processed_bytes += skb->len; | ||
| 763 | ehea_proc_skb(pr, cqe, skb); | 769 | ehea_proc_skb(pr, cqe, skb); |
| 764 | } else { | 770 | } else { |
| 765 | pr->p_stats.poll_receive_errors++; | 771 | pr->p_stats.poll_receive_errors++; |
| @@ -775,6 +781,7 @@ static int ehea_proc_rwqes(struct net_device *dev, | |||
| 775 | lro_flush_all(&pr->lro_mgr); | 781 | lro_flush_all(&pr->lro_mgr); |
| 776 | 782 | ||
| 777 | pr->rx_packets += processed; | 783 | pr->rx_packets += processed; |
| 784 | pr->rx_bytes += processed_bytes; | ||
| 778 | 785 | ||
| 779 | ehea_refill_rq1(pr, last_wqe_index, processed_rq1); | 786 | ehea_refill_rq1(pr, last_wqe_index, processed_rq1); |
| 780 | ehea_refill_rq2(pr, processed_rq2); | 787 | ehea_refill_rq2(pr, processed_rq2); |
| @@ -1509,9 +1516,20 @@ static int ehea_init_port_res(struct ehea_port *port, struct ehea_port_res *pr, | |||
| 1509 | enum ehea_eq_type eq_type = EHEA_EQ; | 1516 | enum ehea_eq_type eq_type = EHEA_EQ; |
| 1510 | struct ehea_qp_init_attr *init_attr = NULL; | 1517 | struct ehea_qp_init_attr *init_attr = NULL; |
| 1511 | int ret = -EIO; | 1518 | int ret = -EIO; |
| 1519 | u64 tx_bytes, rx_bytes, tx_packets, rx_packets; | ||
| 1520 | |||
| 1521 | tx_bytes = pr->tx_bytes; | ||
| 1522 | tx_packets = pr->tx_packets; | ||
| 1523 | rx_bytes = pr->rx_bytes; | ||
| 1524 | rx_packets = pr->rx_packets; | ||
| 1512 | 1525 | ||
| 1513 | memset(pr, 0, sizeof(struct ehea_port_res)); | 1526 | memset(pr, 0, sizeof(struct ehea_port_res)); |
| 1514 | 1527 | ||
| 1528 | pr->tx_bytes = rx_bytes; | ||
| 1529 | pr->tx_packets = tx_packets; | ||
| 1530 | pr->rx_bytes = rx_bytes; | ||
| 1531 | pr->rx_packets = rx_packets; | ||
| 1532 | |||
| 1515 | pr->port = port; | 1533 | pr->port = port; |
| 1516 | spin_lock_init(&pr->xmit_lock); | 1534 | spin_lock_init(&pr->xmit_lock); |
| 1517 | spin_lock_init(&pr->netif_queue); | 1535 | spin_lock_init(&pr->netif_queue); |
| @@ -2254,6 +2272,9 @@ static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 2254 | swqe->vlan_tag = vlan_tx_tag_get(skb); | 2272 | swqe->vlan_tag = vlan_tx_tag_get(skb); |
| 2255 | } | 2273 | } |
| 2256 | 2274 | ||
| 2275 | pr->tx_packets++; | ||
| 2276 | pr->tx_bytes += skb->len; | ||
| 2277 | |||
| 2257 | if (skb->len <= SWQE3_MAX_IMM) { | 2278 | if (skb->len <= SWQE3_MAX_IMM) { |
| 2258 | u32 sig_iv = port->sig_comp_iv; | 2279 | u32 sig_iv = port->sig_comp_iv; |
| 2259 | u32 swqe_num = pr->swqe_id_counter; | 2280 | u32 swqe_num = pr->swqe_id_counter; |
| @@ -2295,7 +2316,6 @@ static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 2295 | } | 2316 | } |
| 2296 | 2317 | ||
| 2297 | ehea_post_swqe(pr->qp, swqe); | 2318 | ehea_post_swqe(pr->qp, swqe); |
| 2298 | pr->tx_packets++; | ||
| 2299 | 2319 | ||
| 2300 | if (unlikely(atomic_read(&pr->swqe_avail) <= 1)) { | 2320 | if (unlikely(atomic_read(&pr->swqe_avail) <= 1)) { |
| 2301 | spin_lock_irqsave(&pr->netif_queue, flags); | 2321 | spin_lock_irqsave(&pr->netif_queue, flags); |
