[PATCH 0/5] virt: Add Bao hypervisor IPC and I/O dispatcher drivers

joaopeixoto
2025-12-24T13:52:55Z

From: João Peixoto <joaopeixoto@osyx.tech>

This series introduces support for the Bao hypervisor guest-side drivers
under drivers/virt/bao and the associated Device Tree bindings, UAPI,
and MAINTAINERS entries.

Bao is a lightweight static-partitioning hypervisor for embedded and
safety-critical systems. This series adds:
- The Bao IPC shared memory driver, which enables Linux guests to
communicate with each other through shared memory regions.
- The Bao I/O Dispatcher driver, which allows Bao's VMs to share I/O
devices using device paravirtualization (VirtIO).

Patch overview:

1. dt-bindings: Add Bao IPC shared memory driver binding
- Provides a standardized DT description for Bao IPC shared memory
devices used for inter-VM communication.

2. virt: add Bao IPC shared memory driver
- Character device driver that maps shared-memory regions and
communicates with the hypervisor via architecture-specific hypercalls
(SMC/HVC on ARM, SBI ecall on RISC-V).

3. dt-bindings: Add Bao I/O dispatcher driver binding
- DT binding for the Bao I/O Dispatcher, describing memory regions,
interrupts, and compatible strings for backend VMs.

4. virt: add Bao I/O dispatcher driver
- Implements the I/O Dispatcher kernel module bridging Bao Remote I/O
with VirtIO backend devices.
- Includes architecture-specific headers for ARM, ARM64, and RISC-V,
driver framework files, UAPI headers, Kconfig/Makefile integration,
and ioctl documentation.

5. MAINTAINERS: Add entries for Bao hypervisor drivers
- Registers maintainers for all Bao hypervisor components to ensure
proper kernel review and notifications.

This series has been validated on Linux guests running under Bao hypervisor,
ensuring correct initialization, read/write operations for IPC shared
memory, and proper I/O Dispatcher functionality for backend VMs.

Feedback and review from maintainers of virtualization, architecture-specific
code (ARM, ARM64, RISC-V), Device Tree bindings, and UAPI are welcome.

João Peixoto (5):
dt-bindings: Add Bao IPC shared memory driver binding
virt: add Bao IPC shared memory driver
dt-bindings: Add Bao I/O dispatcher driver binding
virt: add Bao I/O dispatcher driver
MAINTAINERS: Add entries for Bao hypervisor drivers, headers, and DT
bindings

.../bindings/bao/io-dispatcher.yaml | 67 +++
.../devicetree/bindings/bao/ipcshmem.yaml | 99 ++++
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
.../userspace-api/ioctl/ioctl-number.rst | 2 +
MAINTAINERS | 12 +
arch/arm/include/asm/bao.h | 62 ++
arch/arm64/include/asm/bao.h | 62 ++
arch/riscv/include/asm/bao.h | 61 ++
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 | 386 +++++++++++++
drivers/virt/bao/io-dispatcher/dm.c | 330 +++++++++++
drivers/virt/bao/io-dispatcher/driver.c | 348 +++++++++++
drivers/virt/bao/io-dispatcher/hypercall.h | 30 +
drivers/virt/bao/io-dispatcher/intc.c | 68 +++
drivers/virt/bao/io-dispatcher/io_client.c | 435 ++++++++++++++
.../virt/bao/io-dispatcher/io_dispatcher.c | 207 +++++++
drivers/virt/bao/io-dispatcher/ioctls.c | 145 +++++
drivers/virt/bao/io-dispatcher/ioeventfd.c | 336 +++++++++++
drivers/virt/bao/io-dispatcher/irqfd.c | 341 +++++++++++
drivers/virt/bao/ipcshmem/Kconfig | 9 +
drivers/virt/bao/ipcshmem/Makefile | 3 +
drivers/virt/bao/ipcshmem/ipcshmem.c | 539 ++++++++++++++++++
include/uapi/linux/bao.h | 124 ++++
28 files changed, 3701 insertions(+)
create mode 100644 Documentation/devicetree/bindings/bao/io-dispatcher.yaml
create mode 100644 Documentation/devicetree/bindings/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/hypercall.h
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/ioctls.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/uapi/linux/bao.h

--
2.43.0