[dpdk-dev] [PATCH 19.11] vfio: fix DMA mapping of externally allocated heaps

Burakov, Anatoly anatoly.burakov at intel.com
Tue Nov 5 18:15:13 CET 2019


On 05-Nov-19 3:15 PM, Anatoly Burakov wrote:
> Currently, externally created heaps are supposed to be automatically
> mapped for VFIO DMA by EAL, however they only do so if, at the time of
> heap creation, VFIO is initialized and has at least one device
> available. If no devices are available at the time of heap creation (or
> if devices were available, but were since hot-unplugged, thus dropping
> all VFIO container mappings), then VFIO mapping code would have skipped
> over externally allocated heaps.
> 
> The fix is two-fold. First, we allow externally allocated memory
> segments to be marked as "heap" segments. This allows us to distinguish
> between external memory segments that were created via heap API, from
> those that were created via rte_extmem_register() API.
> 
> Then, we fix the VFIO code to only skip non-heap external segments.
> Also, since external heaps are not guaranteed to have valid IOVA
> addresses, we will skip those which have invalid IOVA addresses as well.
> 
> Fixes: 0f526d674f8e ("malloc: separate creating memseg list and malloc heap")
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
> ---
> 
> Notes:
>      This cannot be backported to older releases as it breaks the
>      API and ABI. A separate fix is in the works for stable.
> 

Alternative, non-breaking implementation available (which will be slower 
due to O(N) memseg list heaps lookups):

http://patches.dpdk.org/patch/62486/

I'm fine with either option being merged.

The more perfect solution would've been to rename "msl->external" into 
"msl->flags" and have various flags for memseg lists, but it's too late 
to break the API now.

-- 
Thanks,
Anatoly


More information about the dev mailing list