icount: fix shift=auto for record/replay
This patch fixes shift=auto when record/replay is enabled. Now user does not need to guess the best shift value. Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru> -- v2: moved icount_time_shift to vmstate subsection Message-Id: <158988500050.15192.692077802469400393.stgit@pasha-ThinkPad-X280> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
ea81f98bce
commit
b8164e68e5
20
cpus.c
20
cpus.c
@ -379,7 +379,8 @@ static void icount_adjust(void)
|
|||||||
|
|
||||||
seqlock_write_lock(&timers_state.vm_clock_seqlock,
|
seqlock_write_lock(&timers_state.vm_clock_seqlock,
|
||||||
&timers_state.vm_clock_lock);
|
&timers_state.vm_clock_lock);
|
||||||
cur_time = cpu_get_clock_locked();
|
cur_time = REPLAY_CLOCK_LOCKED(REPLAY_CLOCK_VIRTUAL_RT,
|
||||||
|
cpu_get_clock_locked());
|
||||||
cur_icount = cpu_get_icount_locked();
|
cur_icount = cpu_get_icount_locked();
|
||||||
|
|
||||||
delta = cur_icount - cur_time;
|
delta = cur_icount - cur_time;
|
||||||
@ -647,6 +648,11 @@ static bool adjust_timers_state_needed(void *opaque)
|
|||||||
return s->icount_rt_timer != NULL;
|
return s->icount_rt_timer != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool shift_state_needed(void *opaque)
|
||||||
|
{
|
||||||
|
return use_icount == 2;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Subsection for warp timer migration is optional, because may not be created
|
* Subsection for warp timer migration is optional, because may not be created
|
||||||
*/
|
*/
|
||||||
@ -674,6 +680,17 @@ static const VMStateDescription icount_vmstate_adjust_timers = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const VMStateDescription icount_vmstate_shift = {
|
||||||
|
.name = "timer/icount/shift",
|
||||||
|
.version_id = 1,
|
||||||
|
.minimum_version_id = 1,
|
||||||
|
.needed = shift_state_needed,
|
||||||
|
.fields = (VMStateField[]) {
|
||||||
|
VMSTATE_INT16(icount_time_shift, TimersState),
|
||||||
|
VMSTATE_END_OF_LIST()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a subsection for icount migration.
|
* This is a subsection for icount migration.
|
||||||
*/
|
*/
|
||||||
@ -690,6 +707,7 @@ static const VMStateDescription icount_vmstate_timers = {
|
|||||||
.subsections = (const VMStateDescription*[]) {
|
.subsections = (const VMStateDescription*[]) {
|
||||||
&icount_vmstate_warp_timer,
|
&icount_vmstate_warp_timer,
|
||||||
&icount_vmstate_adjust_timers,
|
&icount_vmstate_adjust_timers,
|
||||||
|
&icount_vmstate_shift,
|
||||||
NULL
|
NULL
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user