aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Guo <wei.guo.simon@gmail.com>2018-05-23 03:02:09 -0400
committerPaul Mackerras <paulus@ozlabs.org>2018-05-31 20:30:53 -0400
commitb3cebfe8c1cadf1817939dcc3688a2504a69c662 (patch)
treebfba142405d95d36da14b680c0705e9697ba4dbd
parentd234d68eb7464c9ebd11e870404e83d3e9348406 (diff)
KVM: PPC: Move vcpu_load/vcpu_put down to each ioctl case in kvm_arch_vcpu_ioctl
Although we already have kvm_arch_vcpu_async_ioctl() which doesn't require ioctl to load vcpu, the sync ioctl code need to be cleaned up when CONFIG_HAVE_KVM_VCPU_ASYNC_IOCTL is not configured. This patch moves vcpu_load/vcpu_put down to each ioctl switch case so that each ioctl can decide to do vcpu_load/vcpu_put or not independently. Signed-off-by: Simon Guo <wei.guo.simon@gmail.com> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
-rw-r--r--arch/powerpc/kvm/powerpc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index b8247fac3e56..c2c3477af746 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -1980,16 +1980,16 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
1980 void __user *argp = (void __user *)arg; 1980 void __user *argp = (void __user *)arg;
1981 long r; 1981 long r;
1982 1982
1983 vcpu_load(vcpu);
1984
1985 switch (ioctl) { 1983 switch (ioctl) {
1986 case KVM_ENABLE_CAP: 1984 case KVM_ENABLE_CAP:
1987 { 1985 {
1988 struct kvm_enable_cap cap; 1986 struct kvm_enable_cap cap;
1989 r = -EFAULT; 1987 r = -EFAULT;
1988 vcpu_load(vcpu);
1990 if (copy_from_user(&cap, argp, sizeof(cap))) 1989 if (copy_from_user(&cap, argp, sizeof(cap)))
1991 goto out; 1990 goto out;
1992 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap); 1991 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
1992 vcpu_put(vcpu);
1993 break; 1993 break;
1994 } 1994 }
1995 1995
@@ -1998,12 +1998,14 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
1998 { 1998 {
1999 struct kvm_one_reg reg; 1999 struct kvm_one_reg reg;
2000 r = -EFAULT; 2000 r = -EFAULT;
2001 vcpu_load(vcpu);
2001 if (copy_from_user(&reg, argp, sizeof(reg))) 2002 if (copy_from_user(&reg, argp, sizeof(reg)))
2002 goto out; 2003 goto out;
2003 if (ioctl == KVM_SET_ONE_REG) 2004 if (ioctl == KVM_SET_ONE_REG)
2004 r = kvm_vcpu_ioctl_set_one_reg(vcpu, &reg); 2005 r = kvm_vcpu_ioctl_set_one_reg(vcpu, &reg);
2005 else 2006 else
2006 r = kvm_vcpu_ioctl_get_one_reg(vcpu, &reg); 2007 r = kvm_vcpu_ioctl_get_one_reg(vcpu, &reg);
2008 vcpu_put(vcpu);
2007 break; 2009 break;
2008 } 2010 }
2009 2011
@@ -2011,9 +2013,11 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
2011 case KVM_DIRTY_TLB: { 2013 case KVM_DIRTY_TLB: {
2012 struct kvm_dirty_tlb dirty; 2014 struct kvm_dirty_tlb dirty;
2013 r = -EFAULT; 2015 r = -EFAULT;
2016 vcpu_load(vcpu);
2014 if (copy_from_user(&dirty, argp, sizeof(dirty))) 2017 if (copy_from_user(&dirty, argp, sizeof(dirty)))
2015 goto out; 2018 goto out;
2016 r = kvm_vcpu_ioctl_dirty_tlb(vcpu, &dirty); 2019 r = kvm_vcpu_ioctl_dirty_tlb(vcpu, &dirty);
2020 vcpu_put(vcpu);
2017 break; 2021 break;
2018 } 2022 }
2019#endif 2023#endif
@@ -2022,7 +2026,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
2022 } 2026 }
2023 2027
2024out: 2028out:
2025 vcpu_put(vcpu);
2026 return r; 2029 return r;
2027} 2030}
2028 2031