vfio: share default container in multi-process
authorDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Wed, 3 Oct 2018 12:39:25 +0000 (14:39 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 29 Oct 2018 00:59:48 +0000 (01:59 +0100)
commit6bcb7c95fe14544bca9de1a698e4553533192197
treec97df82288adc993dd2cebcbc39ca897860705c7
parent88e2d78a20fae4cccde351e38e0b1ef534ad3302
vfio: share default container in multi-process

So far each process in MP used to have a separate container
and relied on the primary process to register all memsegs.

Mapping external memory via rte_vfio_container_dma_map()
in secondary processes was broken, because the default
(process-local) container had no groups bound. There was
even no way to bind any groups to it, because the container
fd was deeply encapsulated within EAL.

This patch introduces a new SOCKET_REQ_DEFAULT_CONTAINER
message type for MP synchronization, makes all processes
within a MP party use a single default container, and hence
fixes rte_vfio_container_dma_map() for secondary processes.

From what I checked this behavior was always the same, but
started to be invalid/insufficient once mapping external
memory was allowed.

While here, fix up the comment on rte_vfio_get_container_fd().
This function always opens a new container, never reuses
an old one.

Fixes: 73a639085938 ("vfio: allow to map other memory regions")
Cc: stable@dpdk.org
Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/common/include/rte_vfio.h
lib/librte_eal/linuxapp/eal/eal_vfio.c
lib/librte_eal/linuxapp/eal/eal_vfio.h
lib/librte_eal/linuxapp/eal/eal_vfio_mp_sync.c