KVM: RISC-V: Use kvm_vcpu.srcu_idx, drop RISC-V's unnecessary copy
authorSean Christopherson <seanjc@google.com>
Fri, 15 Apr 2022 00:43:42 +0000 (00:43 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 21 Apr 2022 17:16:10 +0000 (13:16 -0400)
Use the generic kvm_vcpu's srcu_idx instead of using an indentical field
in RISC-V's version of kvm_vcpu_arch.  Generic KVM very intentionally
does not touch vcpu->srcu_idx, i.e. there's zero chance of running afoul
of common code.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20220415004343.2203171-3-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/riscv/include/asm/kvm_host.h
arch/riscv/kvm/vcpu.c
arch/riscv/kvm/vcpu_exit.c

index 78da839657e52401f34b93acde2bc1cd31fd6cac..cd4bbcecb0fbf04c0ddf3ef1a9928576dd51c385 100644 (file)
@@ -193,9 +193,6 @@ struct kvm_vcpu_arch {
 
        /* Don't run the VCPU (blocked) */
        bool pause;
-
-       /* SRCU lock index for in-kernel run loop */
-       int srcu_idx;
 };
 
 static inline void kvm_arch_hardware_unsetup(void) {}
index aad430668bb4dea9eec65cff76281eb0c5e1f188..4a52fda6417bbd14d47917ee185eb999cae57f42 100644 (file)
@@ -727,13 +727,13 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
        /* Mark this VCPU ran at least once */
        vcpu->arch.ran_atleast_once = true;
 
-       vcpu->arch.srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
+       vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
 
        /* Process MMIO value returned from user-space */
        if (run->exit_reason == KVM_EXIT_MMIO) {
                ret = kvm_riscv_vcpu_mmio_return(vcpu, vcpu->run);
                if (ret) {
-                       srcu_read_unlock(&vcpu->kvm->srcu, vcpu->arch.srcu_idx);
+                       srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
                        return ret;
                }
        }
@@ -742,13 +742,13 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
        if (run->exit_reason == KVM_EXIT_RISCV_SBI) {
                ret = kvm_riscv_vcpu_sbi_return(vcpu, vcpu->run);
                if (ret) {
-                       srcu_read_unlock(&vcpu->kvm->srcu, vcpu->arch.srcu_idx);
+                       srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
                        return ret;
                }
        }
 
        if (run->immediate_exit) {
-               srcu_read_unlock(&vcpu->kvm->srcu, vcpu->arch.srcu_idx);
+               srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
                return -EINTR;
        }
 
@@ -787,7 +787,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
                 */
                vcpu->mode = IN_GUEST_MODE;
 
-               srcu_read_unlock(&vcpu->kvm->srcu, vcpu->arch.srcu_idx);
+               srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
                smp_mb__after_srcu_read_unlock();
 
                /*
@@ -805,7 +805,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
                        vcpu->mode = OUTSIDE_GUEST_MODE;
                        local_irq_enable();
                        preempt_enable();
-                       vcpu->arch.srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
+                       vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
                        continue;
                }
 
@@ -849,7 +849,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
 
                preempt_enable();
 
-               vcpu->arch.srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
+               vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
 
                ret = kvm_riscv_vcpu_exit(vcpu, run, &trap);
        }
@@ -858,7 +858,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
 
        vcpu_put(vcpu);
 
-       srcu_read_unlock(&vcpu->kvm->srcu, vcpu->arch.srcu_idx);
+       srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
 
        return ret;
 }
index aa8af129e4bb93ed5c48e988ab7e4071e6ef3273..2d56faddb9d1cf68b2df75fddf81839cc74dac4d 100644 (file)
@@ -456,9 +456,9 @@ static int stage2_page_fault(struct kvm_vcpu *vcpu, struct kvm_run *run,
 void kvm_riscv_vcpu_wfi(struct kvm_vcpu *vcpu)
 {
        if (!kvm_arch_vcpu_runnable(vcpu)) {
-               srcu_read_unlock(&vcpu->kvm->srcu, vcpu->arch.srcu_idx);
+               srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
                kvm_vcpu_halt(vcpu);
-               vcpu->arch.srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
+               vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
                kvm_clear_request(KVM_REQ_UNHALT, vcpu);
        }
 }