forked from luck/tmp_suning_uos_patched
KVM: s390: clear local interrupts at cpu initial reset
Empty list of local interrupts when vcpu goes through initial reset to provide a clean state Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
91880d07fc
commit
2ed10cc15e
arch/s390/kvm
@ -509,6 +509,20 @@ enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer)
|
|||||||
return HRTIMER_NORESTART;
|
return HRTIMER_NORESTART;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kvm_s390_clear_local_irqs(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
|
||||||
|
struct kvm_s390_interrupt_info *n, *inti = NULL;
|
||||||
|
|
||||||
|
spin_lock_bh(&li->lock);
|
||||||
|
list_for_each_entry_safe(inti, n, &li->list, list) {
|
||||||
|
list_del(&inti->list);
|
||||||
|
kfree(inti);
|
||||||
|
}
|
||||||
|
atomic_set(&li->active, 0);
|
||||||
|
spin_unlock_bh(&li->lock);
|
||||||
|
}
|
||||||
|
|
||||||
void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
|
void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
|
struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
|
||||||
|
@ -395,6 +395,7 @@ static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
|
|||||||
vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
|
vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
|
||||||
kvm_clear_async_pf_completion_queue(vcpu);
|
kvm_clear_async_pf_completion_queue(vcpu);
|
||||||
atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
|
atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
|
||||||
|
kvm_s390_clear_local_irqs(vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu)
|
||||||
|
@ -129,6 +129,7 @@ enum hrtimer_restart kvm_s390_idle_wakeup(struct hrtimer *timer);
|
|||||||
void kvm_s390_tasklet(unsigned long parm);
|
void kvm_s390_tasklet(unsigned long parm);
|
||||||
void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu);
|
void kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu);
|
||||||
void kvm_s390_deliver_pending_machine_checks(struct kvm_vcpu *vcpu);
|
void kvm_s390_deliver_pending_machine_checks(struct kvm_vcpu *vcpu);
|
||||||
|
void kvm_s390_clear_local_irqs(struct kvm_vcpu *vcpu);
|
||||||
int __must_check kvm_s390_inject_vm(struct kvm *kvm,
|
int __must_check kvm_s390_inject_vm(struct kvm *kvm,
|
||||||
struct kvm_s390_interrupt *s390int);
|
struct kvm_s390_interrupt *s390int);
|
||||||
int __must_check kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
|
int __must_check kvm_s390_inject_vcpu(struct kvm_vcpu *vcpu,
|
||||||
|
Loading…
Reference in New Issue
Block a user