[RFC PATCH v3 0/6] virt: bao: Add Bao hypervisor IPC and I/O dispatcher drivers
João Peixoto
jpeixoto at osyx.tech
Fri Aug 7 00:39:27 PDT 2026
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/20260107162829.416885-1-joaopeixoto@osyx.tech/
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
More information about the linux-arm-kernel
mailing list