> From: santosh [mailto:santosh.shu...@caviumnetworks.com] > Sent: Monday, September 4, 2017 4:32 PM > To: Burakov, Anatoly <anatoly.bura...@intel.com>; dev@dpdk.org > Cc: tho...@monjalon.net; jerin.ja...@caviumnetworks.com; > hemant.agra...@nxp.com; olivier.m...@6wind.com; > maxime.coque...@redhat.com; Gonzalez Monroy, Sergio > <sergio.gonzalez.mon...@intel.com>; Richardson, Bruce > <bruce.richard...@intel.com>; shreyansh.j...@nxp.com; > gaetan.ri...@6wind.com; step...@networkplumber.org; > acon...@redhat.com > Subject: Re: [PATCH v7 2/9] eal/pci: get iommu class > > Hi Anatoly, > > > On Monday 04 September 2017 08:46 PM, Burakov, Anatoly wrote: > > Hi Santosh, > > > >> From: santosh [mailto:santosh.shu...@caviumnetworks.com] > >> Sent: Monday, September 4, 2017 4:14 PM > >> To: Burakov, Anatoly <anatoly.bura...@intel.com>; dev@dpdk.org > >> Cc: tho...@monjalon.net; jerin.ja...@caviumnetworks.com; > >> hemant.agra...@nxp.com; olivier.m...@6wind.com; > >> maxime.coque...@redhat.com; Gonzalez Monroy, Sergio > >> <sergio.gonzalez.mon...@intel.com>; Richardson, Bruce > >> <bruce.richard...@intel.com>; shreyansh.j...@nxp.com; > >> gaetan.ri...@6wind.com; step...@networkplumber.org; > >> acon...@redhat.com > >> Subject: Re: [PATCH v7 2/9] eal/pci: get iommu class > >> > >> Hi Anatoly, > >> > >> > >> On Monday 04 September 2017 08:23 PM, Burakov, Anatoly wrote: > >>>> From: Santosh Shukla [mailto:santosh.shu...@caviumnetworks.com] > >>>> Sent: Thursday, August 31, 2017 4:26 AM > >>>> To: dev@dpdk.org > >>>> Cc: tho...@monjalon.net; jerin.ja...@caviumnetworks.com; > >>>> hemant.agra...@nxp.com; olivier.m...@6wind.com; > >>>> maxime.coque...@redhat.com; Gonzalez Monroy, Sergio > >>>> <sergio.gonzalez.mon...@intel.com>; Richardson, Bruce > >>>> <bruce.richard...@intel.com>; shreyansh.j...@nxp.com; > >>>> gaetan.ri...@6wind.com; Burakov, Anatoly > >> <anatoly.bura...@intel.com>; > >>>> step...@networkplumber.org; acon...@redhat.com; Santosh Shukla > >>>> <santosh.shu...@caviumnetworks.com> > >>>> Subject: [PATCH v7 2/9] eal/pci: get iommu class > >>>> > >>>> Introducing rte_pci_get_iommu_class API which helps to get iommu > >>>> class of PCI device on the bus and returns preferred iova mapping > >>>> mode > >> for PCI bus. > >>>> Patch also add rte_pci_get_iommu_class definition for bsdapp, in > >>>> bsdapp case - api returns default iova mode. > >>>> > >>>> Signed-off-by: Santosh Shukla > <santosh.shu...@caviumnetworks.com> > >>>> Signed-off-by: Jerin Jacob <jerin.ja...@caviumnetworks.com> > >>>> Reviewed-by: Maxime Coquelin <maxime.coque...@redhat.com> > >>>> --- > >>>> v6 --> v7: > >>>> - squashed v6 series patch [02/12] & [03/12] (Aaron comment). > >>>> > >>>> lib/librte_eal/bsdapp/eal/eal_pci.c | 10 ++++++++++ > >>>> lib/librte_eal/bsdapp/eal/rte_eal_version.map | 1 + > >>>> lib/librte_eal/common/include/rte_bus.h | 10 ++++++++++ > >>>> lib/librte_eal/common/include/rte_pci.h | 11 +++++++++++ > >>>> 4 files changed, 32 insertions(+) > >>>> > >>>> diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c > >>>> b/lib/librte_eal/bsdapp/eal/eal_pci.c > >>>> index 04eacdcc7..e2c252320 100644 > >>>> --- a/lib/librte_eal/bsdapp/eal/eal_pci.c > >>>> +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c > >>>> @@ -403,6 +403,16 @@ rte_pci_scan(void) > >>>> return -1; > >>>> } > >>>> > >>>> +/* > >>>> + * Get iommu class of pci devices on the bus. > >>>> + */ > >>>> +enum rte_iova_mode > >>>> +rte_pci_get_iommu_class(void) > >>>> +{ > >>>> + /* Supports only RTE_KDRV_NIC_UIO */ > >>>> + return RTE_IOVA_PA; > >>>> +} > >>>> + > >>>> int > >>>> pci_update_device(const struct rte_pci_addr *addr) { diff --git > >>>> a/lib/librte_eal/bsdapp/eal/rte_eal_version.map > >>>> b/lib/librte_eal/bsdapp/eal/rte_eal_version.map > >>>> index c819e3084..1fdcfb460 100644 > >>>> --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map > >>>> +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map > >>>> @@ -242,5 +242,6 @@ DPDK_17.11 { > >>>> global: > >>>> > >>>> rte_pci_match; > >>>> + rte_pci_get_iommu_class; > >>>> > >>>> } DPDK_17.08; > >>>> diff --git a/lib/librte_eal/common/include/rte_bus.h > >>>> b/lib/librte_eal/common/include/rte_bus.h > >>>> index c79368d3c..9e40687e5 100644 > >>>> --- a/lib/librte_eal/common/include/rte_bus.h > >>>> +++ b/lib/librte_eal/common/include/rte_bus.h > >>>> @@ -55,6 +55,16 @@ extern "C" { > >>>> /** Double linked list of buses */ TAILQ_HEAD(rte_bus_list, > >>>> rte_bus); > >>>> > >>>> + > >>>> +/** > >>>> + * IOVA mapping mode. > >>>> + */ > >>>> +enum rte_iova_mode { > >>>> + RTE_IOVA_DC = 0, /* Don't care mode */ > >>>> + RTE_IOVA_PA = (1 << 0), > >>>> + RTE_IOVA_VA = (1 << 1) > >>> Hi Santosh, > >>> > >>> No need to set values explicitly, standard C will take care of it. > >> no strong opinion, change queued for v8. > > recalling myself on why expressed RTE_IOVA_PA/_VA as 1 << 0/1. > Since user in future (by mistake) may add new entry example: RTE_IOVA_XX > = 3 then it will enable both _pa and _va both, So to avoid such programming > error, deliberately kept _pa = 1 << 0 and _va = 1 << 1, if new entry comes > (highly unlikely) then should be programmed as _xx = 1 << 2; > > If you convinced then I think - i don;t need to spin this change for v8.
Hi Santosh, Fair enough (on both issues). > > >>> I wonder the purpose of "don't care" mode. It's not used for > >>> anything but > >> cases when no driver is bound. All the libraries (e.g. rte_malloc) > >> will only check for IOVA_VA mode. Can't we just used PA in all cases > >> where IOVA_DC would be applicable? > >> > >> Indeed policy is to use iova_pa for _dc case, but we need a way to > >> distinguish between no device found vs device attached (if attached > >> then decide upon its iova scheme). > >> > >> For more detailed info pl. refer [1]. > >> > >> [1] http://dpdk.org/dev/patchwork/patch/26762/ > >> > > Maybe make your intentions more explicit then? I.e. instead of "don't > care" use "no device" or some such. No strong opinion either way though, > I'm fine with leaving it as is. > > prefer keeping _DC, if you don;t mind, sounds more appropriate to me. > > > Thanks, > > Anatoly