mirror of https://github.com/xemu-project/xemu.git
accel/nvmm: Use accel-specific per-vcpu @dirty field
NVMM has a specific use of the CPUState::vcpu_dirty field (CPUState::vcpu_dirty is not used by common code). To make this field accel-specific, add and use a new @dirty variable in the AccelCPUState structure. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20240424174506.326-3-philmd@linaro.org>
This commit is contained in:
parent
9ad49538c7
commit
79f1926b2d
|
@ -30,6 +30,7 @@ struct AccelCPUState {
|
||||||
struct nvmm_vcpu vcpu;
|
struct nvmm_vcpu vcpu;
|
||||||
uint8_t tpr;
|
uint8_t tpr;
|
||||||
bool stop;
|
bool stop;
|
||||||
|
bool dirty;
|
||||||
|
|
||||||
/* Window-exiting for INTs/NMIs. */
|
/* Window-exiting for INTs/NMIs. */
|
||||||
bool int_window_exit;
|
bool int_window_exit;
|
||||||
|
@ -507,7 +508,7 @@ nvmm_io_callback(struct nvmm_io *io)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Needed, otherwise infinite loop. */
|
/* Needed, otherwise infinite loop. */
|
||||||
current_cpu->vcpu_dirty = false;
|
current_cpu->accel->dirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -516,7 +517,7 @@ nvmm_mem_callback(struct nvmm_mem *mem)
|
||||||
cpu_physical_memory_rw(mem->gpa, mem->data, mem->size, mem->write);
|
cpu_physical_memory_rw(mem->gpa, mem->data, mem->size, mem->write);
|
||||||
|
|
||||||
/* Needed, otherwise infinite loop. */
|
/* Needed, otherwise infinite loop. */
|
||||||
current_cpu->vcpu_dirty = false;
|
current_cpu->accel->dirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nvmm_assist_callbacks nvmm_callbacks = {
|
static struct nvmm_assist_callbacks nvmm_callbacks = {
|
||||||
|
@ -726,9 +727,9 @@ nvmm_vcpu_loop(CPUState *cpu)
|
||||||
* Inner VCPU loop.
|
* Inner VCPU loop.
|
||||||
*/
|
*/
|
||||||
do {
|
do {
|
||||||
if (cpu->vcpu_dirty) {
|
if (cpu->accel->dirty) {
|
||||||
nvmm_set_registers(cpu);
|
nvmm_set_registers(cpu);
|
||||||
cpu->vcpu_dirty = false;
|
cpu->accel->dirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qcpu->stop) {
|
if (qcpu->stop) {
|
||||||
|
@ -826,32 +827,32 @@ static void
|
||||||
do_nvmm_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
|
do_nvmm_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
|
||||||
{
|
{
|
||||||
nvmm_get_registers(cpu);
|
nvmm_get_registers(cpu);
|
||||||
cpu->vcpu_dirty = true;
|
cpu->accel->dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_nvmm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg)
|
do_nvmm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg)
|
||||||
{
|
{
|
||||||
nvmm_set_registers(cpu);
|
nvmm_set_registers(cpu);
|
||||||
cpu->vcpu_dirty = false;
|
cpu->accel->dirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_nvmm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg)
|
do_nvmm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg)
|
||||||
{
|
{
|
||||||
nvmm_set_registers(cpu);
|
nvmm_set_registers(cpu);
|
||||||
cpu->vcpu_dirty = false;
|
cpu->accel->dirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_nvmm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg)
|
do_nvmm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg)
|
||||||
{
|
{
|
||||||
cpu->vcpu_dirty = true;
|
cpu->accel->dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nvmm_cpu_synchronize_state(CPUState *cpu)
|
void nvmm_cpu_synchronize_state(CPUState *cpu)
|
||||||
{
|
{
|
||||||
if (!cpu->vcpu_dirty) {
|
if (!cpu->accel->dirty) {
|
||||||
run_on_cpu(cpu, do_nvmm_cpu_synchronize_state, RUN_ON_CPU_NULL);
|
run_on_cpu(cpu, do_nvmm_cpu_synchronize_state, RUN_ON_CPU_NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -981,7 +982,7 @@ nvmm_init_vcpu(CPUState *cpu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cpu->vcpu_dirty = true;
|
cpu->accel->dirty = true;
|
||||||
cpu->accel = qcpu;
|
cpu->accel = qcpu;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue