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.
    Not full support, only vcpu_set_interrupt() and vcpu_unset_interrupt() are
    introduced. All others functions will be introduced separately. [1]
- Handling of hypervisor timer interrupts and dispatch into Xen’s generic timer
  softirq.

Oleksii Kurochko (15):
  xen/riscv: introduce struct arch_vcpu
  xen/riscv: implement arch_vcpu_{create,destroy}()
  xen/riscv: implement vcpu_csr_init()
  xen/riscv: introduce vtimer
  xen/riscv: implement stub for smp_send_event_check_mask()
  xen/riscv: introduce vcpu_kick() implementation
  xen/riscv: introduce tracking of pending vCPU interrupts, part 1
  xen/riscv: introduce vtimer_set_timer() and vtimer_expired()
  xen/riscv: add vtimer_{save,restore}()
  xen/riscv: implement SBI legacy SET_TIMER support for guests
  xen/riscv: introduce ns_to_ticks()
  xen/riscv: introduce sbi_set_timer()
  xen/riscv: implement reprogram_timer() using SBI
  xen/riscv: handle hypervisor timer interrupts
  xen/riscv: init tasklet subsystem

 xen/arch/riscv/Makefile                     |   2 +
 xen/arch/riscv/cpufeature.c                 |   1 +
 xen/arch/riscv/domain.c                     | 207 ++++++++++++++++++++
 xen/arch/riscv/include/asm/config.h         |   3 +-
 xen/arch/riscv/include/asm/cpufeature.h     |   1 +
 xen/arch/riscv/include/asm/current.h        |   6 +
 xen/arch/riscv/include/asm/domain.h         |  84 +++++++-
 xen/arch/riscv/include/asm/riscv_encoding.h |   3 +
 xen/arch/riscv/include/asm/sbi.h            |  17 ++
 xen/arch/riscv/include/asm/time.h           |   5 +
 xen/arch/riscv/include/asm/vtimer.h         |  30 +++
 xen/arch/riscv/sbi.c                        |  26 +++
 xen/arch/riscv/setup.c                      |   3 +
 xen/arch/riscv/smp.c                        |   8 +
 xen/arch/riscv/stubs.c                      |  35 ----
 xen/arch/riscv/time.c                       |  31 +++
 xen/arch/riscv/traps.c                      |  14 ++
 xen/arch/riscv/vsbi/legacy-extension.c      |   6 +
 xen/arch/riscv/vtimer.c                     |  82 ++++++++
 19 files changed, 526 insertions(+), 38 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


Reply via email to