[RFC PATCH v3 0/6] virt: bao: Add Bao hypervisor IPC and I/O dispatcher drivers
João Peixoto <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.linux.drivers.devicetree,gmane.linux.documentation,gmane.linux.ports.arm.kernel,gmane.linux.ports.riscv |
|---|---|
| Message-ID | <[email protected]> |
This series adds guest-side drivers for the Bao static-partitioning hypervisor: an IPC shared-memory driver and an I/O dispatcher, plus their device-tree bindings, UAPI and MAINTAINERS entry. Bao is a lightweight static-partitioning hypervisor for embedded and safety-critical systems. - The IPC shared-memory driver lets Bao guests exchange data through a shared-memory region split into a read and a write channel. - The I/O dispatcher lets a backend guest service paravirtualised (VirtIO) I/O on behalf of frontend guests. Sent as RFC: the RISC-V backend uses the SBI experimental extension space (see "Open items" below), and the device-tree bindings were reworked in this version and would benefit from another look. ## Changes since v2 - dt-bindings (ipcshmem): describe the two channels through reg/reg-names, drop read-channel/write-channel and the "id" property, use a vendor "bao,id", and use a generic node name (Krzysztof Kozlowski). - dt-bindings (io-dispatcher): one node per backend device (single reg + interrupt) instead of one node describing many devices, modelled on the gunyah/Mediatek Genio bindings (Krzysztof Kozlowski). - io dispatcher driver: one platform device per device model (/dev/bao-dmX); removed the global DM list, the anonymous-inode fd and the dispatcher indirection ioctl; fixed a leak and probe error-path bugs; initialise virtio_requests_lock and the hypercall context fields. - ipcshmem driver: derive the two regions from reg; drop the success print; do the range arithmetic in u64. - Kconfig: fix the help-text indentation (Randy Dunlap). - style: unwrap the few-char line wraps; the IPC hypercall helper now takes a single argument and fits on one line (Andrew Jones). - riscv: use BAO_SBI_EXT_ID consistently, document that it is in the SBI experimental extension space, and drop the redundant ecall input constraints (Andrew Jones). - commit messages: rewritten to kernel style; the "consolidate the IPC hypercall ID" patch now explains why and covers the signature change (Greg KH). - process: sent as a fresh thread with this changelog, and the mail setup that bounced v1/v2 is fixed (Krzysztof Kozlowski, Greg KH). ## Open items / still under discussion - RISC-V uses the experimental SBI extension ID (0x08000ba0). A permanent implementation ID must be registered in the RISC-V SBI spec before RISC-V can be non-experimental; hence RFC. - Whether the Remote I/O hypercall must follow SBI chapter-3 register rules (Andrew Jones) — see the reply on patch 4. - The "bao,id" property and the "bao" vendor prefix (Krzysztof Kozlowski) — rationale is in the bindings; alternatives welcome. Link to v2: https://lore.kernel.org/all/[email protected]/ João Peixoto (6): dt-bindings: bao: add IPC shared-memory device virt: bao: add IPC shared-memory driver dt-bindings: bao: add I/O dispatcher device virt: bao: add I/O dispatcher driver virt: bao: consolidate the IPC hypercall ID in include/linux/bao.h MAINTAINERS: add Bao hypervisor entry .../bindings/bao/bao,io-dispatcher.yaml | 58 +++ .../devicetree/bindings/bao/bao,ipcshmem.yaml | 59 +++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + .../userspace-api/ioctl/ioctl-number.rst | 2 + MAINTAINERS | 13 + arch/arm/include/asm/bao.h | 60 +++ arch/arm64/include/asm/bao.h | 60 +++ arch/riscv/include/asm/bao.h | 66 +++ drivers/virt/Kconfig | 2 + drivers/virt/Makefile | 2 + drivers/virt/bao/Kconfig | 5 + drivers/virt/bao/Makefile | 4 + drivers/virt/bao/io-dispatcher/Kconfig | 16 + drivers/virt/bao/io-dispatcher/Makefile | 4 + drivers/virt/bao/io-dispatcher/bao_drv.h | 349 +++++++++++++++ drivers/virt/bao/io-dispatcher/dm.c | 316 ++++++++++++++ drivers/virt/bao/io-dispatcher/driver.c | 95 +++++ drivers/virt/bao/io-dispatcher/intc.c | 64 +++ drivers/virt/bao/io-dispatcher/io_client.c | 401 ++++++++++++++++++ .../virt/bao/io-dispatcher/io_dispatcher.c | 181 ++++++++ drivers/virt/bao/io-dispatcher/ioeventfd.c | 323 ++++++++++++++ drivers/virt/bao/io-dispatcher/irqfd.c | 314 ++++++++++++++ drivers/virt/bao/ipcshmem/Kconfig | 10 + drivers/virt/bao/ipcshmem/Makefile | 3 + drivers/virt/bao/ipcshmem/ipcshmem.c | 228 ++++++++++ include/linux/bao.h | 44 ++ include/uapi/linux/bao.h | 96 +++++ 27 files changed, 2777 insertions(+) create mode 100644 Documentation/devicetree/bindings/bao/bao,io-dispatcher.yaml create mode 100644 Documentation/devicetree/bindings/bao/bao,ipcshmem.yaml create mode 100644 arch/arm/include/asm/bao.h create mode 100644 arch/arm64/include/asm/bao.h create mode 100644 arch/riscv/include/asm/bao.h create mode 100644 drivers/virt/bao/Kconfig create mode 100644 drivers/virt/bao/Makefile create mode 100644 drivers/virt/bao/io-dispatcher/Kconfig create mode 100644 drivers/virt/bao/io-dispatcher/Makefile create mode 100644 drivers/virt/bao/io-dispatcher/bao_drv.h create mode 100644 drivers/virt/bao/io-dispatcher/dm.c create mode 100644 drivers/virt/bao/io-dispatcher/driver.c create mode 100644 drivers/virt/bao/io-dispatcher/intc.c create mode 100644 drivers/virt/bao/io-dispatcher/io_client.c create mode 100644 drivers/virt/bao/io-dispatcher/io_dispatcher.c create mode 100644 drivers/virt/bao/io-dispatcher/ioeventfd.c create mode 100644 drivers/virt/bao/io-dispatcher/irqfd.c create mode 100644 drivers/virt/bao/ipcshmem/Kconfig create mode 100644 drivers/virt/bao/ipcshmem/Makefile create mode 100644 drivers/virt/bao/ipcshmem/ipcshmem.c create mode 100644 include/linux/bao.h create mode 100644 include/uapi/linux/bao.h base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482 -- 2.43.0