From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 165335A65 for ; Tue, 30 Jun 2015 16:56:51 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga102.jf.intel.com with ESMTP; 30 Jun 2015 07:56:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,378,1432623600"; d="scan'208";a="753318850" Received: from irsmsx105.ger.corp.intel.com ([163.33.3.28]) by fmsmga002.fm.intel.com with ESMTP; 30 Jun 2015 07:56:49 -0700 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.201]) by irsmsx105.ger.corp.intel.com ([169.254.7.245]) with mapi id 14.03.0224.002; Tue, 30 Jun 2015 15:56:47 +0100 From: "Iremonger, Bernard" To: Tetsuya Mukawa , "dev@dpdk.org" Thread-Topic: [PATCH v7 12/12] eal: Consolidate rte_eal_pci_probe/close_one_driver() of linuxapp and bsdapp Thread-Index: AQHQsw5bO8bLTuWLVUWK7EN/jcZubZ3FI7cg Date: Tue, 30 Jun 2015 14:56:46 +0000 Message-ID: <8CEF83825BEC744B83065625E567D7C204A435C7@IRSMSX108.ger.corp.intel.com> References: <1435306705-11645-4-git-send-email-mukawa@igel.co.jp> <1435652668-3380-1-git-send-email-mukawa@igel.co.jp> <1435652668-3380-13-git-send-email-mukawa@igel.co.jp> In-Reply-To: <1435652668-3380-13-git-send-email-mukawa@igel.co.jp> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v7 12/12] eal: Consolidate rte_eal_pci_probe/close_one_driver() of linuxapp and bsdapp X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Jun 2015 14:56:53 -0000 > -----Original Message----- > From: Tetsuya Mukawa [mailto:mukawa@igel.co.jp] > Sent: Tuesday, June 30, 2015 9:24 AM > To: dev@dpdk.org > Cc: Iremonger, Bernard; david.marchand@6wind.com; Richardson, Bruce; > Tetsuya.Mukawa > Subject: [PATCH v7 12/12] eal: Consolidate > rte_eal_pci_probe/close_one_driver() of linuxapp and bsdapp >=20 > From: "Tetsuya.Mukawa" >=20 > This patch consolidates below functions, and implements these in common > eal code. > - rte_eal_pci_probe_one_driver() > - rte_eal_pci_close_one_driver() >=20 > Because pci_map_device() is only implemented in linuxapp, the patch > implements it in bsdapp too. This implemented function will be merged to > linuxapp one with later patch. Hi Tetsuya, The description lines above seem to be out of date now as pci_map_device() = is not implemented in the bsdapp now. Regards, Bernard. >=20 > Signed-off-by: Tetsuya Mukawa > --- > lib/librte_eal/bsdapp/eal/eal_pci.c | 67 +--------------- > lib/librte_eal/common/eal_common_pci.c | 133 > +++++++++++++++++++++++++++++- > lib/librte_eal/common/eal_private.h | 39 +-------- > lib/librte_eal/linuxapp/eal/eal_pci.c | 142 +--------------------------= ------ > 4 files changed, 135 insertions(+), 246 deletions(-) >=20 > diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c > b/lib/librte_eal/bsdapp/eal/eal_pci.c > index c057f6a..508cfa7 100644 > --- a/lib/librte_eal/bsdapp/eal/eal_pci.c > +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c > @@ -84,7 +84,7 @@ > */ >=20 > /* unbind kernel driver for this device */ -static int > +int > pci_unbind_kernel_driver(struct rte_pci_device *dev __rte_unused) { > RTE_LOG(ERR, EAL, "RTE_PCI_DRV_FORCE_UNBIND flag is not > implemented " > @@ -355,71 +355,6 @@ error: > return -1; > } >=20 > -/* > - * If vendor/device ID match, call the devinit() function of the > - * driver. > - */ > -int > -rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct > rte_pci_device *dev) -{ > - const struct rte_pci_id *id_table; > - int ret; > - > - for (id_table =3D dr->id_table ; id_table->vendor_id !=3D 0; id_table++= ) { > - > - /* check if device's identifiers match the driver's ones */ > - if (id_table->vendor_id !=3D dev->id.vendor_id && > - id_table->vendor_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->device_id !=3D dev->id.device_id && > - id_table->device_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->subsystem_vendor_id !=3D dev- > >id.subsystem_vendor_id && > - id_table->subsystem_vendor_id !=3D > PCI_ANY_ID) > - continue; > - if (id_table->subsystem_device_id !=3D dev- > >id.subsystem_device_id && > - id_table->subsystem_device_id !=3D > PCI_ANY_ID) > - continue; > - > - struct rte_pci_addr *loc =3D &dev->addr; > - > - RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA > socket %i\n", > - loc->domain, loc->bus, loc->devid, loc- > >function, > - dev->numa_node); > - > - RTE_LOG(DEBUG, EAL, " probe driver: %x:%x %s\n", dev- > >id.vendor_id, > - dev->id.device_id, dr->name); > - > - /* no initialization when blacklisted, return without error */ > - if (dev->devargs !=3D NULL && > - dev->devargs->type =3D=3D > RTE_DEVTYPE_BLACKLISTED_PCI) { > - > - RTE_LOG(DEBUG, EAL, " Device is blacklisted, not > initializing\n"); > - return 0; > - } > - > - if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) { > - /* map resources for devices that use igb_uio */ > - ret =3D pci_uio_map_resource(dev); > - if (ret !=3D 0) > - return ret; > - } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND && > - rte_eal_process_type() =3D=3D RTE_PROC_PRIMARY) { > - /* unbind current driver */ > - if (pci_unbind_kernel_driver(dev) < 0) > - return -1; > - } > - > - /* reference driver structure */ > - dev->driver =3D dr; > - > - /* call the driver devinit() function */ > - return dr->devinit(dr, dev); > - } > - /* return positive value if driver is not found */ > - return 1; > -} > - > /* Init the PCI EAL subsystem */ > int > rte_eal_pci_init(void) > diff --git a/lib/librte_eal/common/eal_common_pci.c > b/lib/librte_eal/common/eal_common_pci.c > index c0be292..8ef8057 100644 > --- a/lib/librte_eal/common/eal_common_pci.c > +++ b/lib/librte_eal/common/eal_common_pci.c > @@ -138,7 +138,7 @@ pci_unmap_resource(void *requested_addr, size_t > size) } >=20 > /* Map pci device */ > -int > +static int > pci_map_device(struct rte_pci_device *dev) { > int ret =3D -1; > @@ -169,7 +169,7 @@ pci_map_device(struct rte_pci_device *dev) >=20 > #ifdef RTE_LIBRTE_EAL_HOTPLUG > /* Unmap pci device */ > -void > +static void > pci_unmap_device(struct rte_pci_device *dev) { > if (dev =3D=3D NULL) > @@ -195,6 +195,135 @@ pci_unmap_device(struct rte_pci_device *dev) > #endif /* RTE_LIBRTE_EAL_HOTPLUG */ >=20 > /* > + * If vendor/device ID match, call the devinit() function of the > + * driver. > + */ > +static int > +rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct > +rte_pci_device *dev) { > + int ret; > + const struct rte_pci_id *id_table; > + > + for (id_table =3D dr->id_table; id_table->vendor_id !=3D 0; id_table++)= { > + > + /* check if device's identifiers match the driver's ones */ > + if (id_table->vendor_id !=3D dev->id.vendor_id && > + id_table->vendor_id !=3D PCI_ANY_ID) > + continue; > + if (id_table->device_id !=3D dev->id.device_id && > + id_table->device_id !=3D PCI_ANY_ID) > + continue; > + if (id_table->subsystem_vendor_id !=3D dev- > >id.subsystem_vendor_id && > + id_table->subsystem_vendor_id !=3D > PCI_ANY_ID) > + continue; > + if (id_table->subsystem_device_id !=3D dev- > >id.subsystem_device_id && > + id_table->subsystem_device_id !=3D > PCI_ANY_ID) > + continue; > + > + struct rte_pci_addr *loc =3D &dev->addr; > + > + RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA > socket %i\n", > + loc->domain, loc->bus, loc->devid, loc- > >function, > + dev->numa_node); > + > + RTE_LOG(DEBUG, EAL, " probe driver: %x:%x %s\n", dev- > >id.vendor_id, > + dev->id.device_id, dr->name); > + > + /* no initialization when blacklisted, return without error */ > + if (dev->devargs !=3D NULL && > + dev->devargs->type =3D=3D > RTE_DEVTYPE_BLACKLISTED_PCI) { > + RTE_LOG(DEBUG, EAL, " Device is blacklisted, not > initializing\n"); > + return 1; > + } > + > + if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) { #ifdef > RTE_PCI_CONFIG > + /* > + * Set PCIe config space for high performance. > + * Return value can be ignored. > + */ > + pci_config_space_set(dev); > +#endif > + /* map resources for devices that use igb_uio */ > + ret =3D pci_map_device(dev); > + if (ret !=3D 0) > + return ret; > + } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND && > + rte_eal_process_type() =3D=3D > RTE_PROC_PRIMARY) { > + /* unbind current driver */ > + if (pci_unbind_kernel_driver(dev) < 0) > + return -1; > + } > + > + /* reference driver structure */ > + dev->driver =3D dr; > + > + /* call the driver devinit() function */ > + return dr->devinit(dr, dev); > + } > + /* return positive value if driver is not found */ > + return 1; > +} > + > +#ifdef RTE_LIBRTE_EAL_HOTPLUG > +/* > + * If vendor/device ID match, call the devuninit() function of the > + * driver. > + */ > +static int > +rte_eal_pci_close_one_driver(struct rte_pci_driver *dr, > + struct rte_pci_device *dev) > +{ > + const struct rte_pci_id *id_table; > + > + if ((dr =3D=3D NULL) || (dev =3D=3D NULL)) > + return -EINVAL; > + > + for (id_table =3D dr->id_table; id_table->vendor_id !=3D 0; id_table++)= { > + > + /* check if device's identifiers match the driver's ones */ > + if (id_table->vendor_id !=3D dev->id.vendor_id && > + id_table->vendor_id !=3D PCI_ANY_ID) > + continue; > + if (id_table->device_id !=3D dev->id.device_id && > + id_table->device_id !=3D PCI_ANY_ID) > + continue; > + if (id_table->subsystem_vendor_id !=3D dev- > >id.subsystem_vendor_id && > + id_table->subsystem_vendor_id !=3D > PCI_ANY_ID) > + continue; > + if (id_table->subsystem_device_id !=3D dev- > >id.subsystem_device_id && > + id_table->subsystem_device_id !=3D > PCI_ANY_ID) > + continue; > + > + struct rte_pci_addr *loc =3D &dev->addr; > + > + RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA > socket %i\n", > + loc->domain, loc->bus, loc->devid, > + loc->function, dev->numa_node); > + > + RTE_LOG(DEBUG, EAL, " remove driver: %x:%x %s\n", dev- > >id.vendor_id, > + dev->id.device_id, dr->name); > + > + /* call the driver devuninit() function */ > + if (dr->devuninit && (dr->devuninit(dev) < 0)) > + return -1; /* negative value is an error */ > + > + /* clear driver structure */ > + dev->driver =3D NULL; > + > + if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) > + /* unmap resources for devices that use igb_uio */ > + pci_unmap_device(dev); > + > + return 0; > + } > + > + /* return positive value if driver is not found */ > + return 1; > +} > +#endif /* RTE_LIBRTE_EAL_HOTPLUG */ > + > +/* > * If vendor/device ID match, call the devinit() function of all > * registered driver for the given device. Return -1 if initialization > * failed, return 1 if no driver is found for this device. > diff --git a/lib/librte_eal/common/eal_private.h > b/lib/librte_eal/common/eal_private.h > index eec396c..216c098 100644 > --- a/lib/librte_eal/common/eal_private.h > +++ b/lib/librte_eal/common/eal_private.h > @@ -155,23 +155,14 @@ struct rte_pci_driver; struct rte_pci_device; >=20 > /** > - * Map this device > + * Unbind kernel driver for this device > * > * This function is private to EAL. > * > * @return > * 0 on success, negative on error > */ > -int pci_map_device(struct rte_pci_device *dev); > - > -#ifdef RTE_LIBRTE_EAL_HOTPLUG > -/** > - * Unmap this device > - * > - * This function is private to EAL. > - */ > -void pci_unmap_device(struct rte_pci_device *dev); -#endif /* > RTE_LIBRTE_EAL_HOTPLUG */ > +int pci_unbind_kernel_driver(struct rte_pci_device *dev); >=20 > /** > * Map this device > @@ -193,32 +184,6 @@ void pci_uio_unmap_resource(struct rte_pci_device > *dev); #endif /* RTE_LIBRTE_EAL_HOTPLUG */ >=20 > /** > - * Mmap memory for single PCI device > - * > - * This function is private to EAL. > - * > - * @return > - * 0 on success, negative on error > - */ > -int rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, > - struct rte_pci_device *dev); > - > -/** > - * Munmap memory for single PCI device > - * > - * This function is private to EAL. > - * > - * @param dr > - * The pointer to the pci driver structure > - * @param dev > - * The pointer to the pci device structure > - * @return > - * 0 on success, negative on error > - */ > -int rte_eal_pci_close_one_driver(struct rte_pci_driver *dr, > - struct rte_pci_device *dev); > - > -/** > * Allocate uio resource for PCI device > * > * This function is private to EAL. > diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c > b/lib/librte_eal/linuxapp/eal/eal_pci.c > index 7e8df7d..1d5a13b 100644 > --- a/lib/librte_eal/linuxapp/eal/eal_pci.c > +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c > @@ -56,7 +56,7 @@ > */ >=20 > /* unbind kernel driver for this device */ -static int > +int > pci_unbind_kernel_driver(struct rte_pci_device *dev) { > int n; > @@ -522,146 +522,6 @@ pci_config_space_set(struct rte_pci_device *dev) > } #endif >=20 > -/* > - * If vendor/device ID match, call the devinit() function of the > - * driver. > - */ > -int > -rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct > rte_pci_device *dev) -{ > - int ret; > - const struct rte_pci_id *id_table; > - > - for (id_table =3D dr->id_table; id_table->vendor_id !=3D 0; id_table++)= { > - > - /* check if device's identifiers match the driver's ones */ > - if (id_table->vendor_id !=3D dev->id.vendor_id && > - id_table->vendor_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->device_id !=3D dev->id.device_id && > - id_table->device_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->subsystem_vendor_id !=3D dev- > >id.subsystem_vendor_id && > - id_table->subsystem_vendor_id !=3D > PCI_ANY_ID) > - continue; > - if (id_table->subsystem_device_id !=3D dev- > >id.subsystem_device_id && > - id_table->subsystem_device_id !=3D > PCI_ANY_ID) > - continue; > - > - struct rte_pci_addr *loc =3D &dev->addr; > - > - RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA > socket %i\n", > - loc->domain, loc->bus, loc->devid, loc- > >function, > - dev->numa_node); > - > - RTE_LOG(DEBUG, EAL, " probe driver: %x:%x %s\n", dev- > >id.vendor_id, > - dev->id.device_id, dr->name); > - > - /* no initialization when blacklisted, return without error */ > - if (dev->devargs !=3D NULL && > - dev->devargs->type =3D=3D > RTE_DEVTYPE_BLACKLISTED_PCI) { > - RTE_LOG(DEBUG, EAL, " Device is blacklisted, not > initializing\n"); > - return 1; > - } > - > - if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) { > -#ifdef RTE_PCI_CONFIG > - /* > - * Set PCIe config space for high performance. > - * Return value can be ignored. > - */ > - pci_config_space_set(dev); > -#endif > - /* map resources for devices that use igb_uio */ > - ret =3D pci_map_device(dev); > - if (ret !=3D 0) > - return ret; > - } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND && > - rte_eal_process_type() =3D=3D RTE_PROC_PRIMARY) { > - /* unbind current driver */ > - if (pci_unbind_kernel_driver(dev) < 0) > - return -1; > - } > - > - /* reference driver structure */ > - dev->driver =3D dr; > - > - /* call the driver devinit() function */ > - return dr->devinit(dr, dev); > - } > - /* return positive value if driver is not found */ > - return 1; > -} > - > -#ifdef RTE_LIBRTE_EAL_HOTPLUG > -/* > - * If vendor/device ID match, call the devuninit() function of the > - * driver. > - */ > -int > -rte_eal_pci_close_one_driver(struct rte_pci_driver *dr, > - struct rte_pci_device *dev) > -{ > - const struct rte_pci_id *id_table; > - > - if ((dr =3D=3D NULL) || (dev =3D=3D NULL)) > - return -EINVAL; > - > - for (id_table =3D dr->id_table; id_table->vendor_id !=3D 0; id_table++)= { > - > - /* check if device's identifiers match the driver's ones */ > - if (id_table->vendor_id !=3D dev->id.vendor_id && > - id_table->vendor_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->device_id !=3D dev->id.device_id && > - id_table->device_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->subsystem_vendor_id !=3D > - dev->id.subsystem_vendor_id && > - id_table->subsystem_vendor_id !=3D PCI_ANY_ID) > - continue; > - if (id_table->subsystem_device_id !=3D > - dev->id.subsystem_device_id && > - id_table->subsystem_device_id !=3D PCI_ANY_ID) > - continue; > - > - struct rte_pci_addr *loc =3D &dev->addr; > - > - RTE_LOG(DEBUG, EAL, > - "PCI device "PCI_PRI_FMT" on NUMA socket > %i\n", > - loc->domain, loc->bus, loc->devid, > - loc->function, dev->numa_node); > - > - RTE_LOG(DEBUG, EAL, " remove driver: %x:%x %s\n", > - dev->id.vendor_id, dev->id.device_id, > - dr->name); > - > - /* call the driver devuninit() function */ > - if (dr->devuninit && (dr->devuninit(dev) < 0)) > - return -1; /* negative value is an error */ > - > - /* clear driver structure */ > - dev->driver =3D NULL; > - > - if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) > - /* unmap resources for devices that use igb_uio */ > - pci_unmap_device(dev); > - > - return 0; > - } > - /* return positive value if driver is not found */ > - return 1; > -} > -#else /* RTE_LIBRTE_EAL_HOTPLUG */ > -int > -rte_eal_pci_close_one_driver(struct rte_pci_driver *dr __rte_unused, > - struct rte_pci_device *dev __rte_unused) > -{ > - RTE_LOG(ERR, EAL, "Hotplug support isn't enabled\n"); > - return -1; > -} > -#endif /* RTE_LIBRTE_EAL_HOTPLUG */ > - > /* Init the PCI EAL subsystem */ > int > rte_eal_pci_init(void) > -- > 2.1.4