This patch series introduces the components necessary to implement a virtual
timer (vtimer).
Since the SSTC extension is not supported by Xen, an emulated (SBI-based)
timer is required. To address this, a virtual timer built on Xen’s timer
infrastructure is introduced, with save/restore support and SBI-based
programming.
To provide full guest software–based timer support, the following components
are also introduced:
- arch_vcpu_{create,destroy}() to initialize the virtual timer and other
vCPU-related state not directly tied to timer functionality. As part of this
work, struct arch_vcpu is introduced to describe the internal state of a
virtual CPU, along with vcpu_csr_init() to initialize the relevant CSR state.
- Support functions required by the virtual timer, including:
- vcpu_kick(), and a stub implementation of smp_send_event_check_mask()
(since SMP is not yet supported in Xen), which is used by vcpu_kick().
- Support for guest timer programming via interception of the SBI legacy
SET_TIMER call from guest.
- Implement reprogram_timer() using introduced sbi_set_timer().
- Initial lockless tracking of pending vCPU interrupts using atomic bitmaps.
- Handling of hypervisor timer interrupts and dispatch into Xen’s generic timer
softirq.
---
Changes in v2:
- Add consumer part of tracking of pending vCPU interrupts.
- Split patch "xen/riscv: init tasklet subsystem" to two.
- Patches were acked:
- xen/riscv: introduce vcpu_kick() implementation
- xen/riscv: implement SBI legacy SET_TIMER support for guests
- All other changes are patch-specific. Please check them.
---
Oleksii Kurochko (16):
xen/riscv: introduce struct arch_vcpu
xen/riscv: implement arch_vcpu_{create,destroy}()
xen/riscv: implement vcpu_csr_init()
xen/riscv: introduce tracking of pending vCPU interrupts, part 1
xen/riscv: introduce tracking of pending vCPU interrupts, part 2
xen/time: move ticks<->ns helpers to common code
xen/riscv: introduce basic vtimer infrastructure for guests
xen/riscv: add temporary stub for smp_send_event_check_mask()
xen/riscv: introduce vcpu_kick() implementation
xen/riscv: add vtimer context switch helpers
xen/riscv: implement SBI legacy SET_TIMER support for guests
xen/riscv: introduce sbi_set_timer()
xen/riscv: implement reprogram_timer() via SBI
xen/riscv: handle hypervisor timer interrupts
xen/riscv: init tasklet subsystem
xen/riscv: implement sync_vcpu_execstate()
xen/arch/arm/include/asm/time.h | 3 -
xen/arch/arm/time.c | 11 -
xen/arch/arm/vtimer.c | 2 +-
xen/arch/riscv/Makefile | 2 +
xen/arch/riscv/cpufeature.c | 1 +
xen/arch/riscv/domain.c | 279 ++++++++++++++++++++
xen/arch/riscv/include/asm/config.h | 3 +-
xen/arch/riscv/include/asm/cpufeature.h | 1 +
xen/arch/riscv/include/asm/current.h | 8 +
xen/arch/riscv/include/asm/domain.h | 84 +++++-
xen/arch/riscv/include/asm/riscv_encoding.h | 2 +
xen/arch/riscv/include/asm/sbi.h | 18 ++
xen/arch/riscv/include/asm/time.h | 5 -
xen/arch/riscv/include/asm/vtimer.h | 23 ++
xen/arch/riscv/sbi.c | 40 +++
xen/arch/riscv/setup.c | 3 +
xen/arch/riscv/smp.c | 7 +
xen/arch/riscv/stubs.c | 35 ---
xen/arch/riscv/time.c | 44 +++
xen/arch/riscv/traps.c | 14 +
xen/arch/riscv/vsbi/legacy-extension.c | 6 +
xen/arch/riscv/vtimer.c | 88 ++++++
xen/include/xen/time.h | 11 +
23 files changed, 632 insertions(+), 58 deletions(-)
create mode 100644 xen/arch/riscv/domain.c
create mode 100644 xen/arch/riscv/include/asm/vtimer.h
create mode 100644 xen/arch/riscv/vtimer.c
--
2.52.0