]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - arch/s390/kvm/kvm-s390.c
mmap locking API: use coccinelle to convert mmap_sem rwsem call sites
[mirror_ubuntu-jammy-kernel.git] / arch / s390 / kvm / kvm-s390.c
index 06bde4bad20593e92debf16beb9b82040af7319b..d0ff26d157bcb7aeb00a9000d58c61c6db6b6e44 100644 (file)
 #include <linux/bitmap.h>
 #include <linux/sched/signal.h>
 #include <linux/string.h>
+#include <linux/pgtable.h>
 
 #include <asm/asm-offsets.h>
 #include <asm/lowcore.h>
 #include <asm/stp.h>
-#include <asm/pgtable.h>
 #include <asm/gmap.h>
 #include <asm/nmi.h>
 #include <asm/switch_to.h>
@@ -763,9 +763,9 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
                        r = -EINVAL;
                else {
                        r = 0;
-                       down_write(&kvm->mm->mmap_sem);
+                       mmap_write_lock(kvm->mm);
                        kvm->mm->context.allow_gmap_hpage_1m = 1;
-                       up_write(&kvm->mm->mmap_sem);
+                       mmap_write_unlock(kvm->mm);
                        /*
                         * We might have to create fake 4k page
                         * tables. To avoid that the hardware works on
@@ -1815,7 +1815,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
        if (!keys)
                return -ENOMEM;
 
-       down_read(&current->mm->mmap_sem);
+       mmap_read_lock(current->mm);
        srcu_idx = srcu_read_lock(&kvm->srcu);
        for (i = 0; i < args->count; i++) {
                hva = gfn_to_hva(kvm, args->start_gfn + i);
@@ -1829,7 +1829,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
                        break;
        }
        srcu_read_unlock(&kvm->srcu, srcu_idx);
-       up_read(&current->mm->mmap_sem);
+       mmap_read_unlock(current->mm);
 
        if (!r) {
                r = copy_to_user((uint8_t __user *)args->skeydata_addr, keys,
@@ -1873,7 +1873,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
                goto out;
 
        i = 0;
-       down_read(&current->mm->mmap_sem);
+       mmap_read_lock(current->mm);
        srcu_idx = srcu_read_lock(&kvm->srcu);
         while (i < args->count) {
                unlocked = false;
@@ -1900,7 +1900,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
                        i++;
        }
        srcu_read_unlock(&kvm->srcu, srcu_idx);
-       up_read(&current->mm->mmap_sem);
+       mmap_read_unlock(current->mm);
 out:
        kvfree(keys);
        return r;
@@ -2089,14 +2089,14 @@ static int kvm_s390_get_cmma_bits(struct kvm *kvm,
        if (!values)
                return -ENOMEM;
 
-       down_read(&kvm->mm->mmap_sem);
+       mmap_read_lock(kvm->mm);
        srcu_idx = srcu_read_lock(&kvm->srcu);
        if (peek)
                ret = kvm_s390_peek_cmma(kvm, args, values, bufsize);
        else
                ret = kvm_s390_get_cmma(kvm, args, values, bufsize);
        srcu_read_unlock(&kvm->srcu, srcu_idx);
-       up_read(&kvm->mm->mmap_sem);
+       mmap_read_unlock(kvm->mm);
 
        if (kvm->arch.migration_mode)
                args->remaining = atomic64_read(&kvm->arch.cmma_dirty_pages);
@@ -2146,7 +2146,7 @@ static int kvm_s390_set_cmma_bits(struct kvm *kvm,
                goto out;
        }
 
-       down_read(&kvm->mm->mmap_sem);
+       mmap_read_lock(kvm->mm);
        srcu_idx = srcu_read_lock(&kvm->srcu);
        for (i = 0; i < args->count; i++) {
                hva = gfn_to_hva(kvm, args->start_gfn + i);
@@ -2161,12 +2161,12 @@ static int kvm_s390_set_cmma_bits(struct kvm *kvm,
                set_pgste_bits(kvm->mm, hva, mask, pgstev);
        }
        srcu_read_unlock(&kvm->srcu, srcu_idx);
-       up_read(&kvm->mm->mmap_sem);
+       mmap_read_unlock(kvm->mm);
 
        if (!kvm->mm->context.uses_cmm) {
-               down_write(&kvm->mm->mmap_sem);
+               mmap_write_lock(kvm->mm);
                kvm->mm->context.uses_cmm = 1;
-               up_write(&kvm->mm->mmap_sem);
+               mmap_write_unlock(kvm->mm);
        }
 out:
        vfree(bits);
@@ -2239,9 +2239,9 @@ static int kvm_s390_handle_pv(struct kvm *kvm, struct kvm_pv_cmd *cmd)
                if (r)
                        break;
 
-               down_write(&current->mm->mmap_sem);
+               mmap_write_lock(current->mm);
                r = gmap_mark_unmergeable();
-               up_write(&current->mm->mmap_sem);
+               mmap_write_unlock(current->mm);
                if (r)
                        break;
 
@@ -3998,9 +3998,6 @@ static int vcpu_pre_run(struct kvm_vcpu *vcpu)
        if (need_resched())
                schedule();
 
-       if (test_cpu_flag(CIF_MCCK_PENDING))
-               s390_handle_mcck();
-
        if (!kvm_is_ucontrol(vcpu->kvm)) {
                rc = kvm_s390_deliver_pending_interrupts(vcpu);
                if (rc)