This patch series introduces a new device to QEMU, the SDM (Signal Distribution Module), intended to route inter-processor signals intra and inter QEMU instances.
To be as modular as possible, the device is split between the interface (virtio/platform) and the communication channel (local/socket). A platform interface has been implemented to allow non-linux operating system (FreeRTOS for example) to use the SDM. Also, various signals can be defined with hardware operations. Those signals can be used, for example, to route interrupts or to trigger the boot of another QEMU instance. When a signal is received on a SDM, it will check if the signal ID is associate to a hardware action that will be executed if found. The hardware action allows the signal to perform some actions (e.g triggering boot) before being forwarded to the operating system. You can test thoses patches using modules and test application available on https://git.virtualopensystems.com/dev/qemu-het-tools : - Platform module on branch sdm_test_mod_v1 - Virtio module on branch sdm-dev-v3 - Test application on branch sdm_test_app QEMU code is avalaible here on g...@git.virtualopensystems.com:dev/qemu-het.git branch sdm-dev-v3. Run QEMU instance: ./qemu-system-arm -nographic \ -kernel zImage \ -M virt -m 512M \ -initrd busybox.cpio \ -object sdm-communication-local,id=localcomm \ -object sdm-signal,id=interrupt \ -device sdm-platform,comm=localcomm,master,num-slaves=1,len-signals=1,signals[0]="interrupt" \ -device sdm-platform,comm=localcomm,len-signals=1,len-signals=1,signals[0]="interrupt" After loading the corresponding module (insmod sdm_test_mod.ko), you can send signal accross instances using the sdm-test application: ./sdm-test -s 0 0 0x0 0x0 0x0 This patch series is a follow-up of "[Qemu-devel] [RFC v2 0/6] SDM Interface": https://lists.gnu.org/archive/html/qemu-devel/2016-03/msg04492.html This work has been sponsored by Huawei Technologies Duesseldorf GmbH. --- Changes since v2: - added virtio device configuration space - added configuration accessory methods - fixed bug in local communication channel - aligned virto device ID with specification RFC --- Baptiste Reynal (6): hw/misc: sdm interface hw/misc: sdm platform device hw/arm: sysbus-fdt hw/misc: sdm virtio device hw/misc: sdm communication local hw/misc: sdm communication socket default-configs/arm-softmmu.mak | 1 + hw/arm/sysbus-fdt.c | 62 ++++++ hw/misc/Makefile.objs | 7 + hw/misc/sdm-communication-local.c | 116 +++++++++++ hw/misc/sdm-communication-socket.c | 160 +++++++++++++++ hw/misc/sdm-communication.c | 68 +++++++ hw/misc/sdm-device.c | 78 ++++++++ hw/misc/sdm-platform.c | 231 ++++++++++++++++++++++ hw/misc/sdm-signal.c | 52 +++++ hw/virtio/Makefile.objs | 1 + hw/virtio/virtio-sdm.c | 303 +++++++++++++++++++++++++++++ include/hw/misc/sdm-communication-local.h | 35 ++++ include/hw/misc/sdm-communication-socket.h | 42 ++++ include/hw/misc/sdm-communication.h | 60 ++++++ include/hw/misc/sdm-device.h | 61 ++++++ include/hw/misc/sdm-platform.h | 65 +++++++ include/hw/misc/sdm-signal.h | 61 ++++++ include/hw/virtio/virtio-sdm.h | 58 ++++++ linux-headers/linux/virtio_sdm.h | 58 ++++++ 19 files changed, 1519 insertions(+) create mode 100644 hw/misc/sdm-communication-local.c create mode 100644 hw/misc/sdm-communication-socket.c create mode 100644 hw/misc/sdm-communication.c create mode 100644 hw/misc/sdm-device.c create mode 100644 hw/misc/sdm-platform.c create mode 100644 hw/misc/sdm-signal.c create mode 100644 hw/virtio/virtio-sdm.c create mode 100644 include/hw/misc/sdm-communication-local.h create mode 100644 include/hw/misc/sdm-communication-socket.h create mode 100644 include/hw/misc/sdm-communication.h create mode 100644 include/hw/misc/sdm-device.h create mode 100644 include/hw/misc/sdm-platform.h create mode 100644 include/hw/misc/sdm-signal.h create mode 100644 include/hw/virtio/virtio-sdm.h create mode 100644 linux-headers/linux/virtio_sdm.h -- 1.9.1