ivshmem: library changes for mmaping using ivshmem
authorBruce Richardson <bruce.richardson@intel.com>
Tue, 11 Feb 2014 10:28:51 +0000 (10:28 +0000)
committerDavid Marchand <david.marchand@6wind.com>
Tue, 25 Feb 2014 20:29:19 +0000 (21:29 +0100)
commit40b966a211ab71e96b8e155d9058f224e7b5bbf6
treeb7583c1e78d18c3f3e94ae5294dd5a5607268973
parent013615a784c18582d32e2a702049783c68801f6c
ivshmem: library changes for mmaping using ivshmem

These library changes provide a new Intel DPDK feature for communicating
with virtual machines using QEMU's IVSHMEM mechanism.

The feature works by providing a command line for QEMU to map several hugepages
into a single IVSHMEM device. For the guest to know what is inside any given IVSHMEM
device (and to distinguish between Intel(R) DPDK and non-Intel(R) DPDK IVSHMEM
devices), a metadata file is also mapped into the IVSHMEM segment. No work needs to
be done by the guest application to map IVSHMEM devices into memory; they are
automatically recognized by the Intel(R) DPDK Environment Abstraction Layer (EAL).

Changes in this patch:
* Changes to EAL to allow mapping of all hugepages in a memseg into a single file
* Changes to EAL to allow ivshmem devices to be transparently mapped in
  the process running on the guest.
* New ivshmem library to create and manage metadata exported to guest VM's
* New ivshmem compilation targets
* Mempool and ring changes to allow export of structures to a VM and allow
  a VM to attach to those structures.
* New autotests to unit tests this functionality.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
23 files changed:
app/test/Makefile
app/test/autotest_data.py
app/test/commands.c
app/test/test.c
app/test/test.h
app/test/test_ivshmem.c [new file with mode: 0644]
config/defconfig_x86_64-ivshmem-linuxapp-gcc [new file with mode: 0644]
config/defconfig_x86_64-ivshmem-linuxapp-icc [new file with mode: 0644]
lib/Makefile
lib/librte_eal/common/eal_common_memzone.c
lib/librte_eal/common/include/eal_private.h
lib/librte_eal/common/include/rte_memory.h
lib/librte_eal/common/include/rte_memzone.h
lib/librte_eal/linuxapp/eal/Makefile
lib/librte_eal/linuxapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal_ivshmem.c [new file with mode: 0644]
lib/librte_eal/linuxapp/eal/eal_memory.c
lib/librte_eal/linuxapp/eal/include/eal_filesystem.h
lib/librte_eal/linuxapp/eal/include/eal_hugepages.h
lib/librte_ivshmem/Makefile [new file with mode: 0644]
lib/librte_ivshmem/rte_ivshmem.c [new file with mode: 0644]
lib/librte_ivshmem/rte_ivshmem.h [new file with mode: 0644]
mk/rte.app.mk