This patch permits to share memory areas that do not specifically belong to /dev/shm. In such case, the file must be already present when launching qemu.
A use case for this patch is sharing huge pages available through a hugetlbfs mountpoint. Signed-off-by: Damien Millescamps <damien.millesca...@6wind.com> --- docs/specs/ivshmem_device_spec.txt | 5 +++-- hw/misc/ivshmem.c | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/specs/ivshmem_device_spec.txt b/docs/specs/ivshmem_device_spec.txt index 667a862..3137e60 100644 --- a/docs/specs/ivshmem_device_spec.txt +++ b/docs/specs/ivshmem_device_spec.txt @@ -4,8 +4,9 @@ Device Specification for Inter-VM shared memory device The Inter-VM shared memory device is designed to share a region of memory to userspace in multiple virtual guests. The memory region does not belong to any -guest, but is a POSIX memory object on the host. Optionally, the device may -support sending interrupts to other guests sharing the same memory region. +guest, but is a either a POSIX memory object or a mmap'd file (such as a +hugepage) on the host. Optionally, the device may support sending interrupts +to other guests sharing the same memory region. The Inter-VM PCI device diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index 2838866..9178ccc 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -762,9 +762,13 @@ static int pci_ivshmem_init(PCIDevice *dev) } else if ((fd = shm_open(s->shmobj, O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO)) < 0) { - fprintf(stderr, "ivshmem: could not open shared file\n"); - exit(-1); - + /* Try with open() in case the file is not in /dev/shm/ + * This is usefull for sharing hugepages for example */ + fd = open(s->shmobj, O_RDWR); + if (fd < 0) { + fprintf(stderr, "ivshmem: could not open shared file\n"); + exit(-1); + } } if (check_shm_size(s, fd) == -1) { -- 1.7.2.5