Re: [RFC PATCH v2 21/69] KVM: Add max_vcpus field in common 'struct kvm'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Please replace "Add" with "Move" and add a couple lines to the commit message.

Paolo

On 03/07/21 00:04, isaku.yamahata@xxxxxxxxx wrote:
From: Sean Christopherson <sean.j.christopherson@xxxxxxxxx>

Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx>
Signed-off-by: Isaku Yamahata <isaku.yamahata@xxxxxxxxx>
---
  arch/arm64/include/asm/kvm_host.h | 3 ---
  arch/arm64/kvm/arm.c              | 7 ++-----
  arch/arm64/kvm/vgic/vgic-init.c   | 6 +++---
  include/linux/kvm_host.h          | 1 +
  virt/kvm/kvm_main.c               | 3 ++-
  5 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index 7cd7d5c8c4bc..96a0dc3a8780 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -106,9 +106,6 @@ struct kvm_arch {
  	/* VTCR_EL2 value for this VM */
  	u64    vtcr;
- /* The maximum number of vCPUs depends on the used GIC model */
-	int max_vcpus;
-
  	/* Interrupt controller */
  	struct vgic_dist	vgic;
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index e720148232a0..a46306cf3106 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -145,7 +145,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
  	kvm_vgic_early_init(kvm);
/* The maximum number of VCPUs is limited by the host's GIC model */
-	kvm->arch.max_vcpus = kvm_arm_default_max_vcpus();
+	kvm->max_vcpus = kvm_arm_default_max_vcpus();
set_default_spectre(kvm); @@ -220,7 +220,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
  	case KVM_CAP_MAX_VCPUS:
  	case KVM_CAP_MAX_VCPU_ID:
  		if (kvm)
-			r = kvm->arch.max_vcpus;
+			r = kvm->max_vcpus;
  		else
  			r = kvm_arm_default_max_vcpus();
  		break;
@@ -299,9 +299,6 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id)
  	if (irqchip_in_kernel(kvm) && vgic_initialized(kvm))
  		return -EBUSY;
- if (id >= kvm->arch.max_vcpus)
-		return -EINVAL;
-
  	return 0;
  }
diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c
index 58cbda00e56d..089ac00c55d7 100644
--- a/arch/arm64/kvm/vgic/vgic-init.c
+++ b/arch/arm64/kvm/vgic/vgic-init.c
@@ -97,11 +97,11 @@ int kvm_vgic_create(struct kvm *kvm, u32 type)
  	ret = 0;
if (type == KVM_DEV_TYPE_ARM_VGIC_V2)
-		kvm->arch.max_vcpus = VGIC_V2_MAX_CPUS;
+		kvm->max_vcpus = VGIC_V2_MAX_CPUS;
  	else
-		kvm->arch.max_vcpus = VGIC_V3_MAX_CPUS;
+		kvm->max_vcpus = VGIC_V3_MAX_CPUS;
- if (atomic_read(&kvm->online_vcpus) > kvm->arch.max_vcpus) {
+	if (atomic_read(&kvm->online_vcpus) > kvm->max_vcpus) {
  		ret = -E2BIG;
  		goto out_unlock;
  	}
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index e87f07c5c601..ddd4d0f68cdf 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -544,6 +544,7 @@ struct kvm {
  	 * and is accessed atomically.
  	 */
  	atomic_t online_vcpus;
+	int max_vcpus;
  	int created_vcpus;
  	int last_boosted_vcpu;
  	struct list_head vm_list;
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index dc752d0bd3ec..52d40ea75749 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -910,6 +910,7 @@ static struct kvm *kvm_create_vm(unsigned long type)
  	mutex_init(&kvm->irq_lock);
  	mutex_init(&kvm->slots_lock);
  	INIT_LIST_HEAD(&kvm->devices);
+	kvm->max_vcpus = KVM_MAX_VCPUS;
BUILD_BUG_ON(KVM_MEM_SLOTS_NUM > SHRT_MAX); @@ -3329,7 +3330,7 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
  		return -EINVAL;
mutex_lock(&kvm->lock);
-	if (kvm->created_vcpus == KVM_MAX_VCPUS) {
+	if (kvm->created_vcpus >= kvm->max_vcpus) {
  		mutex_unlock(&kvm->lock);
  		return -EINVAL;
  	}





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux