[ovs-dev] [PATCH v2 1/3] netdev-dpdk: Fix double attaching of virtual devices.

Darrell Ball dball at vmware.com
Wed May 17 15:01:55 UTC 2017



On 5/17/17, 4:16 AM, "Ilya Maximets" <i.maximets at samsung.com> wrote:

    On 17.05.2017 08:53, Ilya Maximets wrote:
    > Hi Darrell,
    > 
    > Good catch. Thanks. One comment inline.
    > 
    > Best regards, Ilya Maximets.
    > 
    > On 16.05.2017 20:14, Darrell Ball wrote:
    >> I applied the following incremental to fix a missing free on error, but otherwise is fine 
    >> Can you fold in the incremental.
    >>
    >>
    >> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
    >> index 56b9d25..25d9c9b 100644
    >> --- a/lib/netdev-dpdk.c
    >> +++ b/lib/netdev-dpdk.c
    >> @@ -1128,7 +1128,7 @@ netdev_dpdk_process_devargs(const char *devargs, char **errp)
    >>          } else {
    >>              /* Attach unsuccessful */
    >>              VLOG_WARN_BUF(errp, "Error attaching device '%s' to DPDK", devargs);
    >> -            return -1;
    >> +            new_port_id = UINT8_MAX;
    > 
    > 'rte_eth_dev_get_port_by_name' and 'rte_eth_dev_attach' set a valid
    > 'new_port_id' only on success. So, we don't need to reinitialize it
    > here. Just removing of return should be enough.
    
    I just found that this change also was mistakenly moved to the third patch.
    Oh.. Kind of bad luck with splitting of this patches.
    Also, I think, I'll keep this reinitialization just to make code more clear.

In your previous response, you were arguing that removing the return was good
enough. Now, you are saying the re-initialization is ok since you had something 
similar in your 3rd patch – hmm, fine.

    
    >>          }
    >>      }
    >>
    >>
    >> On 5/12/17, 8:10 AM, "Ilya Maximets" <i.maximets at samsung.com> wrote:
    >>
    >>     'devargs' for virtual devices contains not only name but
    >>     also a list of arguments like this:
    >>     
    >>     	'net_pcap0,rx_pcap=file_rx.pcap,tx_pcap=file_tx.pcap'
    >>     	or
    >>     	'eth_af_packet0,iface=eth0'
    >>     
    >>     We must cut off the arguments from this string before calling
    >>     'rte_eth_dev_get_port_by_name()' to avoid double attaching of
    >>     the same device.
    >>     
    >>     CC: Ciara Loftus <ciara.loftus at intel.com>
    >>     Fixes: 69876ed78611 ("netdev-dpdk: Add support for virtual DPDK PMDs (vdevs)")
    >>     Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
    >>     ---
    >>     
    >>      lib/netdev-dpdk.c | 5 ++++-
    >>      1 file changed, 4 insertions(+), 1 deletion(-)
    >>     
    >>     diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
    >>     index 609b8da..56b9d25 100644
    >>     --- a/lib/netdev-dpdk.c
    >>     +++ b/lib/netdev-dpdk.c
    >>     @@ -1114,10 +1114,12 @@ netdev_dpdk_lookup_by_port_id(int port_id)
    >>      static int
    >>      netdev_dpdk_process_devargs(const char *devargs, char **errp)
    >>      {
    >>     +    /* Get the name up to the first comma. */
    >>     +    char *name = xmemdup0(devargs, strcspn(devargs, ","));
    >>          uint8_t new_port_id = UINT8_MAX;
    >>      
    >>          if (!rte_eth_dev_count()
    >>     -            || rte_eth_dev_get_port_by_name(devargs, &new_port_id)
    >>     +            || rte_eth_dev_get_port_by_name(name, &new_port_id)
    >>                  || !rte_eth_dev_is_valid_port(new_port_id)) {
    >>              /* Device not found in DPDK, attempt to attach it */
    >>              if (!rte_eth_dev_attach(devargs, &new_port_id)) {
    >>     @@ -1130,6 +1132,7 @@ netdev_dpdk_process_devargs(const char *devargs, char **errp)
    >>              }
    >>          }
    >>      
    >>     +    free(name);
    >>          return new_port_id;
    >>      }
    >>      
    >>     -- 
    >>     2.7.4
    >>     
    >>     
    >>
    



More information about the dev mailing list