On 06-Nov-18 10:37 AM, Alejandro Lucero wrote:
On Tue, Nov 6, 2018 at 10:31 AM Burakov, Anatoly
<anatoly.bura...@intel.com <mailto:anatoly.bura...@intel.com>> wrote:
On 06-Nov-18 9:32 AM, Alejandro Lucero wrote:
>
>
> On Mon, Nov 5, 2018 at 4:35 PM Burakov, Anatoly
> <anatoly.bura...@intel.com <mailto:anatoly.bura...@intel.com>
<mailto:anatoly.bura...@intel.com
<mailto:anatoly.bura...@intel.com>>> wrote:
>
> On 05-Nov-18 3:33 PM, Alejandro Lucero wrote:
> >
> >
> > On Mon, Nov 5, 2018 at 3:12 PM Burakov, Anatoly
> > <anatoly.bura...@intel.com
<mailto:anatoly.bura...@intel.com> <mailto:anatoly.bura...@intel.com
<mailto:anatoly.bura...@intel.com>>
> <mailto:anatoly.bura...@intel.com
<mailto:anatoly.bura...@intel.com>
> <mailto:anatoly.bura...@intel.com
<mailto:anatoly.bura...@intel.com>>>> wrote:
> >
> > On 05-Nov-18 10:13 AM, Alejandro Lucero wrote:
> > > On Mon, Nov 5, 2018 at 10:01 AM Li, WenjieX A
> > <wenjiex.a...@intel.com
<mailto:wenjiex.a...@intel.com> <mailto:wenjiex.a...@intel.com
<mailto:wenjiex.a...@intel.com>>
> <mailto:wenjiex.a...@intel.com
<mailto:wenjiex.a...@intel.com> <mailto:wenjiex.a...@intel.com
<mailto:wenjiex.a...@intel.com>>>>
> > > wrote:
> > >
> > >> 1. With GCC32, testpmd could not startup without
> '--iova-mode pa'.
> > >> ./i686-native-linuxapp-gcc/app/testpmd -c f -n 4 -- -i
> > >> The output is:
> > >> EAL: Detected 16 lcore(s)
> > >> EAL: Detected 1 NUMA nodes
> > >> EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
> > >> EAL: Some devices want iova as va but pa will be used
> because..
> > EAL: few
> > >> device bound to UIO
> > >> EAL: No free hugepages reported in hugepages-1048576kB
> > >> EAL: Probing VFIO support...
> > >> EAL: VFIO support initialized
> > >> EAL: wrong dma mask size 48 (Max: 31)
> > >> EAL: alloc_pages_on_heap(): couldn't allocate
memory due
> to IOVA
> > exceeding
> > >> limits of current DMA mask
> > >> error allocating rte services array
> > >> EAL: FATAL: rte_service_init() failed
> > >> EAL: rte_service_init() failed
> > >> PANIC in main():
> > >> Cannot init EAL
> > >> 5: [./i686-native-linuxapp-gcc/app/testpmd(+0x95fda)
> [0x56606fda]]
> > >> 4:
[/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf6)
> > [0xf74d1276]]
> > >> 3: [./i686-native-linuxapp-gcc/app/testpmd(main+0xf21)
> [0x565fcee1]]
> > >> 2:
[./i686-native-linuxapp-gcc/app/testpmd(__rte_panic+0x3d)
> > [0x565edc68]]
> > >> 1:
> [./i686-native-linuxapp-gcc/app/testpmd(rte_dump_stack+0x33)
> > >> [0x5675f333]]
> > >> Aborted
> > >>
> > >> 2. With '--iova-mode pa', testpmd could startup.
> > >> 3. With GCC64, there is no such issue.
> > >> Thanks!
> > >>
> > >>
> > > Does 32 bits support require IOMMU? It would be a
surprise. If
> > there is no
> > > IOMMU hardware, no dma mask should be there at all.
> >
> > IOMMU is supported on 32-bits, however limited the address
> space might
> > be. Maybe limit IOMMU width to RTE_MIN(31, value) bits for
> > everything on
> > 32-bit?
> >
> >
> > If IOMMU is supported in 32 bits, then the DMA mask check
should
> not be
> > happening. AFAIK, the IOMMU hardware addressing
limitations is a
> problem
> > only in 64 bits systems. The worst situation I have head
of is 39
> bits
> > for virtualized IOMMU with QEMU.
> >
> > I would prefer not to invoke rte_mem_set_dma_mask for 32 bits
> system for
> > the Intel IOMMU case. The only other dma mask client is
the NFP
> PMD and
> > we do not support 32 bits systems.
> >
>
> I don't think not invoking DMA mask check is the right choice
here. In
> practice it may be, but i'd rather the behavior to be
"correct", if at
> all possible :) It is theoretically possible to have an IOMMU
with an
> addressing limitation of, say, 30 bits (even though they
don't exist in
> reality), so therefore our code should handle it, should it
encounter
> one, and it should also handle the "proper" ones correctly
(as in,
> treat
> them as 32-bit-limited instead of 39- or 48-bit-limited).
>
>
> Fine.
>
> The problem is the current sanity check about the dma mask width,
what
> is 31 for 32 bits systems.
> Should we just leave a single max dma width to 63? This covers the
> possibility of 32 bit systems integrating an IOMMU designed for 64
> bits. I really doubt this is a real possibility in x86, although
I can
> see it more likely in embedded systems where this sort of hardware
> components integration happens.
Actually (and after a quick chat with Ferruh), is this even needed?
IOVA
addresses are independent from VA width, IOVA can happily be bigger
than
32-bits if i understand things correctly. All of our IOVA addresses are
always 64-bit throughout DPDK. I don't think this check is even valid.
Although iova_t is 64 bits, there should not be a IOVA higher than 32
bits, although there could be exceptions like PAE extensions (I'm old
enough for remembering that option :-( ).
Anyway, the original idea of dma mask sanity check is 32 bits systems
was assuming there should not be a dma mask above 32 bits, but I'm happy
with removing that sanity check for 32 bits systems. So, do you agree to
just leave the sanity check for a max width of 63 bits?
So, the issue with 32-bit here is that for this check to make sense, the
*kernel* must be 32-bit - not just userspace. IOW, this check should
*not* be present in a 32-bit application running on a 64-bit kernel.
So IMO, unless you know of a way to easily check if 1) kernel is 32-bit,
and 2) PAE is enabled/disabled (and by easily i mean using something
other than reading sysfs etc.), i don't think this check should be in
there :)
>
> >
> > --
> > Thanks,
> > Anatoly
> >
>
>
> --
> Thanks,
> Anatoly
>
--
Thanks,
Anatoly
--
Thanks,
Anatoly