diff options
| -rw-r--r-- | arch/s390/kvm/kvm-s390.c | 4 | ||||
| -rw-r--r-- | include/linux/kvm_host.h | 12 | 
2 files changed, 10 insertions, 6 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index ecced9d1898..d91a9556800 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -608,9 +608,7 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)  		kvm_s390_deliver_pending_interrupts(vcpu);  	vcpu->arch.sie_block->icptcode = 0; -	local_irq_disable();  	kvm_guest_enter(); -	local_irq_enable();  	VCPU_EVENT(vcpu, 6, "entering sie flags %x",  		   atomic_read(&vcpu->arch.sie_block->cpuflags));  	trace_kvm_s390_sie_enter(vcpu, @@ -629,9 +627,7 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)  	VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",  		   vcpu->arch.sie_block->icptcode);  	trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode); -	local_irq_disable();  	kvm_guest_exit(); -	local_irq_enable();  	memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);  	return rc; diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 93bfc9f9815..0e2212fe478 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -737,7 +737,11 @@ static inline int kvm_deassign_device(struct kvm *kvm,  static inline void kvm_guest_enter(void)  {  	BUG_ON(preemptible()); -	vtime_account(current); +	/* +	 * This is running in ioctl context so we can avoid +	 * the call to vtime_account() with its unnecessary idle check. +	 */ +	vtime_account_system(current);  	current->flags |= PF_VCPU;  	/* KVM does not hold any references to rcu protected data when it  	 * switches CPU into a guest mode. In fact switching to a guest mode @@ -751,7 +755,11 @@ static inline void kvm_guest_enter(void)  static inline void kvm_guest_exit(void)  { -	vtime_account(current); +	/* +	 * This is running in ioctl context so we can avoid +	 * the call to vtime_account() with its unnecessary idle check. +	 */ +	vtime_account_system(current);  	current->flags &= ~PF_VCPU;  }  |