mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/sched: we never get into context_switch() with prev==next
In schedule(), if we pick, as the next vcpu to run (next) the same one that is running already (prev), we never get to call context_switch(). We can, therefore, get rid of all the `if`-s testing prev and next being different, trading them with an ASSERT() (on ARM, the ASSERT() was even already there!) Suggested-by: Juergen Gross <jgross@suse.com> Signed-off-by: Dario Faggioli <dfaggioli@suse.com> Acked-by: Julien Grall <julien.grall@arm.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Andrii Anisov <andrii_anisov@epam.com>
This commit is contained in:
1 parent
b12fec4a12
commit
508bc75d95
2 files changed
+9
-16
No files matched your search
@@ -343,8 +343,7 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
|
||||
ASSERT(prev != next);
|
||||
ASSERT(!vcpu_cpu_dirty(next));
|
||||
|
||||
if ( prev != next )
|
||||
update_runstate_area(prev);
|
||||
update_runstate_area(prev);
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
|
||||
+8
-14
@@ -1721,6 +1721,7 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
|
||||
const struct domain *prevd = prev->domain, *nextd = next->domain;
|
||||
unsigned int dirty_cpu = next->dirty_cpu;
|
||||
|
||||
ASSERT(prev != next);
|
||||
ASSERT(local_irq_is_enabled());
|
||||
|
||||
get_cpu_info()->use_pv_cr3 = false;
|
||||
@@ -1732,12 +1733,9 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
|
||||
flush_mask(cpumask_of(dirty_cpu), FLUSH_VCPU_STATE);
|
||||
}
|
||||
|
||||
if ( prev != next )
|
||||
{
|
||||
_update_runstate_area(prev);
|
||||
vpmu_switch_from(prev);
|
||||
np2m_schedule(NP2M_SCHEDLE_OUT);
|
||||
}
|
||||
_update_runstate_area(prev);
|
||||
vpmu_switch_from(prev);
|
||||
np2m_schedule(NP2M_SCHEDLE_OUT);
|
||||
|
||||
if ( is_hvm_domain(prevd) && !list_empty(&prev->arch.hvm.tm_list) )
|
||||
pt_save_timer(prev);
|
||||
@@ -1794,14 +1792,10 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
|
||||
|
||||
context_saved(prev);
|
||||
|
||||
if ( prev != next )
|
||||
{
|
||||
_update_runstate_area(next);
|
||||
|
||||
/* Must be done with interrupts enabled */
|
||||
vpmu_switch_to(next);
|
||||
np2m_schedule(NP2M_SCHEDLE_IN);
|
||||
}
|
||||
_update_runstate_area(next);
|
||||
/* Must be done with interrupts enabled */
|
||||
vpmu_switch_to(next);
|
||||
np2m_schedule(NP2M_SCHEDLE_IN);
|
||||
|
||||
/* Ensure that the vcpu has an up-to-date time base. */
|
||||
update_vcpu_system_time(next);
|
||||
|
||||