From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl2-f43.google.com (mail-dl2-f43.google.com [74.125.229.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D15D33C10A6 for ; Tue, 22 Sep 2026 18:29:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.229.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790101783; cv=none; b=hyhfLI7ghPDcSl/ZjjF+uCw9fwutCoRxl0yQVnj1MjedRmd+ocibY2k4w6o9DPq9/IMCnuJNDyAj2PViSCMh5mOPSAK9rPfwUdhOxJ6EOCWNKPMbhkdnU9y73veq4mX8tkwG+zRMj86F2dKr9K4stsgDBj730DZvp6JvX3kKsnE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790101783; c=relaxed/simple; bh=GWNjedkibxumoHAK01mIQABSW7U4B9phhkLLwIwFVQw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cvgbCMiH//BGC6oWOECwBN6ePOi+lpUfe2KYmonTf4p4uagzndc/Qg9rIc4/2YokcAOmWS6lKjT5bmGBOyzLTWROBpA/JGgam4XKsym+MLkuUndRUwFeiviNuXCpaUeDCE/mRmtkSGPxOAko92omn84k5cUCfCLmtsfVlAtHlAA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LM8MuOIx; arc=none smtp.client-ip=74.125.229.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LM8MuOIx" Received: by mail-dl2-f43.google.com with SMTP id a92af1059eb24-142dd025d07so115326c88.2 for ; Tue, 22 Sep 2026 11:29:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790101781; x=1790706581; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dSFKUXBkZGZNQnOO0S3ETacf8WntsJLIZhJqM465+7c=; b=LM8MuOIxaMQEGJFVVfLpBjbzR7nZQzEoFHX9URU040LXzdYAs6m9CA2qe72HHK206x z5nX7CeVBuS/oQvsEAYce7qsWPSder0Q9fhL9vDahSfn2BY+uQJqfje0b5M8eTQDGyqY xyDG6QwU1khE3pyVMbuz8ikVs2jJIaaZTCdYTM3/SOg3nTBnvm7eF6imssJzyFZi230z YfalgQakYy2WUnnFzthnoscJ60y7lyOqU7U9XjlRTwYTUX7550mhy+g9WsDc6p5tauER xfe/sAs3MdehQe0OhcHblU712aKa5BhmHslt6lAUp5Y5VdmqnZQ/WAZ8Bmk9kKvcTwDP ShMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790101781; x=1790706581; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=dSFKUXBkZGZNQnOO0S3ETacf8WntsJLIZhJqM465+7c=; b=z2QRmDFyWLl1XD1v2hmyRhxurqk3wmzkzIEHVSZkqsuCJXHoGeFv8lJiCAE4Hs5M8V ppxtVqQfjPwlc6Y3qBmGfaUY68Ngij/W6ySxIyG8JT5fTgH2LFGURR5cYor1Y1ghUchK wlxpfsW1mfu50PM+v8fUBh67u8EbSwsRJbzJRtWh/xFQQjPBgeI8MwKXMc1Bjf+H86aH GirTqfjJhpHDsYDnPqFobu3ZfkyBy9UrE+lUtnNhRmUGfSIhCdtxsXnCZuS3Ao2iywLb zx+fjIhIVCoi2ZVf+6Nwximeb/FCkyKpXdGJcfMz8yvWK45N9nN1nXRZM1dVeuQIB6Ce 6hmg== X-Forwarded-Encrypted: i=1; AKwUvBxO573Y5Qms/02PGn0bzwQJ3RAF5Nph/GwxVPIZh79ey0oZz/9RiTOh9mYhFBwnL7EvZU++3r3+pZHmdhw=@vger.kernel.org X-Gm-Message-State: AFuF++nHWUUOXOq2P4WW7ARlUv8Zeq2XSNjqpFQl2bL/a3yjyuNmHI3g MD9CnW3mrWHE9bvVNxhhfa+vKX9V7BsktGZHHefGMhYL8SPfEcrVO8SY X-Gm-Gg: AYBFou1eGsMTnQxA/ziW2WXRQuMXuXPqmSc5ufej/TDSMLM/J/YPThwQjB22hY3q1qe Qus+2JkCxA/bSSSnLXTgwljU9ItHnDu0XJ/9vHkgKERyymclJ/GUe8pB1IijPGeRLbbvbFLzI9r pjPp5FD5EDRikn+SDttI2rJGn+JGWuWCDGR0H6/OauzNzIfRgsLmb7u20o42xUj+oAEtLOnSoPB CPa6MA6BxjYA4rcCV87T02++0iYOtqUnYEJzt0d1QScbfRJMTtBbaBH25P1Vpp/trIDgVz197A2 rMrG7KLQ0bNvyuli5rIHBo0yGuIwwqdlJDLJ0d65R5of8E4eJCrDzXSUcMdfTf2S64ubRG0tDoR 2KeShw4a+xwBq+uPn0BTyf3svZ+hgTEawxNi6QJ5+w+HWAbiwCWzkQu0WgvveeekmT96jdrMUUJ LVMjICKkXS97tdV5NQwGDRMOkBw61Wc3/doZoE+B39o+A4lIaaqWDPE5To6G+um/ORyoiuo1yVh jC8nQt8Bga9BPsFbUs1H4gL1KUNDt/xWFbjkyZCHixJXjKDk2xtSp6083g9 X-Received: by 2002:a05:7301:700d:b0:33b:eadd:9006 with SMTP id 5a478bee46e88-33e8dcc70damr130602eec.23.1790101780602; Tue, 22 Sep 2026 11:29:40 -0700 (PDT) Received: from pve-server.rlab ([49.205.216.49]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33e939fdabcsm154315eec.3.2026.09.22.11.29.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Sep 2026 11:29:40 -0700 (PDT) From: "Ritesh Harjani (IBM)" To: kvm@vger.kernel.org Cc: Sean Christopherson , Paolo Bonzini , linuxppc-dev@lists.ozlabs.org, Michael Ellerman , Christophe Leroy , Anushree Mathur , Venkat Rao Bagalkote , Harsh Prateek Bora , Madhavan Srinivasan , Shrikanth Hegde , linux-kernel@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [PATCH v5 5/9] KVM: selftests: Make kvm_create_max_vcpus tolerate ENOMEM Date: Tue, 22 Sep 2026 23:58:49 +0530 Message-Id: <25cdef9c45a1270dcad7e9c4140e56b6953eb27b.1790101179.git.ritesh.list@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Some hosts (like in case of nested guest the hypervisor L0 might have quotas/limited resources for L1 guest) can run out of hypervisor resources before hitting KVM_CAP_MAX_VCPUS. This patch make use of the helper we introduced in the previous patch (__vm_vcpu_try_add()) to tolerate such scenarios where an ENOMEM can occur. Signed-off-by: Ritesh Harjani (IBM) --- .../testing/selftests/kvm/include/kvm_util.h | 3 +++ .../selftests/kvm/kvm_create_max_vcpus.c | 21 +++++++++++++++---- tools/testing/selftests/kvm/lib/kvm_util.c | 5 +++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h index aa521b383abe..576bbebe0679 100644 --- a/tools/testing/selftests/kvm/include/kvm_util.h +++ b/tools/testing/selftests/kvm/include/kvm_util.h @@ -1064,6 +1064,9 @@ const char *exit_reason_str(unsigned int exit_reason); bool kvm_arch_needs_naturally_aligned_page_tables(void); +/* True if KVM_CREATE_VM / KVM_CREATE_VCPU may return ENOMEM. */ +bool kvm_arch_vm_create_may_enomem(void); + gpa_t ____vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages, gpa_t min_gpa, u32 memslot, bool protected, bool naturally_aligned); gpa_t __vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages, diff --git a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c index 59ddc3757943..45a9d8b369b5 100644 --- a/tools/testing/selftests/kvm/kvm_create_max_vcpus.c +++ b/tools/testing/selftests/kvm/kvm_create_max_vcpus.c @@ -20,16 +20,29 @@ void test_vcpu_creation(int first_vcpu_id, int num_vcpus) { struct kvm_vm *vm; - int i; + struct kvm_vcpu *vcpu; + int i, created = 0; pr_info("Testing creating %d vCPUs, with IDs %d...%d.\n", num_vcpus, first_vcpu_id, first_vcpu_id + num_vcpus - 1); vm = vm_create_barebones(); - for (i = first_vcpu_id; i < first_vcpu_id + num_vcpus; i++) - /* This asserts that the vCPU was created. */ - __vm_vcpu_add(vm, i); + for (i = first_vcpu_id; i < first_vcpu_id + num_vcpus; i++) { + vcpu = __vm_vcpu_try_add(vm, i); + if (vcpu) { + created++; + continue; + } + + TEST_ASSERT(errno == ENOMEM && kvm_arch_vm_create_may_enomem(), + "KVM_CREATE_VCPU failed for id %d, errno: %d (%s)", + i, errno, strerror(errno)); + TEST_ASSERT(created > 0, + "KVM_CREATE_VCPU failed with ENOMEM before creating any vCPUs"); + pr_info("Created %d vCPUs before ENOMEM at id %d\n", created, i); + break; + } kvm_vm_free(vm); } diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 7084ed90e4cc..b4d6b8167466 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -2112,6 +2112,11 @@ __weak bool kvm_arch_needs_naturally_aligned_page_tables(void) return false; } +__weak bool kvm_arch_vm_create_may_enomem(void) +{ + return false; +} + gpa_t __vm_phy_pages_alloc(struct kvm_vm *vm, size_t nr_pages, enum kvm_mem_region_type type, bool protected) { -- 2.39.5