xen/arch/arm/xen.lds.S | 1 + xen/arch/ppc/xen.lds.S | 1 + xen/arch/riscv/xen.lds.S | 1 + xen/arch/x86/Makefile | 1 + xen/arch/x86/dom0_build.c | 112 +-- xen/arch/x86/hvm/dom0_build.c | 7 + xen/arch/x86/hvm/hvm.c | 56 +- xen/arch/x86/hvm/nestedhvm.c | 8 +- xen/arch/x86/hvm/quirks.c | 3 - xen/arch/x86/hvm/svm/nestedsvm.c | 2 +- xen/arch/x86/hvm/vioapic.c | 10 + xen/arch/x86/hvm/vmx/vvmx.c | 4 +- xen/arch/x86/include/asm/hvm/nestedhvm.h | 3 +- xen/arch/x86/include/asm/hvm/support.h | 2 - xen/arch/x86/include/asm/iocap.h | 2 + xen/arch/x86/include/asm/irq.h | 8 + xen/arch/x86/ioport.c | 163 ++++ xen/arch/x86/irq.c | 8 + xen/arch/x86/pv/dom0_build.c | 7 + xen/arch/x86/xen.lds.S | 1 + xen/common/Kconfig | 2 + xen/common/Makefile | 1 + xen/common/domain.c | 8 +- xen/common/emul/Kconfig | 6 + xen/common/emul/Makefile | 1 + xen/common/emul/vuart/Kconfig | 25 + xen/common/emul/vuart/Makefile | 2 + xen/common/emul/vuart/ns16x50.c | 984 +++++++++++++++++++++++ xen/common/emul/vuart/vuart.c | 157 ++++ xen/common/keyhandler.c | 3 + xen/drivers/char/console.c | 6 +- xen/drivers/char/ns16550.c | 16 +- xen/drivers/passthrough/x86/hvm.c | 11 +- xen/include/xen/8250-uart.h | 50 +- xen/include/xen/sched.h | 4 + xen/include/xen/serial.h | 3 + xen/include/xen/vuart.h | 116 +++ xen/include/xen/xen.lds.h | 10 + 38 files changed, 1634 insertions(+), 171 deletions(-) create mode 100644 xen/arch/x86/ioport.c create mode 100644 xen/common/emul/Kconfig create mode 100644 xen/common/emul/Makefile create mode 100644 xen/common/emul/vuart/Kconfig create mode 100644 xen/common/emul/vuart/Makefile create mode 100644 xen/common/emul/vuart/ns16x50.c create mode 100644 xen/common/emul/vuart/vuart.c create mode 100644 xen/include/xen/vuart.h
x86 port of Xen lacks vUART facility similar to Arm's vpl011 to support x86
guest OS bring up in the embedded setups.
This patch series introduces initial in-hypervisor emulator for
NS8250/NS16x50-compatible UARTs under CONFIG_VUART_NS16X50.
In parallel domain creation scenario (hyperlaunch), NS16550 emulator helps
early guest firmware and OS bringup debugging, because it eliminates
dependency on the external emulator (qemu) being operational by the time
domains are created.
The emulator also allows to forward the physical console input to the x86
domain which is useful when a system has only one physical UART for early
debugging and this UART is owned by Xen.
By default, CONFIG_VUART_NS16X50 enables emulation of NS16550 at I/O port
0x2f8, IRQ#3 in guest OS (legacy COM2). Legacy COM resources cannot be
selected at built-time or via per-domain xl configuration in this initial
submission.
CONFIG_VUART_NS16X50_DEBUG enables some extra debugging facilities useful
for NS16550 emulator development/debugging (disabled by default).
The NS16550 emulator is disabled in default x86 configuration and goes under
CONFIG_EXPERT in Kconfig.
Limitations
===========
- Only x86;
- Only legacy COM2 resources, custom I/O ports/IRQs are not supported;
- Only Xen console as a backend, no inter-domain communication (similar to
vpl011 on Arm);
- Only 8n1 emulation (8-bit data, no parity, 1 stop bit);
- No toolstack integration;
- No baud rate emulation (reports 115200 baud to the guest OS);
- No FIFO-less mode emulation;
- No RX FIFO interrupt moderation (FCR) emulation;
- No integration w/ VM snapshotting (HVM_REGISTER_SAVE_RESTORE() and
friends);
- No MMIO-based UART emulation.
Series
======
Patch 1 introduces the new vUART framework, that is the code originally
posted here:
https://lore.kernel.org/xen-devel/20250624035443.344099-16-dmukhin@ford.com/
Required for emulator.
Patch 2 adds missing NS16550 definitions, required for emulator.
Patch 3 introduces the basic emulator skeleton - state machine
initialization stubs, I/O port handler stub, logging, etc.
Patches 4-11 incrementally populate the minimal NS16550 register emulation.
Patch 12 hooks vUART state debugging (disabled by default).
Pathes 13-15 introduce necessary changes to enable NS16550 on dom0 (and PVH).
Link to CI: https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2024756493
Link to branch: https://gitlab.com/xen-project/people/dmukhin/xen/-/tree/vuart-ns8250-v6?ref_type=heads
Testing
=======
```shell
echo CONFIG_EXPERT=y >> .config
echo CONFIG_VUART_NS16X50=y >> .config
make olddefconfig
```
COM2 (0x2f8) resources are used by default.
To test w/ virtual COM2, the guest kernel parameters should contain
something like the following:
earlycon=uart,io,0x2f8,115200n8 console=uart,io,0x2f8,115200n8
HVM
---
Tested only boot of HVM linux guest with OVMF as the virtual firmware.
SeaBIOS as a virtual firmware is not tested.
PVH (dom0)
----------
Xen is able to forward physical console input to the domain with virtual
NS16550. To switch the console focus press Ctrl+aaa.
Console switch is limited on x86 to dom0 and Xen (fixes pending).
Changes since v5:
- Split THR/RBR into two separate patches.
- Addressed feedback from v5.
- Link to v5: https://lore.kernel.org/xen-devel/20250828235409.2835815-1-dmukhin@ford.com/
Changes since v4:
- Split the series to make it simpler to review.
- Addressed feedback from v4.
- Dropped xl changes, which I will submit separately.
- Link to v4: https://lore.kernel.org/xen-devel/20250731192130.3948419-1-dmukhin@ford.com/
Changes since v3:
- Reduced the blast radius of the series, thanks to reviews, individual
aspects (like console focus) touched in v3 moved to separate threads.
- Kept the UART emulator framework since I need to redo some of emulator code
and there's more-or-less agreement on it (where to place, naming, scope).
- Applied the feedback from
https://lore.kernel.org/xen-devel/20250624035443.344099-1-dmukhin@ford.com/
- Link to v3: https://lore.kernel.org/xen-devel/20250103-vuart-ns8250-v3-v1-0-c5d36b31d66c@ford.com/
Changes since v2:
- renamed emulator s/NS8250/NS16550/g
- reduced the patch series after addressing v2 feedback
- introduced driver framework for UART emulators
- unified guest OS printouts across all available UART emulators
- Link to v2: https://lore.kernel.org/xen-devel/20241205-vuart-ns8250-v1-0-e9aa923127eb@ford.com/
Changes since v1:
- dropped kmalloc/kfree aliases
- fixed ECLAIR jobs (thanks Andrew Cooper)
- addressed console forwarding on arm32 and arm64 (thanks to Luca Fancellu)
- moved NS8250 debugging stubs into its own patch
- added fix for https://gitlab.com/xen-project/xen/-/issues/184
- Link to v1: https://lore.kernel.org/r/20241126-vuart-ns8250-v1-v1-0-87b9a8375b7a@ford.com
Denis Mukhin (15):
emul/vuart: introduce framework for UART emulators
xen/8250-uart: update definitions
emul/ns16x50: implement emulator stub
emul/ns16x50: implement DLL/DLM registers
emul/ns16x50: implement SCR register
emul/ns16x50: implement IER/IIR registers
emul/ns16x50: implement LCR/LSR registers
emul/ns16x50: implement MCR/MSR registers
emul/ns16x50: implement RBR register
emul/ns16x50: implement THR register
emul/ns16x50: implement FCR register (write-only)
emul/ns16550: implement dump_state() hook
x86/domain: enable per-domain I/O port bitmaps
xen/domain: allocate d->irq_caps before arch-specific initialization
emul/ns16x50: implement IRQ emulation via vIOAPIC
xen/arch/arm/xen.lds.S | 1 +
xen/arch/ppc/xen.lds.S | 1 +
xen/arch/riscv/xen.lds.S | 1 +
xen/arch/x86/Makefile | 1 +
xen/arch/x86/dom0_build.c | 112 +--
xen/arch/x86/hvm/dom0_build.c | 7 +
xen/arch/x86/hvm/hvm.c | 56 +-
xen/arch/x86/hvm/nestedhvm.c | 8 +-
xen/arch/x86/hvm/quirks.c | 3 -
xen/arch/x86/hvm/svm/nestedsvm.c | 2 +-
xen/arch/x86/hvm/vioapic.c | 10 +
xen/arch/x86/hvm/vmx/vvmx.c | 4 +-
xen/arch/x86/include/asm/hvm/nestedhvm.h | 3 +-
xen/arch/x86/include/asm/hvm/support.h | 2 -
xen/arch/x86/include/asm/iocap.h | 2 +
xen/arch/x86/include/asm/irq.h | 8 +
xen/arch/x86/ioport.c | 163 ++++
xen/arch/x86/irq.c | 8 +
xen/arch/x86/pv/dom0_build.c | 7 +
xen/arch/x86/xen.lds.S | 1 +
xen/common/Kconfig | 2 +
xen/common/Makefile | 1 +
xen/common/domain.c | 8 +-
xen/common/emul/Kconfig | 6 +
xen/common/emul/Makefile | 1 +
xen/common/emul/vuart/Kconfig | 25 +
xen/common/emul/vuart/Makefile | 2 +
xen/common/emul/vuart/ns16x50.c | 984 +++++++++++++++++++++++
xen/common/emul/vuart/vuart.c | 157 ++++
xen/common/keyhandler.c | 3 +
xen/drivers/char/console.c | 6 +-
xen/drivers/char/ns16550.c | 16 +-
xen/drivers/passthrough/x86/hvm.c | 11 +-
xen/include/xen/8250-uart.h | 50 +-
xen/include/xen/sched.h | 4 +
xen/include/xen/serial.h | 3 +
xen/include/xen/vuart.h | 116 +++
xen/include/xen/xen.lds.h | 10 +
38 files changed, 1634 insertions(+), 171 deletions(-)
create mode 100644 xen/arch/x86/ioport.c
create mode 100644 xen/common/emul/Kconfig
create mode 100644 xen/common/emul/Makefile
create mode 100644 xen/common/emul/vuart/Kconfig
create mode 100644 xen/common/emul/vuart/Makefile
create mode 100644 xen/common/emul/vuart/ns16x50.c
create mode 100644 xen/common/emul/vuart/vuart.c
create mode 100644 xen/include/xen/vuart.h
--
2.51.0
Oleksii and all, I would like to consider patches 1-12 of this patch series for 4.21, pending the few minor comments I made addressed. On Fri, 5 Sep 2025, dmukhin@xen.org wrote: > x86 port of Xen lacks vUART facility similar to Arm's vpl011 to support x86 > guest OS bring up in the embedded setups. > > This patch series introduces initial in-hypervisor emulator for > NS8250/NS16x50-compatible UARTs under CONFIG_VUART_NS16X50. > > In parallel domain creation scenario (hyperlaunch), NS16550 emulator helps > early guest firmware and OS bringup debugging, because it eliminates > dependency on the external emulator (qemu) being operational by the time > domains are created. > > The emulator also allows to forward the physical console input to the x86 > domain which is useful when a system has only one physical UART for early > debugging and this UART is owned by Xen. > > By default, CONFIG_VUART_NS16X50 enables emulation of NS16550 at I/O port > 0x2f8, IRQ#3 in guest OS (legacy COM2). Legacy COM resources cannot be > selected at built-time or via per-domain xl configuration in this initial > submission. > > CONFIG_VUART_NS16X50_DEBUG enables some extra debugging facilities useful > for NS16550 emulator development/debugging (disabled by default). > > The NS16550 emulator is disabled in default x86 configuration and goes under > CONFIG_EXPERT in Kconfig. > > Limitations > =========== > - Only x86; > - Only legacy COM2 resources, custom I/O ports/IRQs are not supported; > - Only Xen console as a backend, no inter-domain communication (similar to > vpl011 on Arm); > - Only 8n1 emulation (8-bit data, no parity, 1 stop bit); > - No toolstack integration; > - No baud rate emulation (reports 115200 baud to the guest OS); > - No FIFO-less mode emulation; > - No RX FIFO interrupt moderation (FCR) emulation; > - No integration w/ VM snapshotting (HVM_REGISTER_SAVE_RESTORE() and > friends); > - No MMIO-based UART emulation. > > Series > ====== > > Patch 1 introduces the new vUART framework, that is the code originally > posted here: > https://lore.kernel.org/xen-devel/20250624035443.344099-16-dmukhin@ford.com/ > Required for emulator. > > Patch 2 adds missing NS16550 definitions, required for emulator. > > Patch 3 introduces the basic emulator skeleton - state machine > initialization stubs, I/O port handler stub, logging, etc. > > Patches 4-11 incrementally populate the minimal NS16550 register emulation. > > Patch 12 hooks vUART state debugging (disabled by default). > > Pathes 13-15 introduce necessary changes to enable NS16550 on dom0 (and PVH). > > Link to CI: https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2024756493 > Link to branch: https://gitlab.com/xen-project/people/dmukhin/xen/-/tree/vuart-ns8250-v6?ref_type=heads > > Testing > ======= > > ```shell > echo CONFIG_EXPERT=y >> .config > echo CONFIG_VUART_NS16X50=y >> .config > make olddefconfig > ``` > COM2 (0x2f8) resources are used by default. > > To test w/ virtual COM2, the guest kernel parameters should contain > something like the following: > earlycon=uart,io,0x2f8,115200n8 console=uart,io,0x2f8,115200n8 > > HVM > --- > Tested only boot of HVM linux guest with OVMF as the virtual firmware. > SeaBIOS as a virtual firmware is not tested. > > PVH (dom0) > ---------- > Xen is able to forward physical console input to the domain with virtual > NS16550. To switch the console focus press Ctrl+aaa. > Console switch is limited on x86 to dom0 and Xen (fixes pending). > > Changes since v5: > - Split THR/RBR into two separate patches. > - Addressed feedback from v5. > - Link to v5: https://lore.kernel.org/xen-devel/20250828235409.2835815-1-dmukhin@ford.com/ > > Changes since v4: > - Split the series to make it simpler to review. > - Addressed feedback from v4. > - Dropped xl changes, which I will submit separately. > - Link to v4: https://lore.kernel.org/xen-devel/20250731192130.3948419-1-dmukhin@ford.com/ > > Changes since v3: > - Reduced the blast radius of the series, thanks to reviews, individual > aspects (like console focus) touched in v3 moved to separate threads. > - Kept the UART emulator framework since I need to redo some of emulator code > and there's more-or-less agreement on it (where to place, naming, scope). > - Applied the feedback from > https://lore.kernel.org/xen-devel/20250624035443.344099-1-dmukhin@ford.com/ > - Link to v3: https://lore.kernel.org/xen-devel/20250103-vuart-ns8250-v3-v1-0-c5d36b31d66c@ford.com/ > > Changes since v2: > - renamed emulator s/NS8250/NS16550/g > - reduced the patch series after addressing v2 feedback > - introduced driver framework for UART emulators > - unified guest OS printouts across all available UART emulators > - Link to v2: https://lore.kernel.org/xen-devel/20241205-vuart-ns8250-v1-0-e9aa923127eb@ford.com/ > > Changes since v1: > - dropped kmalloc/kfree aliases > - fixed ECLAIR jobs (thanks Andrew Cooper) > - addressed console forwarding on arm32 and arm64 (thanks to Luca Fancellu) > - moved NS8250 debugging stubs into its own patch > - added fix for https://gitlab.com/xen-project/xen/-/issues/184 > - Link to v1: https://lore.kernel.org/r/20241126-vuart-ns8250-v1-v1-0-87b9a8375b7a@ford.com > > Denis Mukhin (15): > emul/vuart: introduce framework for UART emulators > xen/8250-uart: update definitions > emul/ns16x50: implement emulator stub > emul/ns16x50: implement DLL/DLM registers > emul/ns16x50: implement SCR register > emul/ns16x50: implement IER/IIR registers > emul/ns16x50: implement LCR/LSR registers > emul/ns16x50: implement MCR/MSR registers > emul/ns16x50: implement RBR register > emul/ns16x50: implement THR register > emul/ns16x50: implement FCR register (write-only) > emul/ns16550: implement dump_state() hook > x86/domain: enable per-domain I/O port bitmaps > xen/domain: allocate d->irq_caps before arch-specific initialization > emul/ns16x50: implement IRQ emulation via vIOAPIC > > xen/arch/arm/xen.lds.S | 1 + > xen/arch/ppc/xen.lds.S | 1 + > xen/arch/riscv/xen.lds.S | 1 + > xen/arch/x86/Makefile | 1 + > xen/arch/x86/dom0_build.c | 112 +-- > xen/arch/x86/hvm/dom0_build.c | 7 + > xen/arch/x86/hvm/hvm.c | 56 +- > xen/arch/x86/hvm/nestedhvm.c | 8 +- > xen/arch/x86/hvm/quirks.c | 3 - > xen/arch/x86/hvm/svm/nestedsvm.c | 2 +- > xen/arch/x86/hvm/vioapic.c | 10 + > xen/arch/x86/hvm/vmx/vvmx.c | 4 +- > xen/arch/x86/include/asm/hvm/nestedhvm.h | 3 +- > xen/arch/x86/include/asm/hvm/support.h | 2 - > xen/arch/x86/include/asm/iocap.h | 2 + > xen/arch/x86/include/asm/irq.h | 8 + > xen/arch/x86/ioport.c | 163 ++++ > xen/arch/x86/irq.c | 8 + > xen/arch/x86/pv/dom0_build.c | 7 + > xen/arch/x86/xen.lds.S | 1 + > xen/common/Kconfig | 2 + > xen/common/Makefile | 1 + > xen/common/domain.c | 8 +- > xen/common/emul/Kconfig | 6 + > xen/common/emul/Makefile | 1 + > xen/common/emul/vuart/Kconfig | 25 + > xen/common/emul/vuart/Makefile | 2 + > xen/common/emul/vuart/ns16x50.c | 984 +++++++++++++++++++++++ > xen/common/emul/vuart/vuart.c | 157 ++++ > xen/common/keyhandler.c | 3 + > xen/drivers/char/console.c | 6 +- > xen/drivers/char/ns16550.c | 16 +- > xen/drivers/passthrough/x86/hvm.c | 11 +- > xen/include/xen/8250-uart.h | 50 +- > xen/include/xen/sched.h | 4 + > xen/include/xen/serial.h | 3 + > xen/include/xen/vuart.h | 116 +++ > xen/include/xen/xen.lds.h | 10 + > 38 files changed, 1634 insertions(+), 171 deletions(-) > create mode 100644 xen/arch/x86/ioport.c > create mode 100644 xen/common/emul/Kconfig > create mode 100644 xen/common/emul/Makefile > create mode 100644 xen/common/emul/vuart/Kconfig > create mode 100644 xen/common/emul/vuart/Makefile > create mode 100644 xen/common/emul/vuart/ns16x50.c > create mode 100644 xen/common/emul/vuart/vuart.c > create mode 100644 xen/include/xen/vuart.h > > -- > 2.51.0 >
Hi Denis and Stefano I’d like to acknowledge the significant effort that went into this patch series -- it’s clear that a lot of work has been invested. On Sat, Sep 6, 2025 at 5:02 AM Stefano Stabellini <sstabellini@kernel.org> wrote: > > Oleksii and all, > > I would like to consider patches 1-12 of this patch series for 4.21, > pending the few minor comments I made addressed. Although I am neither a maintainer nor an official reviewer for this project, I have looked over some of the first patches in the series. In my opinion, the series is not yet ready for merging. Even if my review is set aside, the changes are largely x86-specific and produce the most impact on this architecture. I believe that before merging, one of the x86 maintainers (or at least a trusted reviewer for x86, if available) should carefully review these patches. > > > On Fri, 5 Sep 2025, dmukhin@xen.org wrote: > > x86 port of Xen lacks vUART facility similar to Arm's vpl011 to support x86 > > guest OS bring up in the embedded setups. > > > > This patch series introduces initial in-hypervisor emulator for > > NS8250/NS16x50-compatible UARTs under CONFIG_VUART_NS16X50. > > > > In parallel domain creation scenario (hyperlaunch), NS16550 emulator helps > > early guest firmware and OS bringup debugging, because it eliminates > > dependency on the external emulator (qemu) being operational by the time > > domains are created. > > > > The emulator also allows to forward the physical console input to the x86 > > domain which is useful when a system has only one physical UART for early > > debugging and this UART is owned by Xen. > > > > By default, CONFIG_VUART_NS16X50 enables emulation of NS16550 at I/O port > > 0x2f8, IRQ#3 in guest OS (legacy COM2). Legacy COM resources cannot be > > selected at built-time or via per-domain xl configuration in this initial > > submission. > > > > CONFIG_VUART_NS16X50_DEBUG enables some extra debugging facilities useful > > for NS16550 emulator development/debugging (disabled by default). > > > > The NS16550 emulator is disabled in default x86 configuration and goes under > > CONFIG_EXPERT in Kconfig. > > > > Limitations > > =========== > > - Only x86; > > - Only legacy COM2 resources, custom I/O ports/IRQs are not supported; > > - Only Xen console as a backend, no inter-domain communication (similar to > > vpl011 on Arm); > > - Only 8n1 emulation (8-bit data, no parity, 1 stop bit); > > - No toolstack integration; > > - No baud rate emulation (reports 115200 baud to the guest OS); > > - No FIFO-less mode emulation; > > - No RX FIFO interrupt moderation (FCR) emulation; > > - No integration w/ VM snapshotting (HVM_REGISTER_SAVE_RESTORE() and > > friends); > > - No MMIO-based UART emulation. > > > > Series > > ====== > > > > Patch 1 introduces the new vUART framework, that is the code originally > > posted here: > > https://lore.kernel.org/xen-devel/20250624035443.344099-16-dmukhin@ford.com/ > > Required for emulator. > > > > Patch 2 adds missing NS16550 definitions, required for emulator. > > > > Patch 3 introduces the basic emulator skeleton - state machine > > initialization stubs, I/O port handler stub, logging, etc. > > > > Patches 4-11 incrementally populate the minimal NS16550 register emulation. > > > > Patch 12 hooks vUART state debugging (disabled by default). > > > > Pathes 13-15 introduce necessary changes to enable NS16550 on dom0 (and PVH). > > > > Link to CI: https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2024756493 > > Link to branch: https://gitlab.com/xen-project/people/dmukhin/xen/-/tree/vuart-ns8250-v6?ref_type=heads > > > > Testing > > ======= > > > > ```shell > > echo CONFIG_EXPERT=y >> .config > > echo CONFIG_VUART_NS16X50=y >> .config > > make olddefconfig > > ``` > > COM2 (0x2f8) resources are used by default. > > > > To test w/ virtual COM2, the guest kernel parameters should contain > > something like the following: > > earlycon=uart,io,0x2f8,115200n8 console=uart,io,0x2f8,115200n8 > > > > HVM > > --- > > Tested only boot of HVM linux guest with OVMF as the virtual firmware. > > SeaBIOS as a virtual firmware is not tested. > > > > PVH (dom0) > > ---------- > > Xen is able to forward physical console input to the domain with virtual > > NS16550. To switch the console focus press Ctrl+aaa. > > Console switch is limited on x86 to dom0 and Xen (fixes pending). > > > > Changes since v5: > > - Split THR/RBR into two separate patches. > > - Addressed feedback from v5. > > - Link to v5: https://lore.kernel.org/xen-devel/20250828235409.2835815-1-dmukhin@ford.com/ > > > > Changes since v4: > > - Split the series to make it simpler to review. > > - Addressed feedback from v4. > > - Dropped xl changes, which I will submit separately. > > - Link to v4: https://lore.kernel.org/xen-devel/20250731192130.3948419-1-dmukhin@ford.com/ > > > > Changes since v3: > > - Reduced the blast radius of the series, thanks to reviews, individual > > aspects (like console focus) touched in v3 moved to separate threads. > > - Kept the UART emulator framework since I need to redo some of emulator code > > and there's more-or-less agreement on it (where to place, naming, scope). > > - Applied the feedback from > > https://lore.kernel.org/xen-devel/20250624035443.344099-1-dmukhin@ford.com/ > > - Link to v3: https://lore.kernel.org/xen-devel/20250103-vuart-ns8250-v3-v1-0-c5d36b31d66c@ford.com/ > > > > Changes since v2: > > - renamed emulator s/NS8250/NS16550/g > > - reduced the patch series after addressing v2 feedback > > - introduced driver framework for UART emulators > > - unified guest OS printouts across all available UART emulators > > - Link to v2: https://lore.kernel.org/xen-devel/20241205-vuart-ns8250-v1-0-e9aa923127eb@ford.com/ > > > > Changes since v1: > > - dropped kmalloc/kfree aliases > > - fixed ECLAIR jobs (thanks Andrew Cooper) > > - addressed console forwarding on arm32 and arm64 (thanks to Luca Fancellu) > > - moved NS8250 debugging stubs into its own patch > > - added fix for https://gitlab.com/xen-project/xen/-/issues/184 > > - Link to v1: https://lore.kernel.org/r/20241126-vuart-ns8250-v1-v1-0-87b9a8375b7a@ford.com > > > > Denis Mukhin (15): > > emul/vuart: introduce framework for UART emulators > > xen/8250-uart: update definitions > > emul/ns16x50: implement emulator stub > > emul/ns16x50: implement DLL/DLM registers > > emul/ns16x50: implement SCR register > > emul/ns16x50: implement IER/IIR registers > > emul/ns16x50: implement LCR/LSR registers > > emul/ns16x50: implement MCR/MSR registers > > emul/ns16x50: implement RBR register > > emul/ns16x50: implement THR register > > emul/ns16x50: implement FCR register (write-only) > > emul/ns16550: implement dump_state() hook > > x86/domain: enable per-domain I/O port bitmaps > > xen/domain: allocate d->irq_caps before arch-specific initialization > > emul/ns16x50: implement IRQ emulation via vIOAPIC > > > > xen/arch/arm/xen.lds.S | 1 + > > xen/arch/ppc/xen.lds.S | 1 + > > xen/arch/riscv/xen.lds.S | 1 + > > xen/arch/x86/Makefile | 1 + > > xen/arch/x86/dom0_build.c | 112 +-- > > xen/arch/x86/hvm/dom0_build.c | 7 + > > xen/arch/x86/hvm/hvm.c | 56 +- > > xen/arch/x86/hvm/nestedhvm.c | 8 +- > > xen/arch/x86/hvm/quirks.c | 3 - > > xen/arch/x86/hvm/svm/nestedsvm.c | 2 +- > > xen/arch/x86/hvm/vioapic.c | 10 + > > xen/arch/x86/hvm/vmx/vvmx.c | 4 +- > > xen/arch/x86/include/asm/hvm/nestedhvm.h | 3 +- > > xen/arch/x86/include/asm/hvm/support.h | 2 - > > xen/arch/x86/include/asm/iocap.h | 2 + > > xen/arch/x86/include/asm/irq.h | 8 + > > xen/arch/x86/ioport.c | 163 ++++ > > xen/arch/x86/irq.c | 8 + > > xen/arch/x86/pv/dom0_build.c | 7 + > > xen/arch/x86/xen.lds.S | 1 + > > xen/common/Kconfig | 2 + > > xen/common/Makefile | 1 + > > xen/common/domain.c | 8 +- > > xen/common/emul/Kconfig | 6 + > > xen/common/emul/Makefile | 1 + > > xen/common/emul/vuart/Kconfig | 25 + > > xen/common/emul/vuart/Makefile | 2 + > > xen/common/emul/vuart/ns16x50.c | 984 +++++++++++++++++++++++ > > xen/common/emul/vuart/vuart.c | 157 ++++ > > xen/common/keyhandler.c | 3 + > > xen/drivers/char/console.c | 6 +- > > xen/drivers/char/ns16550.c | 16 +- > > xen/drivers/passthrough/x86/hvm.c | 11 +- > > xen/include/xen/8250-uart.h | 50 +- > > xen/include/xen/sched.h | 4 + > > xen/include/xen/serial.h | 3 + > > xen/include/xen/vuart.h | 116 +++ > > xen/include/xen/xen.lds.h | 10 + > > 38 files changed, 1634 insertions(+), 171 deletions(-) > > create mode 100644 xen/arch/x86/ioport.c > > create mode 100644 xen/common/emul/Kconfig > > create mode 100644 xen/common/emul/Makefile > > create mode 100644 xen/common/emul/vuart/Kconfig > > create mode 100644 xen/common/emul/vuart/Makefile > > create mode 100644 xen/common/emul/vuart/ns16x50.c > > create mode 100644 xen/common/emul/vuart/vuart.c > > create mode 100644 xen/include/xen/vuart.h > > > > -- > > 2.51.0 > > > Best regards, Mykola
Hello Everyone, On 9/8/25 11:04 AM, Mykola Kvach wrote: > Hi Denis and Stefano > > I’d like to acknowledge the significant effort that went into this patch > series -- it’s clear that a lot of work has been invested. > > On Sat, Sep 6, 2025 at 5:02 AM Stefano Stabellini > <sstabellini@kernel.org> wrote: >> Oleksii and all, >> >> I would like to consider patches 1-12 of this patch series for 4.21, >> pending the few minor comments I made addressed. > Although I am neither a maintainer nor an official reviewer for this > project, I have looked over some of the first patches in the series. In my > opinion, the series is not yet ready for merging. > > Even if my review is set aside, the changes are largely x86-specific and > produce the most impact on this architecture. I believe that before > merging, one of the x86 maintainers (or at least a trusted reviewer for > x86, if available) should carefully review these patches. I agree with this point. Considering that this part is being moved to common code, it would be helpful to get some input from the x86 maintainers. Also, since the entire patch series is not yet ready, I think it makes sense at this stage of development to either have the whole series reviewed or postpone it to 4.22. (The last one is preferred at the current stage of development) ~ Oleksii >> >> On Fri, 5 Sep 2025,dmukhin@xen.org wrote: >>> x86 port of Xen lacks vUART facility similar to Arm's vpl011 to support x86 >>> guest OS bring up in the embedded setups. >>> >>> This patch series introduces initial in-hypervisor emulator for >>> NS8250/NS16x50-compatible UARTs under CONFIG_VUART_NS16X50. >>> >>> In parallel domain creation scenario (hyperlaunch), NS16550 emulator helps >>> early guest firmware and OS bringup debugging, because it eliminates >>> dependency on the external emulator (qemu) being operational by the time >>> domains are created. >>> >>> The emulator also allows to forward the physical console input to the x86 >>> domain which is useful when a system has only one physical UART for early >>> debugging and this UART is owned by Xen. >>> >>> By default, CONFIG_VUART_NS16X50 enables emulation of NS16550 at I/O port >>> 0x2f8, IRQ#3 in guest OS (legacy COM2). Legacy COM resources cannot be >>> selected at built-time or via per-domain xl configuration in this initial >>> submission. >>> >>> CONFIG_VUART_NS16X50_DEBUG enables some extra debugging facilities useful >>> for NS16550 emulator development/debugging (disabled by default). >>> >>> The NS16550 emulator is disabled in default x86 configuration and goes under >>> CONFIG_EXPERT in Kconfig. >>> >>> Limitations >>> =========== >>> - Only x86; >>> - Only legacy COM2 resources, custom I/O ports/IRQs are not supported; >>> - Only Xen console as a backend, no inter-domain communication (similar to >>> vpl011 on Arm); >>> - Only 8n1 emulation (8-bit data, no parity, 1 stop bit); >>> - No toolstack integration; >>> - No baud rate emulation (reports 115200 baud to the guest OS); >>> - No FIFO-less mode emulation; >>> - No RX FIFO interrupt moderation (FCR) emulation; >>> - No integration w/ VM snapshotting (HVM_REGISTER_SAVE_RESTORE() and >>> friends); >>> - No MMIO-based UART emulation. >>> >>> Series >>> ====== >>> >>> Patch 1 introduces the new vUART framework, that is the code originally >>> posted here: >>> https://lore.kernel.org/xen-devel/20250624035443.344099-16-dmukhin@ford.com/ >>> Required for emulator. >>> >>> Patch 2 adds missing NS16550 definitions, required for emulator. >>> >>> Patch 3 introduces the basic emulator skeleton - state machine >>> initialization stubs, I/O port handler stub, logging, etc. >>> >>> Patches 4-11 incrementally populate the minimal NS16550 register emulation. >>> >>> Patch 12 hooks vUART state debugging (disabled by default). >>> >>> Pathes 13-15 introduce necessary changes to enable NS16550 on dom0 (and PVH). >>> >>> Link to CI:https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2024756493 >>> Link to branch:https://gitlab.com/xen-project/people/dmukhin/xen/-/tree/vuart-ns8250-v6?ref_type=heads >>> >>> Testing >>> ======= >>> >>> ```shell >>> echo CONFIG_EXPERT=y >> .config >>> echo CONFIG_VUART_NS16X50=y >> .config >>> make olddefconfig >>> ``` >>> COM2 (0x2f8) resources are used by default. >>> >>> To test w/ virtual COM2, the guest kernel parameters should contain >>> something like the following: >>> earlycon=uart,io,0x2f8,115200n8 console=uart,io,0x2f8,115200n8 >>> >>> HVM >>> --- >>> Tested only boot of HVM linux guest with OVMF as the virtual firmware. >>> SeaBIOS as a virtual firmware is not tested. >>> >>> PVH (dom0) >>> ---------- >>> Xen is able to forward physical console input to the domain with virtual >>> NS16550. To switch the console focus press Ctrl+aaa. >>> Console switch is limited on x86 to dom0 and Xen (fixes pending). >>> >>> Changes since v5: >>> - Split THR/RBR into two separate patches. >>> - Addressed feedback from v5. >>> - Link to v5:https://lore.kernel.org/xen-devel/20250828235409.2835815-1-dmukhin@ford.com/ >>> >>> Changes since v4: >>> - Split the series to make it simpler to review. >>> - Addressed feedback from v4. >>> - Dropped xl changes, which I will submit separately. >>> - Link to v4:https://lore.kernel.org/xen-devel/20250731192130.3948419-1-dmukhin@ford.com/ >>> >>> Changes since v3: >>> - Reduced the blast radius of the series, thanks to reviews, individual >>> aspects (like console focus) touched in v3 moved to separate threads. >>> - Kept the UART emulator framework since I need to redo some of emulator code >>> and there's more-or-less agreement on it (where to place, naming, scope). >>> - Applied the feedback from >>> https://lore.kernel.org/xen-devel/20250624035443.344099-1-dmukhin@ford.com/ >>> - Link to v3:https://lore.kernel.org/xen-devel/20250103-vuart-ns8250-v3-v1-0-c5d36b31d66c@ford.com/ >>> >>> Changes since v2: >>> - renamed emulator s/NS8250/NS16550/g >>> - reduced the patch series after addressing v2 feedback >>> - introduced driver framework for UART emulators >>> - unified guest OS printouts across all available UART emulators >>> - Link to v2:https://lore.kernel.org/xen-devel/20241205-vuart-ns8250-v1-0-e9aa923127eb@ford.com/ >>> >>> Changes since v1: >>> - dropped kmalloc/kfree aliases >>> - fixed ECLAIR jobs (thanks Andrew Cooper) >>> - addressed console forwarding on arm32 and arm64 (thanks to Luca Fancellu) >>> - moved NS8250 debugging stubs into its own patch >>> - added fix forhttps://gitlab.com/xen-project/xen/-/issues/184 >>> - Link to v1:https://lore.kernel.org/r/20241126-vuart-ns8250-v1-v1-0-87b9a8375b7a@ford.com >>> >>> Denis Mukhin (15): >>> emul/vuart: introduce framework for UART emulators >>> xen/8250-uart: update definitions >>> emul/ns16x50: implement emulator stub >>> emul/ns16x50: implement DLL/DLM registers >>> emul/ns16x50: implement SCR register >>> emul/ns16x50: implement IER/IIR registers >>> emul/ns16x50: implement LCR/LSR registers >>> emul/ns16x50: implement MCR/MSR registers >>> emul/ns16x50: implement RBR register >>> emul/ns16x50: implement THR register >>> emul/ns16x50: implement FCR register (write-only) >>> emul/ns16550: implement dump_state() hook >>> x86/domain: enable per-domain I/O port bitmaps >>> xen/domain: allocate d->irq_caps before arch-specific initialization >>> emul/ns16x50: implement IRQ emulation via vIOAPIC >>> >>> xen/arch/arm/xen.lds.S | 1 + >>> xen/arch/ppc/xen.lds.S | 1 + >>> xen/arch/riscv/xen.lds.S | 1 + >>> xen/arch/x86/Makefile | 1 + >>> xen/arch/x86/dom0_build.c | 112 +-- >>> xen/arch/x86/hvm/dom0_build.c | 7 + >>> xen/arch/x86/hvm/hvm.c | 56 +- >>> xen/arch/x86/hvm/nestedhvm.c | 8 +- >>> xen/arch/x86/hvm/quirks.c | 3 - >>> xen/arch/x86/hvm/svm/nestedsvm.c | 2 +- >>> xen/arch/x86/hvm/vioapic.c | 10 + >>> xen/arch/x86/hvm/vmx/vvmx.c | 4 +- >>> xen/arch/x86/include/asm/hvm/nestedhvm.h | 3 +- >>> xen/arch/x86/include/asm/hvm/support.h | 2 - >>> xen/arch/x86/include/asm/iocap.h | 2 + >>> xen/arch/x86/include/asm/irq.h | 8 + >>> xen/arch/x86/ioport.c | 163 ++++ >>> xen/arch/x86/irq.c | 8 + >>> xen/arch/x86/pv/dom0_build.c | 7 + >>> xen/arch/x86/xen.lds.S | 1 + >>> xen/common/Kconfig | 2 + >>> xen/common/Makefile | 1 + >>> xen/common/domain.c | 8 +- >>> xen/common/emul/Kconfig | 6 + >>> xen/common/emul/Makefile | 1 + >>> xen/common/emul/vuart/Kconfig | 25 + >>> xen/common/emul/vuart/Makefile | 2 + >>> xen/common/emul/vuart/ns16x50.c | 984 +++++++++++++++++++++++ >>> xen/common/emul/vuart/vuart.c | 157 ++++ >>> xen/common/keyhandler.c | 3 + >>> xen/drivers/char/console.c | 6 +- >>> xen/drivers/char/ns16550.c | 16 +- >>> xen/drivers/passthrough/x86/hvm.c | 11 +- >>> xen/include/xen/8250-uart.h | 50 +- >>> xen/include/xen/sched.h | 4 + >>> xen/include/xen/serial.h | 3 + >>> xen/include/xen/vuart.h | 116 +++ >>> xen/include/xen/xen.lds.h | 10 + >>> 38 files changed, 1634 insertions(+), 171 deletions(-) >>> create mode 100644 xen/arch/x86/ioport.c >>> create mode 100644 xen/common/emul/Kconfig >>> create mode 100644 xen/common/emul/Makefile >>> create mode 100644 xen/common/emul/vuart/Kconfig >>> create mode 100644 xen/common/emul/vuart/Makefile >>> create mode 100644 xen/common/emul/vuart/ns16x50.c >>> create mode 100644 xen/common/emul/vuart/vuart.c >>> create mode 100644 xen/include/xen/vuart.h >>> >>> -- >>> 2.51.0 >>> > Best regards, > Mykola
On Mon, 8 Sep 2025, Oleksii Kurochko wrote: > Hello Everyone, > > On 9/8/25 11:04 AM, Mykola Kvach wrote: > > Hi Denis and Stefano > > I’d like to acknowledge the significant effort that went into this patch > series -- it’s clear that a lot of work has been invested. > > On Sat, Sep 6, 2025 at 5:02 AM Stefano Stabellini > <sstabellini@kernel.org> wrote: > > Oleksii and all, > > I would like to consider patches 1-12 of this patch series for 4.21, > pending the few minor comments I made addressed. > > Although I am neither a maintainer nor an official reviewer for this > project, I have looked over some of the first patches in the series. In my > opinion, the series is not yet ready for merging. > > Even if my review is set aside, the changes are largely x86-specific and > produce the most impact on this architecture. I believe that before > merging, one of the x86 maintainers (or at least a trusted reviewer for > x86, if available) should carefully review these patches. > > I agree with this point. Considering that this part is being moved to > common code, it would be helpful to get some input from the x86 maintainers. > > Also, since the entire patch series is not yet ready, I think it makes > sense at this stage of development to either have the whole series reviewed > or postpone it to 4.22. (The last one is preferred at the current stage of > development) Even with x86 review, it would be difficult to get the whole series merged now. If it is all or nothing, then I suggest we wait for 4.22.
On 9/8/25 11:04 AM, Mykola Kvach wrote: > Hi Denis and Stefano > > I’d like to acknowledge the significant effort that went into this patch > series -- it’s clear that a lot of work has been invested. > > On Sat, Sep 6, 2025 at 5:02 AM Stefano Stabellini > <sstabellini@kernel.org> wrote: >> Oleksii and all, >> >> I would like to consider patches 1-12 of this patch series for 4.21, >> pending the few minor comments I made addressed. > Although I am neither a maintainer nor an official reviewer for this > project, I have looked over some of the first patches in the series. In my > opinion, the series is not yet ready for merging. > > Even if my review is set aside, the changes are largely x86-specific and > produce the most impact on this architecture. I believe that before > merging, one of the x86 maintainers (or at least a trusted reviewer for > x86, if available) should carefully review these patches. > >> >> On Fri, 5 Sep 2025, dmukhin@xen.org wrote: >>> x86 port of Xen lacks vUART facility similar to Arm's vpl011 to support x86 >>> guest OS bring up in the embedded setups. >>> >>> This patch series introduces initial in-hypervisor emulator for >>> NS8250/NS16x50-compatible UARTs under CONFIG_VUART_NS16X50. >>> >>> In parallel domain creation scenario (hyperlaunch), NS16550 emulator helps >>> early guest firmware and OS bringup debugging, because it eliminates >>> dependency on the external emulator (qemu) being operational by the time >>> domains are created. >>> >>> The emulator also allows to forward the physical console input to the x86 >>> domain which is useful when a system has only one physical UART for early >>> debugging and this UART is owned by Xen. >>> >>> By default, CONFIG_VUART_NS16X50 enables emulation of NS16550 at I/O port >>> 0x2f8, IRQ#3 in guest OS (legacy COM2). Legacy COM resources cannot be >>> selected at built-time or via per-domain xl configuration in this initial >>> submission. >>> >>> CONFIG_VUART_NS16X50_DEBUG enables some extra debugging facilities useful >>> for NS16550 emulator development/debugging (disabled by default). >>> >>> The NS16550 emulator is disabled in default x86 configuration and goes under >>> CONFIG_EXPERT in Kconfig. >>> >>> Limitations >>> =========== >>> - Only x86; >>> - Only legacy COM2 resources, custom I/O ports/IRQs are not supported; >>> - Only Xen console as a backend, no inter-domain communication (similar to >>> vpl011 on Arm); >>> - Only 8n1 emulation (8-bit data, no parity, 1 stop bit); >>> - No toolstack integration; >>> - No baud rate emulation (reports 115200 baud to the guest OS); >>> - No FIFO-less mode emulation; >>> - No RX FIFO interrupt moderation (FCR) emulation; >>> - No integration w/ VM snapshotting (HVM_REGISTER_SAVE_RESTORE() and >>> friends); >>> - No MMIO-based UART emulation. >>> >>> Series >>> ====== >>> >>> Patch 1 introduces the new vUART framework, that is the code originally >>> posted here: >>> https://lore.kernel.org/xen-devel/20250624035443.344099-16-dmukhin@ford.com/ >>> Required for emulator. >>> >>> Patch 2 adds missing NS16550 definitions, required for emulator. >>> >>> Patch 3 introduces the basic emulator skeleton - state machine >>> initialization stubs, I/O port handler stub, logging, etc. >>> >>> Patches 4-11 incrementally populate the minimal NS16550 register emulation. >>> >>> Patch 12 hooks vUART state debugging (disabled by default). >>> >>> Pathes 13-15 introduce necessary changes to enable NS16550 on dom0 (and PVH). >>> >>> Link to CI: https://gitlab.com/xen-project/people/dmukhin/xen/-/pipelines/2024756493 >>> Link to branch: https://gitlab.com/xen-project/people/dmukhin/xen/-/tree/vuart-ns8250-v6?ref_type=heads >>> >>> Testing >>> ======= >>> >>> ```shell >>> echo CONFIG_EXPERT=y >> .config >>> echo CONFIG_VUART_NS16X50=y >> .config >>> make olddefconfig >>> ``` >>> COM2 (0x2f8) resources are used by default. >>> >>> To test w/ virtual COM2, the guest kernel parameters should contain >>> something like the following: >>> earlycon=uart,io,0x2f8,115200n8 console=uart,io,0x2f8,115200n8 >>> >>> HVM >>> --- >>> Tested only boot of HVM linux guest with OVMF as the virtual firmware. >>> SeaBIOS as a virtual firmware is not tested. >>> >>> PVH (dom0) >>> ---------- >>> Xen is able to forward physical console input to the domain with virtual >>> NS16550. To switch the console focus press Ctrl+aaa. >>> Console switch is limited on x86 to dom0 and Xen (fixes pending). >>> >>> Changes since v5: >>> - Split THR/RBR into two separate patches. >>> - Addressed feedback from v5. >>> - Link to v5: https://lore.kernel.org/xen-devel/20250828235409.2835815-1-dmukhin@ford.com/ >>> >>> Changes since v4: >>> - Split the series to make it simpler to review. >>> - Addressed feedback from v4. >>> - Dropped xl changes, which I will submit separately. >>> - Link to v4: https://lore.kernel.org/xen-devel/20250731192130.3948419-1-dmukhin@ford.com/ >>> >>> Changes since v3: >>> - Reduced the blast radius of the series, thanks to reviews, individual >>> aspects (like console focus) touched in v3 moved to separate threads. >>> - Kept the UART emulator framework since I need to redo some of emulator code >>> and there's more-or-less agreement on it (where to place, naming, scope). >>> - Applied the feedback from >>> https://lore.kernel.org/xen-devel/20250624035443.344099-1-dmukhin@ford.com/ >>> - Link to v3: https://lore.kernel.org/xen-devel/20250103-vuart-ns8250-v3-v1-0-c5d36b31d66c@ford.com/ >>> >>> Changes since v2: >>> - renamed emulator s/NS8250/NS16550/g >>> - reduced the patch series after addressing v2 feedback >>> - introduced driver framework for UART emulators >>> - unified guest OS printouts across all available UART emulators >>> - Link to v2: https://lore.kernel.org/xen-devel/20241205-vuart-ns8250-v1-0-e9aa923127eb@ford.com/ >>> >>> Changes since v1: >>> - dropped kmalloc/kfree aliases >>> - fixed ECLAIR jobs (thanks Andrew Cooper) >>> - addressed console forwarding on arm32 and arm64 (thanks to Luca Fancellu) >>> - moved NS8250 debugging stubs into its own patch >>> - added fix for https://gitlab.com/xen-project/xen/-/issues/184 >>> - Link to v1: https://lore.kernel.org/r/20241126-vuart-ns8250-v1-v1-0-87b9a8375b7a@ford.com >>> >>> Denis Mukhin (15): >>> emul/vuart: introduce framework for UART emulators >>> xen/8250-uart: update definitions >>> emul/ns16x50: implement emulator stub >>> emul/ns16x50: implement DLL/DLM registers >>> emul/ns16x50: implement SCR register >>> emul/ns16x50: implement IER/IIR registers >>> emul/ns16x50: implement LCR/LSR registers >>> emul/ns16x50: implement MCR/MSR registers >>> emul/ns16x50: implement RBR register >>> emul/ns16x50: implement THR register >>> emul/ns16x50: implement FCR register (write-only) >>> emul/ns16550: implement dump_state() hook >>> x86/domain: enable per-domain I/O port bitmaps >>> xen/domain: allocate d->irq_caps before arch-specific initialization >>> emul/ns16x50: implement IRQ emulation via vIOAPIC >>> >>> xen/arch/arm/xen.lds.S | 1 + >>> xen/arch/ppc/xen.lds.S | 1 + >>> xen/arch/riscv/xen.lds.S | 1 + >>> xen/arch/x86/Makefile | 1 + >>> xen/arch/x86/dom0_build.c | 112 +-- >>> xen/arch/x86/hvm/dom0_build.c | 7 + >>> xen/arch/x86/hvm/hvm.c | 56 +- >>> xen/arch/x86/hvm/nestedhvm.c | 8 +- >>> xen/arch/x86/hvm/quirks.c | 3 - >>> xen/arch/x86/hvm/svm/nestedsvm.c | 2 +- >>> xen/arch/x86/hvm/vioapic.c | 10 + >>> xen/arch/x86/hvm/vmx/vvmx.c | 4 +- >>> xen/arch/x86/include/asm/hvm/nestedhvm.h | 3 +- >>> xen/arch/x86/include/asm/hvm/support.h | 2 - >>> xen/arch/x86/include/asm/iocap.h | 2 + >>> xen/arch/x86/include/asm/irq.h | 8 + >>> xen/arch/x86/ioport.c | 163 ++++ >>> xen/arch/x86/irq.c | 8 + >>> xen/arch/x86/pv/dom0_build.c | 7 + >>> xen/arch/x86/xen.lds.S | 1 + >>> xen/common/Kconfig | 2 + >>> xen/common/Makefile | 1 + >>> xen/common/domain.c | 8 +- >>> xen/common/emul/Kconfig | 6 + >>> xen/common/emul/Makefile | 1 + >>> xen/common/emul/vuart/Kconfig | 25 + >>> xen/common/emul/vuart/Makefile | 2 + >>> xen/common/emul/vuart/ns16x50.c | 984 +++++++++++++++++++++++ >>> xen/common/emul/vuart/vuart.c | 157 ++++ >>> xen/common/keyhandler.c | 3 + >>> xen/drivers/char/console.c | 6 +- >>> xen/drivers/char/ns16550.c | 16 +- >>> xen/drivers/passthrough/x86/hvm.c | 11 +- >>> xen/include/xen/8250-uart.h | 50 +- >>> xen/include/xen/sched.h | 4 + >>> xen/include/xen/serial.h | 3 + >>> xen/include/xen/vuart.h | 116 +++ >>> xen/include/xen/xen.lds.h | 10 + >>> 38 files changed, 1634 insertions(+), 171 deletions(-) >>> create mode 100644 xen/arch/x86/ioport.c >>> create mode 100644 xen/common/emul/Kconfig >>> create mode 100644 xen/common/emul/Makefile >>> create mode 100644 xen/common/emul/vuart/Kconfig >>> create mode 100644 xen/common/emul/vuart/Makefile >>> create mode 100644 xen/common/emul/vuart/ns16x50.c >>> create mode 100644 xen/common/emul/vuart/vuart.c >>> create mode 100644 xen/include/xen/vuart.h >>> >>> -- >>> 2.51.0 >>> > Best regards, > Mykola
On Fri, Sep 05, 2025 at 04:26:59PM -0700, dmukhin@xen.org wrote: > > HVM > --- > Tested only boot of HVM linux guest with OVMF as the virtual firmware. > SeaBIOS as a virtual firmware is not tested. Sorry, current series will enable the emulator for hwdom PVH only. To enable the emulator for HVM, an extra change is neeed.
© 2016 - 2026 Red Hat, Inc.