RISC-V: KVM: move preempt_disable() call in kvm_arch_vcpu_ioctl_run
local_irq_disable provides stronger guarantees than preempt_disable so calling the latter is redundant when interrupts are disabled. Instead, explicitly disable preemption right before interrupts are enabled/disabled to ensure that the time accounted in guest_timing_exit_irqoff includes time taken by the guest or interrupts. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
parent
cca986fab9
commit
fe283e5fa1
@ -936,8 +936,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
kvm_riscv_check_vcpu_requests(vcpu);
|
kvm_riscv_check_vcpu_requests(vcpu);
|
||||||
|
|
||||||
preempt_disable();
|
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -974,7 +972,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
kvm_request_pending(vcpu)) {
|
kvm_request_pending(vcpu)) {
|
||||||
vcpu->mode = OUTSIDE_GUEST_MODE;
|
vcpu->mode = OUTSIDE_GUEST_MODE;
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
preempt_enable();
|
|
||||||
kvm_vcpu_srcu_read_lock(vcpu);
|
kvm_vcpu_srcu_read_lock(vcpu);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1008,6 +1005,8 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
/* Syncup interrupts state with HW */
|
/* Syncup interrupts state with HW */
|
||||||
kvm_riscv_vcpu_sync_interrupts(vcpu);
|
kvm_riscv_vcpu_sync_interrupts(vcpu);
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We must ensure that any pending interrupts are taken before
|
* We must ensure that any pending interrupts are taken before
|
||||||
* we exit guest timing so that timer ticks are accounted as
|
* we exit guest timing so that timer ticks are accounted as
|
||||||
|
Loading…
x
Reference in New Issue
Block a user