浏览代码

KVM: add kvm_arch_sched_in

Introduce preempt notifiers for architecture specific code.
Advantage over creating a new notifier in every arch is slightly simpler
code and guaranteed call order with respect to kvm_sched_in.

Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Radim Krčmář 11 年之前
父节点
当前提交
e790d9ef64
共有 7 个文件被更改,包括 24 次插入0 次删除
  1. 4 0
      arch/arm/kvm/arm.c
  2. 4 0
      arch/mips/kvm/mips.c
  3. 4 0
      arch/powerpc/kvm/powerpc.c
  4. 4 0
      arch/s390/kvm/kvm-s390.c
  5. 4 0
      arch/x86/kvm/x86.c
  6. 2 0
      include/linux/kvm_host.h
  7. 2 0
      virt/kvm/kvm_main.c

+ 4 - 0
arch/arm/kvm/arm.c

@@ -288,6 +288,10 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 {
 {
 }
 }
 
 
+void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu)
+{
+}
+
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 {
 	vcpu->cpu = cpu;
 	vcpu->cpu = cpu;

+ 4 - 0
arch/mips/kvm/mips.c

@@ -1002,6 +1002,10 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 {
 {
 }
 }
 
 
+void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu)
+{
+}
+
 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
 int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
 				  struct kvm_translation *tr)
 				  struct kvm_translation *tr)
 {
 {

+ 4 - 0
arch/powerpc/kvm/powerpc.c

@@ -720,6 +720,10 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 	kvmppc_subarch_vcpu_uninit(vcpu);
 	kvmppc_subarch_vcpu_uninit(vcpu);
 }
 }
 
 
+void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu)
+{
+}
+
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 {
 #ifdef CONFIG_BOOKE
 #ifdef CONFIG_BOOKE

+ 4 - 0
arch/s390/kvm/kvm-s390.c

@@ -555,6 +555,10 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 	/* Nothing todo */
 	/* Nothing todo */
 }
 }
 
 
+void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu)
+{
+}
+
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 {
 	save_fp_ctl(&vcpu->arch.host_fpregs.fpc);
 	save_fp_ctl(&vcpu->arch.host_fpregs.fpc);

+ 4 - 0
arch/x86/kvm/x86.c

@@ -7171,6 +7171,10 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 		static_key_slow_dec(&kvm_no_apic_vcpu);
 		static_key_slow_dec(&kvm_no_apic_vcpu);
 }
 }
 
 
+void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu)
+{
+}
+
 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 {
 {
 	if (type)
 	if (type)

+ 2 - 0
include/linux/kvm_host.h

@@ -624,6 +624,8 @@ void kvm_arch_exit(void);
 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu);
 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu);
 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu);
 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu);
 
 
+void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu);
+
 void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu);
 void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu);
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu);
 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu);

+ 2 - 0
virt/kvm/kvm_main.c

@@ -3124,6 +3124,8 @@ static void kvm_sched_in(struct preempt_notifier *pn, int cpu)
 	if (vcpu->preempted)
 	if (vcpu->preempted)
 		vcpu->preempted = false;
 		vcpu->preempted = false;
 
 
+	kvm_arch_sched_in(vcpu, cpu);
+
 	kvm_arch_vcpu_load(vcpu, cpu);
 	kvm_arch_vcpu_load(vcpu, cpu);
 }
 }