diff options
author | Simon Guo <wei.guo.simon@gmail.com> | 2018-05-23 03:02:09 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@ozlabs.org> | 2018-05-31 20:30:53 -0400 |
commit | b3cebfe8c1cadf1817939dcc3688a2504a69c662 (patch) | |
tree | bfba142405d95d36da14b680c0705e9697ba4dbd | |
parent | d234d68eb7464c9ebd11e870404e83d3e9348406 (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.c | 9 |
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(®, argp, sizeof(reg))) | 2002 | if (copy_from_user(®, 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, ®); | 2005 | r = kvm_vcpu_ioctl_set_one_reg(vcpu, ®); |
2005 | else | 2006 | else |
2006 | r = kvm_vcpu_ioctl_get_one_reg(vcpu, ®); | 2007 | r = kvm_vcpu_ioctl_get_one_reg(vcpu, ®); |
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 | ||
2024 | out: | 2028 | out: |
2025 | vcpu_put(vcpu); | ||
2026 | return r; | 2029 | return r; |
2027 | } | 2030 | } |
2028 | 2031 | ||