On 10/19/17, 9:56 AM, "ovs-dev-boun...@openvswitch.org on behalf of 
antonio.fische...@intel.com" <ovs-dev-boun...@openvswitch.org on behalf of 
antonio.fische...@intel.com> wrote:

    In case a mempool name could not be generated log a message
    and return a null mempool pointer to the caller.
    
    CC: Mark B Kavanagh <mark.b.kavan...@intel.com>
    CC: Darrell Ball <dlu...@gmail.com>
    CC: Ciara Loftus <ciara.lof...@intel.com>
    CC: Kevin Traynor <ktray...@redhat.com>
    CC: Aaron Conole <acon...@redhat.com>
    Fixes: d555d9bded5f ("netdev-dpdk: Create separate memory pool for each 
port.")
    Signed-off-by: Antonio Fischetti <antonio.fische...@intel.com>
    ---
     lib/netdev-dpdk.c | 7 +++++++
     1 file changed, 7 insertions(+)
    
    diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
    index dc1e9c3..6fc6e1b 100644
    --- a/lib/netdev-dpdk.c
    +++ b/lib/netdev-dpdk.c
    @@ -502,6 +502,9 @@ dpdk_mp_name(struct dpdk_mp *dmp)
         int ret = snprintf(mp_name, RTE_MEMPOOL_NAMESIZE, "ovs_%x_%d_%d_%u",
                            h, dmp->socket_id, dmp->mtu, dmp->mp_size);
         if (ret < 0 || ret >= RTE_MEMPOOL_NAMESIZE) {

I see you copied me on an earlier version, so I’ll add one comment.
Given MTU size restriction for dpdk and rte max queues and max buf desc 
enforcement, can this condition be met ?
I think there are 11 remaining characters (out of 31) for mp_size and the 
calculation is 

dmp->mp_size = dev->requested_n_rxq * dev->requested_rxq_size
            + dev->requested_n_txq * dev->requested_txq_size
            + MIN(RTE_MAX_LCORE, dev->requested_n_rxq) * NETDEV_MAX_BURST
            + MIN_NB_MBUF;

I got 9 decimal digits max, assuming my math is correct…

Previous filtering for mtu (netdev_dpdk_set_mtu) and max queues 
(dpdk_eth_dev_init)/max buf desc (dpdk_process_queue_size)
enforcement (present and also any future design) should prevent snprintf from 
having an unexpected return value number of chars, which would
mean snprintf should only have an unexpected return value number of chars, if a 
future coding error were to be introduced.
FYI, OVS traditionally deals with other such cases with ovs_assert(), not a 
VLOG_DBG, since it is easier to find the bug earlier.
I believe snprintf at this level should not be catching user config errors.



    +        VLOG_DBG("snprintf returned %d. Failed to generate a mempool "
    +            "name for \"%s\". Hash:0x%x, mtu:%d, mbufs:%u.",
    +            ret, dmp->if_name, h, dmp->mtu, dmp->mp_size);
             return NULL;
         }
         return mp_name;
    @@ -533,6 +536,10 @@ dpdk_mp_create(struct netdev_dpdk *dev, int mtu, bool 
*mp_exists)
     
         do {
             char *mp_name = dpdk_mp_name(dmp);
    +        if (!mp_name) {
    +            rte_free(dmp);
    +            return NULL;
    +        }
     
             VLOG_DBG("Port %s: Requesting a mempool of %u mbufs "
                       "on socket %d for %d Rx and %d Tx queues.",
    -- 
    2.4.11
    
    _______________________________________________
    dev mailing list
    d...@openvswitch.org
    
https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=cKHgut93ZGYQzoLXpXQWPqcZhBX3NMdQaRnbNlfvhiU&s=tx4JYNmCFZ-vgGQzTIteThFJN2RSlMtqg34oTwlFEF0&e=
    

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to