On Mon, 27 Jan 2025 17:35:06 -0800
lon...@linuxonhyperv.com wrote:

> @@ -1409,9 +1424,6 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev)
>       ret_stop = hn_dev_stop(eth_dev);
>       hn_dev_close(eth_dev);
>  
> -     free(hv->vf_devargs);
> -     hv->vf_devargs = NULL;
> -
>       hn_detach(hv);
>       hn_chim_uninit(eth_dev);
>       rte_vmbus_chan_close(hv->channels[0]);
> @@ -1423,6 +1435,61 @@ eth_hn_dev_uninit(struct rte_eth_dev *eth_dev)
>       return ret_stop;
>  }
>  
> +static int populate_cache_list(void)
> +{
> +     int ret;
> +     struct rte_devargs *da;
> +
> +     rte_spinlock_lock(&netvsc_lock);
> +     da_cache_usage++;
> +     if (da_cache_usage > 1) {
> +             ret = 0;
> +             goto out;
> +     }
> +
> +     LIST_INIT(&da_cache_list);
> +     RTE_EAL_DEVARGS_FOREACH("pci", da) {
> +             struct da_cache *cache;
> +
> +             cache = rte_zmalloc("NETVSC-HOTADD", sizeof(*cache), 
> rte_mem_page_size());
> +             if (!cache) {
> +                     ret = -ENOMEM;
> +                     goto out;
> +             }
> +
> +             strncpy(cache->name, da->name, sizeof(da->name));
> +             cache->drv_str = strdup(da->drv_str);
> +             if (!cache->drv_str) {
> +                     rte_free(cache);
> +                     ret = -ENOMEM;
> +                     goto out;
> +             }
> +
> +             LIST_INSERT_HEAD(&da_cache_list, cache, list);
> +     }

Why do you need to cache entry to be page aligned, that seems unnecessary 
wasteful?
Why does it need to be huge pages? versus normal malloc?
The string is coming from malloc (strdup) so it can't be used by secondary 
process.

Since you are allocating a devargs cache entry, you could just as well use
flexible array where entry was like:
struct da_cache {
        LIST_ENTRY(da_cache) list;
        char name[RTE_DEV_NAME_MAX_LEN];
        char drv_str[];
};


        cache = malloc(sizeof(*cache) + strlen(da->drv_str) + 1);
...
        strcpy(cache->drv_str, da->drv_str);

Reply via email to