Re: [PATCH 25/44] KVM: s390: Do s390 specific init without bouncing through kvm_init()
On Wed, 2022-11-02 at 23:18 +, Sean Christopherson wrote: > Move the guts of kvm_arch_init() into a new helper, > __kvm_s390_init(), > and invoke the new helper directly from kvm_s390_init() instead of > bouncing through kvm_init(). Invoking kvm_arch_init() is the very > first action performed by kvm_init(), i.e. this is a glorified nop. > > Moving setup to __kvm_s390_init() will allow tagging more functions > as > __init, and emptying kvm_arch_init() will allow dropping the hook > entirely once all architecture implementations are nops. > > No functional change intended. > > Signed-off-by: Sean Christopherson > --- > arch/s390/kvm/kvm-s390.c | 29 + > 1 file changed, 25 insertions(+), 4 deletions(-) Reviewed-by: Eric Farman ___ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Re: [PATCH 25/44] KVM: s390: Do s390 specific init without bouncing through kvm_init()
On 3/11/22 00:18, Sean Christopherson wrote: Move the guts of kvm_arch_init() into a new helper, __kvm_s390_init(), and invoke the new helper directly from kvm_s390_init() instead of bouncing through kvm_init(). Invoking kvm_arch_init() is the very first action performed by kvm_init(), i.e. this is a glorified nop. Moving setup to __kvm_s390_init() will allow tagging more functions as __init, and emptying kvm_arch_init() will allow dropping the hook entirely once all architecture implementations are nops. No functional change intended. Signed-off-by: Sean Christopherson --- arch/s390/kvm/kvm-s390.c | 29 + 1 file changed, 25 insertions(+), 4 deletions(-) Reviewed-by: Philippe Mathieu-Daudé ___ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Re: [PATCH 25/44] KVM: s390: Do s390 specific init without bouncing through kvm_init()
On Thu, 3 Nov 2022 13:44:15 +0100 Claudio Imbrenda wrote: > On Wed, 2 Nov 2022 23:18:52 + > Sean Christopherson wrote: > > > Move the guts of kvm_arch_init() into a new helper, __kvm_s390_init(), > > and invoke the new helper directly from kvm_s390_init() instead of > > bouncing through kvm_init(). Invoking kvm_arch_init() is the very > > first action performed by kvm_init(), i.e. this is a glorified nop. > > > > Moving setup to __kvm_s390_init() will allow tagging more functions as > > __init, and emptying kvm_arch_init() will allow dropping the hook > > entirely once all architecture implementations are nops. > > > > No functional change intended. > > > > Signed-off-by: Sean Christopherson > > --- > > arch/s390/kvm/kvm-s390.c | 29 + > > 1 file changed, 25 insertions(+), 4 deletions(-) > > > > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > > index 7fcd2d3b3558..e1c9980aae78 100644 > > --- a/arch/s390/kvm/kvm-s390.c > > +++ b/arch/s390/kvm/kvm-s390.c > > @@ -461,7 +461,7 @@ static void kvm_s390_cpu_feat_init(void) > > */ > > } > > > > -int kvm_arch_init(void *opaque) > > +static int __kvm_s390_init(void) > > { > > int rc = -ENOMEM; > > > > @@ -519,7 +519,7 @@ int kvm_arch_init(void *opaque) > > return rc; > > } > > > > -void kvm_arch_exit(void) > > +static void __kvm_s390_exit(void) > > { > > gmap_unregister_pte_notifier(_notifier); > > gmap_unregister_pte_notifier(_gmap_notifier); > > @@ -533,6 +533,16 @@ void kvm_arch_exit(void) > > debug_unregister(kvm_s390_dbf_uv); > > } > > > > +int kvm_arch_init(void *opaque) > > +{ > > + return 0; > > +} > > + > > +void kvm_arch_exit(void) > > +{ > > + > > +} > > + > > I wonder at this point if it's possible to define kvm_arch_init and > kvm_arch_exit directly in kvm_main.c with __weak ah, nevermind, you get rid of them completely in the next patch > > > /* Section: device related */ > > long kvm_arch_dev_ioctl(struct file *filp, > > unsigned int ioctl, unsigned long arg) > > @@ -5634,7 +5644,7 @@ static inline unsigned long nonhyp_mask(int i) > > > > static int __init kvm_s390_init(void) > > { > > - int i; > > + int i, r; > > > > if (!sclp.has_sief2) { > > pr_info("SIE is not available\n"); > > @@ -5650,12 +5660,23 @@ static int __init kvm_s390_init(void) > > kvm_s390_fac_base[i] |= > > stfle_fac_list[i] & nonhyp_mask(i); > > > > - return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); > > + r = __kvm_s390_init(); > > + if (r) > > + return r; > > + > > + r = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); > > + if (r) { > > + __kvm_s390_exit(); > > + return r; > > + } > > + return 0; > > } > > > > static void __exit kvm_s390_exit(void) > > { > > kvm_exit(); > > + > > + __kvm_s390_exit(); > > } > > > > module_init(kvm_s390_init); > ___ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Re: [PATCH 25/44] KVM: s390: Do s390 specific init without bouncing through kvm_init()
On Wed, 2 Nov 2022 23:18:52 + Sean Christopherson wrote: > Move the guts of kvm_arch_init() into a new helper, __kvm_s390_init(), > and invoke the new helper directly from kvm_s390_init() instead of > bouncing through kvm_init(). Invoking kvm_arch_init() is the very > first action performed by kvm_init(), i.e. this is a glorified nop. > > Moving setup to __kvm_s390_init() will allow tagging more functions as > __init, and emptying kvm_arch_init() will allow dropping the hook > entirely once all architecture implementations are nops. > > No functional change intended. > > Signed-off-by: Sean Christopherson > --- > arch/s390/kvm/kvm-s390.c | 29 + > 1 file changed, 25 insertions(+), 4 deletions(-) > > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index 7fcd2d3b3558..e1c9980aae78 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -461,7 +461,7 @@ static void kvm_s390_cpu_feat_init(void) >*/ > } > > -int kvm_arch_init(void *opaque) > +static int __kvm_s390_init(void) > { > int rc = -ENOMEM; > > @@ -519,7 +519,7 @@ int kvm_arch_init(void *opaque) > return rc; > } > > -void kvm_arch_exit(void) > +static void __kvm_s390_exit(void) > { > gmap_unregister_pte_notifier(_notifier); > gmap_unregister_pte_notifier(_gmap_notifier); > @@ -533,6 +533,16 @@ void kvm_arch_exit(void) > debug_unregister(kvm_s390_dbf_uv); > } > > +int kvm_arch_init(void *opaque) > +{ > + return 0; > +} > + > +void kvm_arch_exit(void) > +{ > + > +} > + I wonder at this point if it's possible to define kvm_arch_init and kvm_arch_exit directly in kvm_main.c with __weak > /* Section: device related */ > long kvm_arch_dev_ioctl(struct file *filp, > unsigned int ioctl, unsigned long arg) > @@ -5634,7 +5644,7 @@ static inline unsigned long nonhyp_mask(int i) > > static int __init kvm_s390_init(void) > { > - int i; > + int i, r; > > if (!sclp.has_sief2) { > pr_info("SIE is not available\n"); > @@ -5650,12 +5660,23 @@ static int __init kvm_s390_init(void) > kvm_s390_fac_base[i] |= > stfle_fac_list[i] & nonhyp_mask(i); > > - return kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); > + r = __kvm_s390_init(); > + if (r) > + return r; > + > + r = kvm_init(NULL, sizeof(struct kvm_vcpu), 0, THIS_MODULE); > + if (r) { > + __kvm_s390_exit(); > + return r; > + } > + return 0; > } > > static void __exit kvm_s390_exit(void) > { > kvm_exit(); > + > + __kvm_s390_exit(); > } > > module_init(kvm_s390_init); ___ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm