For eth dev, dpdk X_rx_queue_start function will pre alloc mbufs for rxq, if n_mbufs < n_rxq * rxq_size, the dev maybe start error because of it cannot allocate memory. If dmp->mp is not NULL, the new mempool should be enough, so that the dev will not be broken due to configuration changes.
Signed-off-by: yangchang <[email protected]> --- Notes: v3: - change some compilation errors v4: - add to determine whether mp is empty - correct spelling errors - change “break” to "return" lib/netdev-dpdk.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 72e7a32..c04b824 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -757,6 +757,19 @@ dpdk_mp_create(struct netdev_dpdk *dev, int mtu) n_mbufs = dpdk_calculate_mbufs(dev, mtu); do { + /* For eth dev, dpdk X_rx_queue_start function will pre alloc mbuf + * for rxq, if n_mbufs < n_rxq * rxq_size, dev maybe start error + * because of it cannot allocate memory. + */ + if (!per_port_memory && dev->type == DPDK_DEV_ETH && dmp->mp && + n_mbufs < dev->requested_n_rxq * dev->requested_rxq_size) { + VLOG_ERR("Port %s: a mempool of %u mbufs is not enough " + "for %d Rx queues of %d queue size", + netdev_name, n_mbufs, dev->requested_n_rxq, + dev->requested_rxq_size); + return NULL; + /* Full DPDK memory pool name must be unique and cannot be * longer than RTE_MEMPOOL_NAMESIZE. Note that for the shared * mempool case this can result in one device using a mempool -- 1.8.3.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
