On 27.09.2013, at 12:03, Aneesh Kumar K.V wrote: > From: "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Missing patch description. > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> I fail to see how this really simplifies things, but at the end of the day it's Gleb's and Paolo's call. Which brings me to the next issue: You forgot to CC kvm@vger on your patch set. Gleb and Paolo don't read kvm-ppc@vger. And they shouldn't have to. Every kvm patch that you want review on or that should get applied needs to be sent to kvm@vger. If you want to tag it as PPC specific patch, do so by CC'ing kvm-ppc@vger. Alex > --- > arch/arm/kvm/arm.c | 4 ++-- > arch/ia64/kvm/kvm-ia64.c | 4 ++-- > arch/mips/kvm/kvm_mips.c | 6 ++---- > arch/powerpc/include/asm/kvm_ppc.h | 2 +- > arch/powerpc/kvm/44x.c | 2 +- > arch/powerpc/kvm/book3s.c | 15 ++++++++++++--- > arch/powerpc/kvm/book3s_hv.c | 9 ++++++--- > arch/powerpc/kvm/book3s_pr.c | 5 +++-- > arch/powerpc/kvm/e500.c | 2 +- > arch/powerpc/kvm/e500mc.c | 2 +- > arch/powerpc/kvm/powerpc.c | 5 ----- > arch/s390/kvm/kvm-s390.c | 3 ++- > arch/x86/kvm/x86.c | 13 +++++++++++-- > include/linux/kvm_host.h | 2 +- > virt/kvm/kvm_main.c | 14 +++++--------- > 15 files changed, 50 insertions(+), 38 deletions(-) > > diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c > index 9c697db..cccb121 100644 > --- a/arch/arm/kvm/arm.c > +++ b/arch/arm/kvm/arm.c > @@ -109,9 +109,9 @@ void kvm_arch_hardware_unsetup(void) > { > } > > -void kvm_arch_check_processor_compat(void *rtn) > +int kvm_arch_check_processor_compat(void *opaque) > { > - *(int *)rtn = 0; > + return 0; > } > > void kvm_arch_sync_events(struct kvm *kvm) > diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c > index bdfd878..065942c 100644 > --- a/arch/ia64/kvm/kvm-ia64.c > +++ b/arch/ia64/kvm/kvm-ia64.c > @@ -185,9 +185,9 @@ void kvm_arch_hardware_disable(void *garbage) > ia64_ptr_entry(0x3, slot); > } > > -void kvm_arch_check_processor_compat(void *rtn) > +int kvm_arch_check_processor_compat(void *opaque) > { > - *(int *)rtn = 0; > + return 0; > } > > int kvm_dev_ioctl_check_extension(long ext) > diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c > index a7b0445..4512739 100644 > --- a/arch/mips/kvm/kvm_mips.c > +++ b/arch/mips/kvm/kvm_mips.c > @@ -97,11 +97,9 @@ void kvm_arch_hardware_unsetup(void) > { > } > > -void kvm_arch_check_processor_compat(void *rtn) > +int kvm_arch_check_processor_compat(void *opaque) > { > - int *r = (int *)rtn; > - *r = 0; > - return; > + return 0; > } > > static void kvm_mips_init_tlbs(struct kvm *kvm) > diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h > index 58e732f..592501b 100644 > --- a/arch/powerpc/include/asm/kvm_ppc.h > +++ b/arch/powerpc/include/asm/kvm_ppc.h > @@ -204,7 +204,7 @@ struct kvmppc_ops { > unsigned long npages); > int (*init_vm)(struct kvm *kvm); > void (*destroy_vm)(struct kvm *kvm); > - int (*check_processor_compat)(void); > + void (*check_processor_compat)(void *r); > int (*get_smmu_info)(struct kvm *kvm, struct kvm_ppc_smmu_info *info); > int (*emulate_op)(struct kvm_run *run, struct kvm_vcpu *vcpu, > unsigned int inst, int *advance); > diff --git a/arch/powerpc/kvm/44x.c b/arch/powerpc/kvm/44x.c > index 2f5c6b6..a1f4e60 100644 > --- a/arch/powerpc/kvm/44x.c > +++ b/arch/powerpc/kvm/44x.c > @@ -43,7 +43,7 @@ void kvmppc_core_vcpu_put(struct kvm_vcpu *vcpu) > kvmppc_booke_vcpu_put(vcpu); > } > > -int kvmppc_core_check_processor_compat(void) > +int kvm_arch_check_processor_compat(void *opaque) > { > int r; > > diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c > index ca617e1..485a6ff 100644 > --- a/arch/powerpc/kvm/book3s.c > +++ b/arch/powerpc/kvm/book3s.c > @@ -827,9 +827,18 @@ void kvmppc_core_destroy_vm(struct kvm *kvm) > #endif > } > > -int kvmppc_core_check_processor_compat(void) > -{ > - return kvmppc_ops->check_processor_compat(); > +int kvm_arch_check_processor_compat(void *opaque) > +{ > + int r,cpu; > + struct kvmppc_ops *kvm_ops = (struct kvmppc_ops *)opaque; > + for_each_online_cpu(cpu) { > + smp_call_function_single(cpu, > + kvm_ops->check_processor_compat, > + &r, 1); > + if (r < 0) > + break; > + } > + return r; > } > > EXPORT_SYMBOL_GPL(kvm_get_dirty_log); > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index ff57be8..4322db4 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -1980,11 +1980,14 @@ static int kvmppc_core_emulate_mfspr_hv(struct kvm_vcpu *vcpu, int sprn, > return EMULATE_FAIL; > } > > -static int kvmppc_core_check_processor_compat_hv(void) > + > +static void kvmppc_core_check_processor_compat_hv(void *r) > { > if (!cpu_has_feature(CPU_FTR_HVMODE)) > - return -EIO; > - return 0; > + *(int *)r = -EIO; > + else > + *(int *)r = 0; > + return; > } > > static long kvm_arch_vm_ioctl_hv(struct file *filp, > diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c > index df48d89..127b961 100644 > --- a/arch/powerpc/kvm/book3s_pr.c > +++ b/arch/powerpc/kvm/book3s_pr.c > @@ -1490,10 +1490,11 @@ static void kvmppc_core_destroy_vm_pr(struct kvm *kvm) > enable_relon_interrupts(kvm); > } > > -static int kvmppc_core_check_processor_compat_pr(void) > +static void kvmppc_core_check_processor_compat_pr(void *r) > { > /* we are always compatible */ > - return 0; > + *(int *)r = 0; > + return; > } > > static long kvm_arch_vm_ioctl_pr(struct file *filp, > diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c > index ce6b73c..0681cb1 100644 > --- a/arch/powerpc/kvm/e500.c > +++ b/arch/powerpc/kvm/e500.c > @@ -323,7 +323,7 @@ void kvmppc_core_vcpu_put(struct kvm_vcpu *vcpu) > kvmppc_booke_vcpu_put(vcpu); > } > > -int kvmppc_core_check_processor_compat(void) > +int kvm_arch_check_processor_compat(void *opaque) > { > int r; > > diff --git a/arch/powerpc/kvm/e500mc.c b/arch/powerpc/kvm/e500mc.c > index 19c8379..48b3ba5 100644 > --- a/arch/powerpc/kvm/e500mc.c > +++ b/arch/powerpc/kvm/e500mc.c > @@ -169,7 +169,7 @@ void kvmppc_core_vcpu_put(struct kvm_vcpu *vcpu) > kvmppc_booke_vcpu_put(vcpu); > } > > -int kvmppc_core_check_processor_compat(void) > +int kvm_arch_check_processor_compat(void *opaque) > { > int r; > > diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c > index 3019edc..1404f4d 100644 > --- a/arch/powerpc/kvm/powerpc.c > +++ b/arch/powerpc/kvm/powerpc.c > @@ -264,11 +264,6 @@ void kvm_arch_hardware_unsetup(void) > { > } > > -void kvm_arch_check_processor_compat(void *rtn) > -{ > - *(int *)rtn = kvmppc_core_check_processor_compat(); > -} > - > int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) > { > if (type) > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index 776dafe..01d4000 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -119,8 +119,9 @@ void kvm_arch_hardware_unsetup(void) > gmap_unregister_ipte_notifier(&gmap_notifier); > } > > -void kvm_arch_check_processor_compat(void *rtn) > +int kvm_arch_check_processor_compat(void *opaque) > { > + return 0; > } > > int kvm_arch_init(void *opaque) > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index e5ca72a..53c8308 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -6873,9 +6873,18 @@ void kvm_arch_hardware_unsetup(void) > kvm_x86_ops->hardware_unsetup(); > } > > -void kvm_arch_check_processor_compat(void *rtn) > +int kvm_arch_check_processor_compat(void *opaque) > { > - kvm_x86_ops->check_processor_compatibility(rtn); > + int r,cpu; > + > + for_each_online_cpu(cpu) { > + smp_call_function_single(cpu, > + kvm_x86_ops->check_processor_compatibility, > + &r, 1); > + if (r < 0) > + break; > + } > + return r; > } > > bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu) > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index ca645a0..459b359 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -649,7 +649,7 @@ int kvm_arch_hardware_enable(void *garbage); > void kvm_arch_hardware_disable(void *garbage); > int kvm_arch_hardware_setup(void); > void kvm_arch_hardware_unsetup(void); > -void kvm_arch_check_processor_compat(void *rtn); > +int kvm_arch_check_processor_compat(void *opaque); > int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); > int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 66df1d2..0594b22 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -3166,10 +3166,9 @@ static void kvm_sched_out(struct preempt_notifier *pn, > } > > int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, > - struct module *module) > + struct module *module) > { > int r; > - int cpu; > > r = kvm_arch_init(opaque); > if (r) > @@ -3195,13 +3194,10 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, > if (r < 0) > goto out_free_0a; > > - for_each_online_cpu(cpu) { > - smp_call_function_single(cpu, > - kvm_arch_check_processor_compat, > - &r, 1); > - if (r < 0) > - goto out_free_1; > - } > + > + r = kvm_arch_check_processor_compat(opaque); > + if (r < 0) > + goto out_free_1; > > r = register_cpu_notifier(&kvm_cpu_notifier); > if (r) > -- > 1.8.1.2 > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html