X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Ffailsafe%2Ffailsafe_ether.c;h=0c0748f5cfd6a982ac8dc6449ac7bbd42d00a32f;hb=24c14430cdc4556a30a1e608f67230e881718f7f;hp=a3a8cce95301e7275bafda9c153c3f2cfd19341a;hpb=2cc52cd76dff6387cb9bf0dcc0449a500d02fe8b;p=dpdk.git diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index a3a8cce953..0c0748f5cf 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -203,6 +203,7 @@ fs_eth_dev_conf_apply(struct rte_eth_dev *dev, ether_format_addr(ea_fmt, ETHER_ADDR_FMT_SIZE, ea); ERROR("Adding MAC address %s failed", ea_fmt); + return ret; } } /* VLAN filter */ @@ -308,6 +309,14 @@ fs_dev_remove(struct sub_device *sdev) failsafe_hotplug_alarm_install(sdev->fs_dev); } +static void +fs_dev_stats_save(struct sub_device *sdev) +{ + failsafe_stats_increment(&PRIV(sdev->fs_dev)->stats_accumulator, + &sdev->stats_snapshot); + memset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats)); +} + static inline int fs_rxtx_clean(struct sub_device *sdev) { @@ -329,8 +338,10 @@ failsafe_dev_remove(struct rte_eth_dev *dev) uint8_t i; FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) - if (sdev->remove && fs_rxtx_clean(sdev)) + if (sdev->remove && fs_rxtx_clean(sdev)) { + fs_dev_stats_save(sdev); fs_dev_remove(sdev); + } } int @@ -399,6 +410,29 @@ err_remove: return ret; } +void +failsafe_stats_increment(struct rte_eth_stats *to, struct rte_eth_stats *from) +{ + uint32_t i; + + RTE_ASSERT(to != NULL && from != NULL); + to->ipackets += from->ipackets; + to->opackets += from->opackets; + to->ibytes += from->ibytes; + to->obytes += from->obytes; + to->imissed += from->imissed; + to->ierrors += from->ierrors; + to->oerrors += from->oerrors; + to->rx_nombuf += from->rx_nombuf; + for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS; i++) { + to->q_ipackets[i] += from->q_ipackets[i]; + to->q_opackets[i] += from->q_opackets[i]; + to->q_ibytes[i] += from->q_ibytes[i]; + to->q_obytes[i] += from->q_obytes[i]; + to->q_errors[i] += from->q_errors[i]; + } +} + int failsafe_eth_rmv_event_callback(uint8_t port_id __rte_unused, enum rte_eth_event_type event __rte_unused,