Hello This is the v8 of the patchset. Thank you very much for the detailed feedback for v7. We appreciate your time. We believe we have address all the comments for v7 in the current series.
The broader items we have addressed in this series are as follows: - Removed the main channel / control channel. - Enabled 1:1 mapping between irqfd:PCIDevice, moving away from shared interrupt lines to avoid collision between irqfds - Defined an object type named “remote-object” that connects the device with its fd in the remote process. This object limits the number of remote devices to 1 per process to alleviate security concerns with multiple devices per process. We are addressing the authentication mechanism for multiple devices in the VFIO-over-socket proposal. To touch upon the brief history of this project, we posted the Proof Of Concept patches before the BoF session in 2018. Subsequently, we posted RFC v1 [1], RFC v2 [2], RFC v3 [3], RFC v4 [4], v5 [5], v6 [6] and v7 [7] of the patch series. Following people contributed to the design and implementation of this project: Stefan Hajnoczi <stefa...@redhat.com> Konrad Wilk <konrad.w...@oracle.com> Kanth Ghatraju <kanth.ghatr...@oracle.com> John G Johnson <john.g.john...@oracle.com> Elena Ufimtseva <elena.ufimts...@oracle.com> Jagannathan Raman <jag.ra...@oracle.com> We would like to thank QEMU community for your feedback in the design and implementation of this project. For the full concept writeup about QEMU multi-process, please refer to docs/devel/qemu-multiprocess.rst. Also see docs/qemu-multiprocess.txt for usage information. We welcome all your ideas, concerns, and questions for this patchset. [POC]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg566538.html [1]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg602285.html [2]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg624877.html [3]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg642000.html [4]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg655118.html [5]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg682429.html [6]: https://www.mail-archive.com/qemu-devel@nongnu.org/msg697484.html [7]: https://patchew.org/QEMU/cover.1593273671.git.elena.ufimts...@oracle.com/ Elena Ufimtseva (8): multi-process: add qio channel function to transmit multi-process: define MPQemuMsg format and transmission functions multi-process: add co-routines to communicate with remote multi-process: introduce proxy object multi-process: Forward PCI config space acceses to the remote process multi-process: heartbeat messages to remote multi-process: perform device reset in the remote process multi-process: add configure and usage information Jagannathan Raman (11): memory: alloc RAM from file at offset multi-process: Add config option for multi-process QEMU multi-process: setup PCI host bridge for remote device multi-process: setup a machine object for remote device process multi-process: Initialize message handler in remote device multi-process: Associate fd of a PCIDevice with its object multi-process: setup memory manager for remote device multi-process: PCI BAR read/write handling for proxy & remote endpoints multi-process: Synchronize remote memory multi-process: create IOHUB object to handle irq multi-process: Retrieve PCI info from remote process John G Johnson (1): multi-process: add the concept description to docs/devel/qemu-multiprocess MAINTAINERS | 26 ++ backends/hostmem-memfd.c | 2 +- configure | 11 + docs/devel/index.rst | 1 + docs/devel/multi-process.rst | 966 ++++++++++++++++++++++++++++++++++++++++ docs/multi-process.rst | 67 +++ exec.c | 11 +- hw/Makefile.objs | 1 + hw/i386/Makefile.objs | 4 + hw/i386/remote-memory.c | 58 +++ hw/i386/remote-msg.c | 266 +++++++++++ hw/i386/remote-obj.c | 127 ++++++ hw/i386/remote.c | 79 ++++ hw/misc/ivshmem.c | 3 +- hw/pci-host/Makefile.objs | 1 + hw/pci-host/remote.c | 76 ++++ hw/pci/Makefile.objs | 2 + hw/pci/memory-sync.c | 211 +++++++++ hw/pci/proxy.c | 417 +++++++++++++++++ hw/remote/Makefile.objs | 1 + hw/remote/iohub.c | 123 +++++ include/exec/memory.h | 2 + include/exec/ram_addr.h | 2 +- include/hw/i386/remote-memory.h | 19 + include/hw/i386/remote-obj.h | 42 ++ include/hw/i386/remote.h | 35 ++ include/hw/pci-host/remote.h | 31 ++ include/hw/pci/memory-sync.h | 27 ++ include/hw/pci/pci_ids.h | 3 + include/hw/pci/proxy.h | 48 ++ include/hw/remote/iohub.h | 42 ++ include/io/channel.h | 24 + include/io/mpqemu-link.h | 123 +++++ include/qemu/mmap-alloc.h | 3 +- io/Makefile.objs | 2 + io/channel.c | 45 ++ io/mpqemu-link.c | 303 +++++++++++++ scripts/mpqemu-launcher.py | 49 ++ softmmu/memory.c | 3 +- util/mmap-alloc.c | 7 +- util/oslib-posix.c | 2 +- 41 files changed, 3252 insertions(+), 13 deletions(-) create mode 100644 docs/devel/multi-process.rst create mode 100644 docs/multi-process.rst create mode 100644 hw/i386/remote-memory.c create mode 100644 hw/i386/remote-msg.c create mode 100644 hw/i386/remote-obj.c create mode 100644 hw/i386/remote.c create mode 100644 hw/pci-host/remote.c create mode 100644 hw/pci/memory-sync.c create mode 100644 hw/pci/proxy.c create mode 100644 hw/remote/Makefile.objs create mode 100644 hw/remote/iohub.c create mode 100644 include/hw/i386/remote-memory.h create mode 100644 include/hw/i386/remote-obj.h create mode 100644 include/hw/i386/remote.h create mode 100644 include/hw/pci-host/remote.h create mode 100644 include/hw/pci/memory-sync.h create mode 100644 include/hw/pci/proxy.h create mode 100644 include/hw/remote/iohub.h create mode 100644 include/io/mpqemu-link.h create mode 100644 io/mpqemu-link.c create mode 100755 scripts/mpqemu-launcher.py -- 1.8.3.1