X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdpdk%2Fdevice%2Fdpdk_priv.h;h=a86a1aba7ec39d67605f875bf09075b6a075f439;hb=4e96ddaec8837b8c0bd27a75418e033da68e299b;hp=e0e068269352603bab11ec5538d253f91fccb415;hpb=910d3694e8b22c9d14e5f2913d14ae149e184620;p=vpp.git diff --git a/src/plugins/dpdk/device/dpdk_priv.h b/src/plugins/dpdk/device/dpdk_priv.h index e0e06826935..a86a1aba7ec 100644 --- a/src/plugins/dpdk/device/dpdk_priv.h +++ b/src/plugins/dpdk/device/dpdk_priv.h @@ -47,31 +47,32 @@ _(huge-dir) \ _(proc-type) \ _(file-prefix) \ _(vdev) \ -_(log-level) +_(log-level) \ +_(iova-mode) static inline void dpdk_get_xstats (dpdk_device_t * xd) { + int len, ret; + if (!(xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP)) return; - int len; - if ((len = rte_eth_xstats_get (xd->port_id, NULL, 0)) > 0) - { - vec_validate (xd->xstats, len - 1); - vec_validate (xd->last_cleared_xstats, len - 1); - len = - rte_eth_xstats_get (xd->port_id, xd->xstats, vec_len (xd->xstats)); - - ASSERT (vec_len (xd->xstats) == len); - ASSERT (vec_len (xd->last_cleared_xstats) == len); + len = rte_eth_xstats_get (xd->port_id, NULL, 0); + if (len < 0) + return; - _vec_len (xd->xstats) = len; - _vec_len (xd->last_cleared_xstats) = len; + vec_validate (xd->xstats, len - 1); + ret = rte_eth_xstats_get (xd->port_id, xd->xstats, len); + if (ret < 0 || ret > len) + { + _vec_len (xd->xstats) = 0; + return; } -} + _vec_len (xd->xstats) = len; +} static inline void dpdk_update_counters (dpdk_device_t * xd, f64 now)