base-hw: rename Vm_state to Vcpu_state

Make naming across architectures coherent by renaming Vm_state to
Vcpu_state, to reflect that it contains the state of a Vcpu and not that
of an entire VM.

Ref #4968
This commit is contained in:
Benjamin Lamowski 2023-09-28 14:03:20 +02:00 committed by Christian Helmuth
parent 149a0183ec
commit 0e49149a46
28 changed files with 73 additions and 85 deletions

View File

@ -26,13 +26,13 @@ namespace Genode {
/**
* CPU context of a virtual machine
*/
struct Vm_state;
using Vm_data = Vm_state;
struct Vcpu_state;
using Vm_data = Vcpu_state;
struct Vcpu_state;
}
struct Genode::Vm_state : Genode::Cpu_state_modes
struct Genode::Vcpu_state : Genode::Cpu_state_modes
{
Genode::addr_t dfar;
Genode::addr_t ttbr[2];
@ -47,6 +47,4 @@ struct Genode::Vm_state : Genode::Cpu_state_modes
Genode::addr_t irq_injection;
};
struct Genode::Vcpu_state : Genode::Vm_state { };
#endif /* _INCLUDE__SPEC__IMX53__VM_STATE_H_ */

View File

@ -25,12 +25,12 @@ namespace Genode {
/**
* CPU context of a virtual machine
*/
struct Vm_state;
using Vm_data = Vm_state;
struct Vcpu_state;
using Vm_data = Vcpu_state;
}
struct Genode::Vm_state : Genode::Cpu_state_modes
struct Genode::Vcpu_state : Genode::Cpu_state_modes
{
Genode::uint64_t vttbr { 0 };
Genode::uint32_t sctrl { 0 };

View File

@ -25,14 +25,14 @@ namespace Genode {
/**
* CPU context of a virtual machine
*/
struct Vm_state;
using Vm_data = Vm_state;
struct Vcpu_state;
using Vm_data = Vcpu_state;
using uint128_t = __uint128_t;
}
struct Genode::Vm_state : Genode::Cpu_state
struct Genode::Vcpu_state : Genode::Cpu_state
{
Genode::uint64_t pstate { 0 };
Genode::uint64_t exception_type { 0 };

View File

@ -24,19 +24,13 @@ namespace Genode {
* CPU context of a virtual machine
*/
struct Vm_data;
struct Vm_state;
}
struct Genode::Vm_state : Genode::Vcpu_state
{
};
struct Genode::Vm_data
{
Board::Vmcb vmcb;
Genode::addr_t vmcb_phys_addr;
Genode::Vm_state * vm_state;
Genode::Vcpu_state * vcpu_state;
};
#endif /* _INCLUDE__SPEC__PC__VM_STATE_H_ */

View File

@ -20,7 +20,7 @@
/* base-hw core includes */
#include <spec/arm/virtualization/gicv2.h>
#include <spec/arm/generic_timer.h>
#include <spec/arm/cpu/vm_state_virtualization.h>
#include <spec/arm/cpu/vcpu_state_virtualization.h>
#include <spec/arm/virtualization/board.h>
#include <spec/cortex_a15/cpu.h>

View File

@ -20,7 +20,7 @@
#include <spec/arm/generic_timer.h>
#include <spec/arm/virtualization/board.h>
#include <spec/cortex_a15/cpu.h>
#include <spec/arm/cpu/vm_state_virtualization.h>
#include <spec/arm/cpu/vcpu_state_virtualization.h>
namespace Kernel { class Cpu; }

View File

@ -18,7 +18,7 @@
#include <hw/spec/arm/virt_qemu_board.h>
#include <spec/arm/generic_timer.h>
#include <spec/arm/virtualization/gicv3.h>
#include <spec/arm_64/cpu/vm_state_virtualization.h>
#include <spec/arm_64/cpu/vcpu_state_virtualization.h>
#include <kernel/configuration.h>
#include <kernel/irq.h>
#include <spec/arm_v8/cpu.h>
@ -42,8 +42,8 @@ namespace Board {
struct Vcpu_context;
using Vm_state = Genode::Vm_state;
using Vm_data = Vm_state;
using Vcpu_state = Genode::Vcpu_state;
using Vm_data = Vcpu_state;
};

View File

@ -15,8 +15,6 @@
#ifndef _CORE__KERNEL__VM_H_
#define _CORE__KERNEL__VM_H_
namespace Genode { class Vm_state; }
/* core includes */
#include <kernel/cpu_context.h>
#include <kernel/pd.h>
@ -45,7 +43,7 @@ class Kernel::Vm : private Kernel::Object, public Cpu_job
private:
using State = Board::Vm_state;
using Vcpu_state = Genode::Vcpu_state;
/*
* Noncopyable
@ -57,7 +55,7 @@ class Kernel::Vm : private Kernel::Object, public Cpu_job
Irq::Pool & _user_irq_pool;
Object _kernel_object { *this };
State & _state;
Vcpu_state & _state;
Signal_context & _context;
Identity const _id;
Scheduler_state _scheduled = INACTIVE;

View File

@ -15,7 +15,7 @@
#define _CORE__SPEC__ARM_TRUSTZONE_BOARD_H_
/* Genode includes */
#include <spec/arm/cpu/vm_state_trustzone.h>
#include <spec/arm/cpu/vcpu_state_trustzone.h>
/* core includes */
#include <types.h>
@ -24,8 +24,8 @@ namespace Kernel { class Cpu; }
namespace Board {
using Core::Vm_state;
using Vm_data = Core::Vm_state;
using Core::Vcpu_state;
using Vm_data = Core::Vcpu_state;
enum { VCPU_MAX = 1 };

View File

@ -21,7 +21,7 @@
/* base-hw internal includes */
#include <hw/spec/arm/lpae.h>
namespace Genode { struct Vm_state; }
namespace Genode { struct Vcpu_state; }
namespace Board {
@ -31,8 +31,8 @@ namespace Board {
struct Vcpu_context;
using Vm_state = Genode::Vm_state;
using Vm_data = Genode::Vm_state;
using Vcpu_state = Genode::Vcpu_state;
using Vm_data = Genode::Vcpu_state;
};

View File

@ -16,7 +16,7 @@
/* core includes */
#include <kernel/cpu.h>
#include <kernel/vm.h>
#include <cpu/vm_state_trustzone.h>
#include <cpu/vcpu_state_trustzone.h>
using namespace Kernel;
@ -66,7 +66,7 @@ void Vm::exception(Cpu & cpu)
bool secure_irq(unsigned const i);
extern "C" void monitor_mode_enter_normal_world(Genode::Vm_state&, void*);
extern "C" void monitor_mode_enter_normal_world(Genode::Vcpu_state&, void*);
extern void * kernel_stack;

View File

@ -16,7 +16,7 @@
/* core includes */
#include <types.h>
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
namespace Hypervisor {
@ -44,11 +44,11 @@ namespace Hypervisor {
}
inline void switch_world(Core::Vm_state & vm_state,
inline void switch_world(Core::Vcpu_state & vcpu_state,
Host_context & host_state)
{
hypervisor_call(WORLD_SWITCH,
(Call_arg)&vm_state,
(Call_arg)&vcpu_state,
(Call_arg)&host_state);
}
}

View File

@ -13,7 +13,7 @@
*/
#include <hw/assert.h>
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
#include <platform_pd.h>
#include <kernel/cpu.h>

View File

@ -27,7 +27,7 @@ hypervisor_exception_vector:
mrs x30, hcr_el2 /* read HCR register */
tst x30, #1 /* check VM bit */
beq _from_host /* if VM bit is not set, its a host call */
ldr x29, [sp, #32] /* otherwise, load vm_state pointer */
ldr x29, [sp, #32] /* otherwise, load vcpu_state pointer */
adr x30, . /* hold exception vector offset in x30 */
and x30, x30, #0xf80
b _from_vm
@ -167,7 +167,7 @@ _to_vm:
orr x0, x0, x1
msr hcr_el2, x0
ldr x30, [sp, #16] /* load head of Vm_state again */
ldr x30, [sp, #16] /* load head of Vcpu_state again */
/** general-purpose registers **/
ldp x0, x1, [x30], #2*8

View File

@ -12,7 +12,7 @@
* under the terms of the GNU Affero General Public License version 3.
*/
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
#include <util/mmio.h>
#include <hw/assert.h>
@ -30,14 +30,14 @@ using Kernel::Cpu;
using Kernel::Vm;
static Genode::Vm_state & host_context(Cpu & cpu)
static Genode::Vcpu_state & host_context(Cpu & cpu)
{
static Genode::Constructible<Genode::Vm_state>
static Genode::Constructible<Genode::Vcpu_state>
host_context[Board::NR_OF_CPUS];
if (!host_context[cpu.id()].constructed()) {
host_context[cpu.id()].construct();
Genode::Vm_state & c = *host_context[cpu.id()];
Genode::Vcpu_state & c = *host_context[cpu.id()];
c.sp_el1 = cpu.stack_start();
c.ip = (addr_t)&Kernel::main_handle_kernel_entry;
c.pstate = 0;

View File

@ -18,7 +18,7 @@
#include <kernel/configuration.h>
#include <kernel/irq.h>
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
#include <hw/spec/x86_64/page_table.h>
#include <spec/x86_64/virtualization/svm.h>
#include <cpu.h>
@ -32,7 +32,7 @@ namespace Board {
struct Vcpu_context;
using Vm_data = Genode::Vm_data;
using Vm_state = Genode::Vm_state;
using Vcpu_state = Genode::Vcpu_state;
enum {
VCPU_MAX = 16

View File

@ -12,7 +12,7 @@
*/
#include <base/log.h>
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
#include <util/construct_at.h>
#include <util/mmio.h>
#include <cpu/string.h>
@ -44,7 +44,7 @@ Vm::Vm(Irq::Pool & user_irq_pool,
Kernel::Object { *this },
Cpu_job(Cpu_priority::min(), 0),
_user_irq_pool(user_irq_pool),
_state(*data.vm_state),
_state(*data.vcpu_state),
_context(context),
_id(id),
_vcpu_context(id.id, &data.vmcb, data.vmcb_phys_addr)

View File

@ -115,7 +115,7 @@ Genode::addr_t Vm_session_component::_alloc_vm_data(Genode::addr_t ds_addr)
);
Genode::Vm_data* vm_data = (Genode::Vm_data *) vm_data_ptr;
vm_data->vm_state = (Genode::Vm_state *) ds_addr;
vm_data->vcpu_state = (Genode::Vcpu_state *) ds_addr;
vm_data->vmcb_phys_addr = (addr_t)cma().phys_addr(&vm_data->vmcb);
return (Genode::addr_t) vm_data_ptr;
}

View File

@ -25,7 +25,7 @@ using namespace Core;
size_t Vm_session_component::_ds_size() {
return align_addr(sizeof(Board::Vm_state), get_page_size_log2()); }
return align_addr(sizeof(Board::Vcpu_state), get_page_size_log2()); }
void Vm_session_component::Vcpu::exception_handler(Signal_context_capability handler)

View File

@ -15,7 +15,7 @@
#define _SRC__SERVER__VMM__INCLUDE__MMU_H_
/* base includes */
#include <cpu/vm_state_trustzone.h>
#include <cpu/vcpu_state_trustzone.h>
/* local includes */
#include <ram.h>
@ -24,7 +24,7 @@ class Mmu
{
private:
Genode::Vm_state &_state;
Genode::Vcpu_state &_state;
Ram const &_ram;
unsigned _n_bits() { return _state.ttbrc & 0x7; }
@ -70,7 +70,7 @@ class Mmu
public:
Mmu(Genode::Vm_state &state, Ram const &ram)
Mmu(Genode::Vcpu_state &state, Ram const &ram)
: _state(state), _ram(ram) {}

View File

@ -22,7 +22,7 @@
#include <vm_session/connection.h>
#include <vm_session/handler.h>
#include <util/noncopyable.h>
#include <cpu/vm_state_trustzone.h>
#include <cpu/vcpu_state_trustzone.h>
/* local includes */
#include <ram.h>

View File

@ -50,7 +50,7 @@ Vm_base::Vm_base(Env &env,
void Vm_base::start(Vcpu_state &state)
{
memset((void*)&state, 0, sizeof(Vm_state));
memset((void*)&state, 0, sizeof(Vcpu_state));
_load_kernel(state);
_load_kernel_surroundings();
state.cpsr = 0x93; /* SVC mode and IRQs disabled */
@ -106,7 +106,7 @@ void Vm_base::dump(Vcpu_state &state)
log_adr_reg("lr ", state.lr);
log_adr_reg("ip ", state.ip);
log_adr_reg("cpsr ", state.cpsr);
for (unsigned i = 0; i < Vm_state::Mode_state::MAX; i++) {
for (unsigned i = 0; i < Vcpu_state::Mode_state::MAX; i++) {
log_mod_reg("sp ", state.mode[i].sp, mod[i]);
log_mod_reg("lr ", state.mode[i].lr, mod[i]);
log_mod_reg("spsr ", state.mode[i].spsr, mod[i]);

View File

@ -21,7 +21,7 @@
#include <base/env.h>
#include <base/heap.h>
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
#include <util/mmio.h>
#include <vm_session/connection.h>
#include <vm_session/handler.h>
@ -90,7 +90,7 @@ class Vmm::Cpu_base
template <typename FUNC>
void handle_signal(FUNC handler)
{
_vm_vcpu.with_state([this, handler](Vm_state &vmstate) {
_vm_vcpu.with_state([this, handler](Vcpu_state &vmstate) {
State & state = static_cast<State &>(vmstate);
_state.construct(state);
@ -123,7 +123,7 @@ class Vmm::Cpu_base
void handle()
{
cpu.handle_signal([this] (Vm_state &) { (obj.*member)(); });
cpu.handle_signal([this] (Vcpu_state &) { (obj.*member)(); });
}
Signal_handler(Cpu_base & cpu,

View File

@ -17,18 +17,18 @@
using Vmm::Generic_timer;
bool Generic_timer::_enabled(Vm_state &state)
bool Generic_timer::_enabled(Vcpu_state &state)
{
return Ctrl::Enabled::get(state.timer.control);
}
bool Generic_timer::_masked(Vm_state &state)
bool Generic_timer::_masked(Vcpu_state &state)
{
return Ctrl::Imask::get(state.timer.control);
}
bool Generic_timer::_pending(Vm_state &state)
bool Generic_timer::_pending(Vcpu_state &state)
{
return Ctrl::Istatus::get(state.timer.control);
}
@ -36,7 +36,7 @@ bool Generic_timer::_pending(Vm_state &state)
void Generic_timer::_handle_timeout(Genode::Duration)
{
_cpu.handle_signal([this](Vm_state &state) {
_cpu.handle_signal([this](Vcpu_state &state) {
if (_enabled(state) && !_masked(state))
handle_irq(state);
});
@ -56,7 +56,7 @@ Generic_timer::Generic_timer(Genode::Env & env,
}
void Generic_timer::schedule_timeout(Vm_state &state)
void Generic_timer::schedule_timeout(Vcpu_state &state)
{
if (_pending(state)) {
handle_irq(state);
@ -78,7 +78,7 @@ void Generic_timer::cancel_timeout()
}
void Generic_timer::handle_irq(Vm_state &state)
void Generic_timer::handle_irq(Vcpu_state &state)
{
_irq.assert();
state.timer.irq = false;
@ -87,12 +87,12 @@ void Generic_timer::handle_irq(Vm_state &state)
void Generic_timer::eoi()
{
Genode::Vm_state &state = _cpu.state();
Genode::Vcpu_state &state = _cpu.state();
state.timer.irq = false;
};
void Generic_timer::dump(Vm_state &state)
void Generic_timer::dump(Vcpu_state &state)
{
using namespace Genode;
@ -100,7 +100,7 @@ void Generic_timer::dump(Vm_state &state)
log(" timer.cmp = ", Hex(state.timer.compare, Hex::PREFIX, Hex::PAD));
}
void Generic_timer::setup_state(Vm_state &state)
void Generic_timer::setup_state(Vcpu_state &state)
{
state.timer.irq = true;
}

View File

@ -17,7 +17,7 @@
#include <gic.h>
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
#include <drivers/timer/util.h>
#include <timer_session/connection.h>
#include <util/register.h>
@ -27,7 +27,7 @@ namespace Vmm {
class Generic_timer;
}
using Genode::Vm_state;
using Genode::Vcpu_state;
class Vmm::Generic_timer : Gic::Irq::Irq_handler
{
@ -47,12 +47,12 @@ class Vmm::Generic_timer : Gic::Irq::Irq_handler
Genode::uint64_t _ticks_per_ms();
bool _enabled(Vm_state &state);
bool _masked(Vm_state &state);
bool _pending(Vm_state &state);
bool _enabled(Vcpu_state &state);
bool _masked(Vcpu_state &state);
bool _pending(Vcpu_state &state);
void _handle_timeout(Genode::Duration);
Genode::uint64_t _usecs_left(Vm_state &state);
Genode::uint64_t _usecs_left(Vcpu_state &state);
public:
@ -61,11 +61,11 @@ class Vmm::Generic_timer : Gic::Irq::Irq_handler
Gic::Irq & irq,
Cpu_base & cpu);
void schedule_timeout(Vm_state &state);
void schedule_timeout(Vcpu_state &state);
void cancel_timeout();
void handle_irq(Vm_state &state);
void dump(Vm_state &state);
static void setup_state(Vm_state &state);
void handle_irq(Vcpu_state &state);
void dump(Vcpu_state &state);
static void setup_state(Vcpu_state &state);
/*****************

View File

@ -29,7 +29,7 @@ Genode::uint64_t Generic_timer::_ticks_per_ms()
}
Genode::uint64_t Generic_timer::_usecs_left(Vm_state &state)
Genode::uint64_t Generic_timer::_usecs_left(Vcpu_state &state)
{
Genode::uint64_t count;
Genode::uint32_t low, high;

View File

@ -29,7 +29,7 @@ Genode::uint64_t Generic_timer::_ticks_per_ms()
}
Genode::uint64_t Generic_timer::_usecs_left(Vm_state &state)
Genode::uint64_t Generic_timer::_usecs_left(Vcpu_state &state)
{
Genode::uint64_t count;
asm volatile("mrs %0, cntpct_el0" : "=r" (count));

View File

@ -14,12 +14,10 @@
#ifndef _SRC__SERVER__VMM__STATE_H_
#define _SRC__SERVER__VMM__STATE_H_
#include <cpu/vm_state_virtualization.h>
#include <cpu/vcpu_state_virtualization.h>
using Genode::addr_t;
using Genode::Vm_state;
namespace Genode { struct Vcpu_state : Vm_state { }; };
using Genode::Vcpu_state;
namespace Vmm {
struct State : Genode::Vcpu_state