[dpdk-dev] About 'CONFIG_RTE_EAL_UNBIND_PORTS'

Thomas Monjalon thomas.monjalon at 6wind.com
Mon Sep 2 17:57:38 CEST 2013


29/08/2013 09:54, Tetsuya Mukawa :
> Someone, could you please let me know what is a case that I need to
> enable 'CONFIG_RTE_EAL_UNBIND_PORTS'?

In DPDK 1.3, the UNBIND option is intended to restore the previous state
when exiting a DPDK application.
In case of devices bound to igb_uio, it will re-bind them to their original 
driver (e1000/igb/ixgbe).
It has no effect with virtio.

The bug that you have described does not appear with igb_uio drivers because 
fd is initialized in pci_map_resource().
But in case of virtio, pci_map_resource() is not called.

> I guess that the fd should be initialized as '-1', but actually it is
> initialized as '0'.
> So during finalization, pci_exit_process() may try to close STDIN.
> (But I am not sure why closing STDIN returns error. STDIN might be
> already closed by somewhere?)
> 
> Anyway, here is a patch I wrote to fix the issue.
> Is this correct?
> --------------------------------------
> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c
> b/lib/librte_eal/linuxapp/eal/eal_pci.c
> index c793148..7bb03e9 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_pci.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
> @@ -519,6 +519,8 @@ pci_scan_one(const char *dirname, uint16_t domain,
> uint8_t bus,
>         dev->addr.devid = devid;
>         dev->addr.function = function;
> 
> +       dev->intr_handle.fd = -1;
> +
>         /* get vendor id */
>         rte_snprintf(filename, sizeof(filename), "%s/vendor", dirname);
>         if (eal_parse_sysfs_value(filename, &tmp) < 0) {
> @@ -718,7 +720,8 @@ pci_exit_process(struct rte_pci_device *dev)
>                 RTE_LOG(ERR, EAL, "Error with munmap\n");
>                 return -1;
>         }
> -       if (close(dev->intr_handle.fd) == -1){
> +       if ((dev->intr_handle.fd != -1) &&
> +               (close(dev->intr_handle.fd) == -1)) {
>                 RTE_LOG(ERR, EAL, "Error closing interrupt handle\n");
>                 return -1;
>         }
> --------------------------------------

It looks good.
Could you send it as a real patch with a commit log ?

Thank you
-- 
Thomas


More information about the dev mailing list