> Subject: [EXTERNAL] [PATCH 1/4] net/netvsc: scan all net devices under the PCI > device > > From: Long Li <lon...@microsoft.com> > > The current code has the wrong assumption that a PCI device can have only one > Ethernet device. This is not correct as a PCI device can be multi functional > and > have multiple Ethernet devices. > > Fix this by scanning all the devices under a PCI device. > > Fixes: a2a23a794b3a ("net/netvsc: support VF device hot add/remove") > Cc: sta...@dpdk.org > Signed-off-by: Long Li <lon...@microsoft.com> > --- > drivers/net/netvsc/hn_ethdev.c | 29 ++++++++++++----------------- > 1 file changed, 12 insertions(+), 17 deletions(-) > > diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c > index 1736cb5d07..f848157b49 100644 > --- a/drivers/net/netvsc/hn_ethdev.c > +++ b/drivers/net/netvsc/hn_ethdev.c > @@ -570,7 +570,7 @@ static void netvsc_hotplug_retry(void *args) > struct rte_devargs *d = &hot_ctx->da; > char buf[256]; > > - DIR *di; > + DIR *di = NULL; > struct dirent *dir; > struct ifreq req; > struct rte_ether_addr eth_addr; > @@ -590,7 +590,9 @@ static void netvsc_hotplug_retry(void *args) > if (!di) { > PMD_DRV_LOG(DEBUG, "%s: can't open directory %s, " > "retrying in 1 second", __func__, buf); > - goto retry; > + /* The device is still being initialized, retry after 1 second > */ > + rte_eal_alarm_set(1000000, netvsc_hotplug_retry, hot_ctx); > + return; > } > > while ((dir = readdir(di))) { > @@ -614,10 +616,9 @@ static void netvsc_hotplug_retry(void *args) > dir->d_name); > break; > } > - if (req.ifr_hwaddr.sa_family != ARPHRD_ETHER) { > - closedir(di); > - goto free_hotadd_ctx; > - } > + if (req.ifr_hwaddr.sa_family != ARPHRD_ETHER) > + continue; > + > memcpy(eth_addr.addr_bytes, req.ifr_hwaddr.sa_data, > RTE_DIM(eth_addr.addr_bytes)); > > @@ -636,22 +637,16 @@ static void netvsc_hotplug_retry(void *args) > PMD_DRV_LOG(ERR, > "Failed to add PCI device %s", > d->name); > - break; > } > + > + break; > } > - /* When the code reaches here, we either have already added > - * the device, or its MAC address did not match. > - */ > - closedir(di); > - goto free_hotadd_ctx; > } > - closedir(di); > -retry: > - /* The device is still being initialized, retry after 1 second */ > - rte_eal_alarm_set(1000000, netvsc_hotplug_retry, hot_ctx); > - return; > > free_hotadd_ctx: > + if (di) > + closedir(di); > + > rte_spinlock_lock(&hv->hotadd_lock); > LIST_REMOVE(hot_ctx, list); > rte_spinlock_unlock(&hv->hotadd_lock); > -- > 2.34.1
Hi Stephen, Ferruh I'm going to work an EAL patch to replace the 4th patch in the series as suggested by Stephen. Is it okay to merge the first three patches of this series? Thanks, Long