On Sat, 2 Jan 2016 19:45:40 +0100
Jan Viktorin <viktorin at rehivetech.com> wrote:

> > 
> > Do you consider this will break binary compatibility since
> > sizeof (rte_soc_addr) is PATH_MAX (1024) and the other elements of the
> > union inside rte_devargs are much smaller (like 32 bytes).
> >   
> 
> I had a bad feeling about this... Originally, I started with a pointer
> 'const char *' so it can be done that way... However, this brings
> compilator mad as it does not allow to cast char * -> const char *
> because of the strict DPDK compilation settings. I didn't find any
> workaround yet. I think I can make it just 'char *' for the next version
> of the patch set.

Having rte_devargs to contain only char * instead of char[PATH_MAX]
brings an issue. There is no common devargs_free function. Inside the
function rte_eal_devargs_add, I must malloc memory here to fill the
devtree_path. But there is no general way to free it. At least, I
didn't find such code... I need to do this:

108         case RTE_DEVTYPE_WHITELISTED_SOC:
109         case RTE_DEVTYPE_BLACKLISTED_SOC:
110                 devargs->soc.addr.devtree_path = strdup(buf);

because the buf variable is deallocated at the end of the function.

In fact, I do not clearly understand the rte_eal_devargs_add function.
What is the expected input? The call to rte_eal_parse_devargs_str
separates the string into drvname and drvargs. What are the drvargs
supposted to be? I'd expect the user types -w <deviceid> or -b <deviceid>
(for PCI <deviceid> is the quaternion, for SoC it's the device-tree
path).

Regards
Jan

-- 
  Jan Viktorin                E-mail: Viktorin at RehiveTech.com
  System Architect            Web:    www.RehiveTech.com
  RehiveTech
  Brno, Czech Republic

Reply via email to