KVM: s390: Do s390 specific init without bouncing through kvm_init()
authorSean Christopherson <seanjc@google.com>
Wed, 30 Nov 2022 23:09:11 +0000 (23:09 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 29 Dec 2022 20:41:21 +0000 (15:41 -0500)
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 <seanjc@google.com>
Reviewed-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221130230934.1014142-28-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/s390/kvm/kvm-s390.c

index 829e6e0460036d38d69ab050a04bdfb03cca40b9..8c4fcaf2bd36b3d87b121e91360ec021e11d688f 100644 (file)
@@ -469,7 +469,7 @@ static void kvm_s390_cpu_feat_init(void)
         */
 }
 
-int kvm_arch_init(void *opaque)
+static int __kvm_s390_init(void)
 {
        int rc = -ENOMEM;
 
@@ -527,7 +527,7 @@ err_kvm_uv:
        return rc;
 }
 
-void kvm_arch_exit(void)
+static void __kvm_s390_exit(void)
 {
        gmap_unregister_pte_notifier(&gmap_notifier);
        gmap_unregister_pte_notifier(&vsie_gmap_notifier);
@@ -541,6 +541,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)
+{
+
+}
+
 /* Section: device related */
 long kvm_arch_dev_ioctl(struct file *filp,
                        unsigned int ioctl, unsigned long arg)
@@ -5696,7 +5706,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");
@@ -5712,12 +5722,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);