Hi Tetsuya, My comments are inline below.
> -----Original Message----- > From: Tetsuya Mukawa [mailto:mukawa at igel.co.jp] > Sent: Friday, February 6, 2015 4:38 AM > To: dev at dpdk.org > Cc: Iremonger, Bernard; Tetsuya Mukawa > Subject: [PATCH v6 2/2] librte_pmd_null: Support port hotplug function > > This patch adds port hotplug support to null PMD. > > v6: > - Fix a paramter of rte_eth_dev_free(). > v4: > - Fix commit title. > > Signed-off-by: Tetsuya Mukawa <mukawa at igel.co.jp> > --- > lib/librte_pmd_null/rte_eth_null.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/lib/librte_pmd_null/rte_eth_null.c > b/lib/librte_pmd_null/rte_eth_null.c > index c54e90b..6add7ce 100644 > --- a/lib/librte_pmd_null/rte_eth_null.c > +++ b/lib/librte_pmd_null/rte_eth_null.c > @@ -292,6 +292,13 @@ eth_stats_reset(struct rte_eth_dev *dev) > } > } > > +static struct eth_driver rte_null_pmd = { > + .pci_drv = { > + .name = "rte_null_pmd", > + .drv_flags = RTE_PCI_DRV_DETACHABLE, > + }, > +}; > + > static void > eth_queue_release(void *q) > { > @@ -382,10 +389,12 @@ eth_dev_null_create(const char *name __rte_unused, > data->nb_tx_queues = (uint16_t)nb_tx_queues; > data->dev_link = pmd_link; > data->mac_addrs = ð_addr; > + strncpy(data->name, eth_dev->data->name, strlen(eth_dev->data->name)); > > eth_dev->data = data; > eth_dev->dev_ops = &ops; > eth_dev->pci_dev = pci_dev; > + eth_dev->driver = &rte_null_pmd; > > /* finally assign rx and tx ops */ > if (packet_copy) { > @@ -476,10 +485,33 @@ rte_pmd_null_devinit(const char *name, const char > *params) > return eth_dev_null_create(name, numa_node, packet_size, packet_copy); > } > > +static int > +rte_pmd_null_devuninit(const char *name, const char *params > +__rte_unused) { > + struct rte_eth_dev *eth_dev = NULL; Input parameter name should be checked. > + > + RTE_LOG(INFO, PMD, "Closing null ethdev on numa socket %u\n", > + rte_socket_id()); > + > + /* reserve an ethdev entry */ > + eth_dev = rte_eth_dev_allocated(name); > + if (eth_dev == NULL) > + return -1; > + > + rte_free(eth_dev->data->dev_private); > + rte_free(eth_dev->data); > + rte_free(eth_dev->pci_dev); > + > + rte_eth_dev_free(eth_dev); > + > + return 0; > +} > + > static struct rte_driver pmd_null_drv = { > .name = "eth_null", > .type = PMD_VDEV, > .init = rte_pmd_null_devinit, > + .uninit = rte_pmd_null_devuninit, > }; > > PMD_REGISTER_DRIVER(pmd_null_drv); > -- > 1.9.1