From nobody Fri Sep 25 15:13:21 2026 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.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 C8AF137F8C4 for ; Fri, 11 Sep 2026 04:57:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789102629; cv=none; b=IW3vFpw6uTfgGwb9M3X5OfqnYCfKTzYzXP4AG47l38CafzUKMlkbmzMGTJSvlTRpS7xtjdYIMvTejduLcEzDTWVptUtD/3DT7OSN8BxbsQl3SG4csHHtddgIt/p0e3ytbbiRHCFPv3NyTgGI5r1DFlIYwo5ie2J6tIZAQZNUvJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789102629; c=relaxed/simple; bh=HcgpT/AXq8ah4/W7KrD5/rpTq65AzhJILFfp25IX/6w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PdOpqokiniFzPtEfZ6MvAO8UARlSw89uWFmcK+ZSydaRWeiRcwLF/3s3ZINm19UQvh5hQD56m21165HonJwXT2jIUrUXZY/dmlQmiGZAQzYtnVXh3F7vpPk2YXO7AqjRZU/2ICOIFXVgv6OjTQCu+jPbB+942u7VNRV8KDcfG6A= 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=RrXci/3E; arc=none smtp.client-ip=209.85.215.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="RrXci/3E" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-ca766c1c9ccso397348a12.0 for ; Thu, 10 Sep 2026 21:57:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789102627; x=1789707427; 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=WmpZZXMsdqMV2V4eNDvwbvfcyiTszzMT6zcGXuns9Y8=; b=RrXci/3ELhFC4XoaKzAZtnMAOKKg0bT5D+iTyMEnSb5dEMZjlJsbY2UxohDBiKtbxu vIE2QU3cDTV3NX4bUxK+ftNcgDEprbsoOq40gW/GHS6JneDnZi7hQeiynJL1bAS/l6ly flnrsmBRv1UIJxQ029hHtYzlm3xcBtW1LUu4CdkdUUq3vROvc28mfUXmV9HEa0s8gVWs zPPCPyRH+ld2jvR77GqIc+4ie1l49MZM80q/C+NUyyHMP2anzJ1QyMbKJSyVGL92Zjef e5yf+e5upyFYzyG0sNHqfI3mf2F4d7SzZXkBYBfkTtGMfzIs7gidJGQIAOrehx+GCZUY wdxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789102627; x=1789707427; 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=WmpZZXMsdqMV2V4eNDvwbvfcyiTszzMT6zcGXuns9Y8=; b=dFcIt2BBvcm0VkO2s2+mxuOJmZ87jbmj+FuOgyLuowqZQSqYWspsDkJUYWavAFYOlM +tH0FeOKJSqp4Dh+NvVudiO5cnCzGLOjEB1coi5+/I3tv3jPpFCunQ81PgZA+GPMGpGD FTgBJ6fkxeAAfZyt5VeU4dPw2KEI22vvPxRG27BrtBKiWlszOmHBaI3bYQeAHkJczWuo 32O8yOJMwqtm0RGJYJtF+2+Y5A/qC+SKHdcMEaS2XEqgKLQVyThQE81Y1FzXl7jMqef1 grCM9K4DuYulANZCs9fOx0uysP1XhGwTTQTRAHCGfySzrfEJP6CsFCPDCi/uo3W8ukNn 4NgQ== X-Forwarded-Encrypted: i=1; AKwUvBwTERNQx1gJQ6NH37op5sHk3ekqJaeHkRzjixQqkwN34DcaoqnjOODTavU8HRxw73Uv1BfycKN/ZrLt5RM=@vger.kernel.org X-Gm-Message-State: AFuF++mJOHgPgumBcx6zkofXnhXPUmfvcZwg4He805eLA0c9GFXKHDyO IaRVlBszKVFuUN9Hszxy6iRwKeMErMSuvaf+X+umazsScfgTSbErDBhX X-Gm-Gg: AYBFou1V5/LzMjLmojGEVFQB53Hig7SjP/AfmP+Rp7kXaO7BQJ5GUSiUk3qMBJZYwIe FAIIsAOhk2LmNPOsyEEs+M+5I+3OjILhZn09VJ9kRkOyD3uywSfRttMvDT/tIhktp/vrlP17/iv CQXuQZB+raXVWSYL4Vn3gQCCQqXga4C5Al0SKKHYNBYCRdZgBSVnJw2TAnvTOLQ3NidNHwl1yds 9zhoLzY/Uadh32jY7z40zJmL48bsXb82z3E8X16P7IWzyZqOxTuKd6PVV0ZLFZk/ooA0NTCm2/X RlQq4Z9HgL2vCWh7oLGck+7W+svzzaujMUpWiw0ni6a9nWOr4fmVHBtpV3+NTQeVs66KjC9eODr gH4XEy1AhGgcYcZg0eeSCKZcRv5mooNlHytt/LuYJKEImDY0+9qWVztVHGNsxl2/rKy4i4DM7kc yD7tN0RrtZ3025SKEfkPzWpaKlD8cICJos7EFR7IP+epiM1dL/za7O5SaXqG9qs0LM9hPEP+H3r MJnUmrT5Lw8PgjwOrQ+7gW9XJpYABnzf8JsVmlhPLfoQEDKI6Ojd4+ETSqMxm27p1nAcI3J X-Received: by 2002:a05:6a21:e0a6:b0:3d2:89db:1688 with SMTP id adf61e73a8af0-3daecffe61cmr4643073637.2.1789102626978; Thu, 10 Sep 2026 21:57:06 -0700 (PDT) Received: from pve-server.rlab ([49.205.216.49]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33ba4e9a3casm2837953eec.12.2026.09.10.21.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 21:57:05 -0700 (PDT) From: "Ritesh Harjani (IBM)" To: linuxppc-dev@lists.ozlabs.org Cc: Michael Ellerman , Christophe Leroy , Anushree Mathur , Venkat Rao Bagalkote , Harsh Prateek Bora , Madhavan Srinivasan , Shrikanth Hegde , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 1/3] KVM: PPC: Book3S HV: Read EX_DSISR as a 32-bit field on guest exit Date: Fri, 11 Sep 2026 10:26:45 +0530 Message-Id: <5433192a9121d1006c01c98ab56aca4b42519454.1789099725.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: quoted-printable Content-Type: text/plain; charset="utf-8" kvmhv_vcpu_entry_p9() recovers the guest fault state from the paca exception save area with vcpu->arch.fault_dsisr =3D exsave[EX_DSISR/sizeof(u64)]; but EX_DSISR is not a doubleword. It is a 32-bit field at offset 48 that shares a doubleword with EX_CCR at offset 52 and the exception entry in exceptions-64s.S stores it accordingly. For e.g. stw r10,IAREA+EX_DSISR(r13) This issue was caught when running kvm selftests on big-endian, where this read would land in the high half and the truncation yields EX_CCR instead - KVM acts on the guest's condition register as if it were HDSISR. The result is that every HDSI on a big-endian host is evaluated against a bogus fault status i.e. it fails with below error: KVM: Got radix HV page fault with DSISR=3D84004840 Let's fix this by reading this field at it's natural width. Fixes: 89d35b239101 ("KVM: PPC: Book3S HV P9: Implement the rest of the P9 = path in C") Signed-off-by: Ritesh Harjani (IBM) --- arch/powerpc/kvm/book3s_hv_p9_entry.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kvm/book3s_hv_p9_entry.c b/arch/powerpc/kvm/book3= s_hv_p9_entry.c index 34bc0a8a1288..16aa8582b888 100644 --- a/arch/powerpc/kvm/book3s_hv_p9_entry.c +++ b/arch/powerpc/kvm/book3s_hv_p9_entry.c @@ -529,6 +529,15 @@ unsigned long kvmppc_msr_hard_disable_set_facilities(s= truct kvm_vcpu *vcpu, unsi } EXPORT_SYMBOL_GPL(kvmppc_msr_hard_disable_set_facilities); =20 +/* + * EX_DSISR is a 32-bit field that shares a doubleword with EX_CCR. + * Small helper for reading it back at its natural width. + */ +static u32 exsave_dsisr(u64 *exsave) +{ + return *(u32 *)((void *)exsave + EX_DSISR); +} + int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time_limit, unsigned lo= ng lpcr, u64 *tb) { struct p9_host_os_sprs host_os_sprs; @@ -770,7 +779,7 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time= _limit, unsigned long lpc =20 if (unlikely(trap =3D=3D BOOK3S_INTERRUPT_MACHINE_CHECK)) { vcpu->arch.fault_dar =3D exsave[EX_DAR/sizeof(u64)]; - vcpu->arch.fault_dsisr =3D exsave[EX_DSISR/sizeof(u64)]; + vcpu->arch.fault_dsisr =3D exsave_dsisr(exsave); kvmppc_realmode_machine_check(vcpu); =20 } else if (unlikely(trap =3D=3D BOOK3S_INTERRUPT_HMI)) { @@ -781,7 +790,7 @@ int kvmhv_vcpu_entry_p9(struct kvm_vcpu *vcpu, u64 time= _limit, unsigned long lpc =20 } else if (trap =3D=3D BOOK3S_INTERRUPT_H_DATA_STORAGE) { vcpu->arch.fault_dar =3D exsave[EX_DAR/sizeof(u64)]; - vcpu->arch.fault_dsisr =3D exsave[EX_DSISR/sizeof(u64)]; + vcpu->arch.fault_dsisr =3D exsave_dsisr(exsave); vcpu->arch.fault_gpa =3D mfspr(SPRN_ASDR); =20 } else if (trap =3D=3D BOOK3S_INTERRUPT_H_INST_STORAGE) { --=20 2.39.5 From nobody Fri Sep 25 15:13:21 2026 Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) (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 CEEDA37F8C4 for ; Fri, 11 Sep 2026 04:57:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789102634; cv=none; b=bWI6+RwVJJYk61YnWzrUk4MaeF0bdPDYqKb6WWCFVosePOo89r/7vkNr8LI3R5oYfMleDhmrASslWSUqqHO/CWDhIwyr1XsDFvaSyrD9gDKEH4NjX+lUNF67R6PXxoyEOQT+Ym3aWlIE62NJznAzT4eNjHBM7hl42h2+yJt+jlU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789102634; c=relaxed/simple; bh=cxWWtKOcVRFOfPirj5NlhN1Lr4UnI5/R64/0wn4Md1I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=luyDJnUsvYeiqydGTnrfiOLcdOWnnvn1k1ZQWk6qTLpwN7P1c8UobP/p2T+XT/KNV3z/rx+tccE61gtamXusOmQj7Z3RuYPwj9+1fhJtIPzbtI6VXLaNBFZ0CzSooHmsP97oVUPdSwdFQmgdocHv8Hl55Y4lqe4I4+Dqg97YxCY= 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=C0AbRI9k; arc=none smtp.client-ip=209.85.215.182 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="C0AbRI9k" Received: by mail-pg1-f182.google.com with SMTP id 41be03b00d2f7-cc4d03f95dfso1048a12.2 for ; Thu, 10 Sep 2026 21:57:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789102632; x=1789707432; 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=3vP8L0nOQBMaqyTnSGV2kxiWzOWPb5E1yklPGYnOA60=; b=C0AbRI9kgOPa48aaQSPf2yu+IdigwG5lNWBrcV8GHr/HHQrPJv83+Rja8vg/EHtjec 0zowjmv9MBaXHhOo+PIKiD7WxQttBvp7U6ZRz5TTsx/tE/cElFcrDH93d0L3a6CQRJ2x F4jbY7qbtmcDagVGDrsZhFcebbEXcgo2wTRrB43Zt8EmyW3ExSciCzm9mqc6Go2iGYps JSw88iz+2zQ5hyu8uYIdYYAp2kbSfU/x4he4SHH5tSomnUQ/PcUq7DXlD1zthIt62iN4 +P85UQExymba8ZbGWtZ9C4R72ZCkbZ9NNVc8ju6Ox/8TYvNeWpHw4v6svLLma4HBzhp/ 52FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789102632; x=1789707432; 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=3vP8L0nOQBMaqyTnSGV2kxiWzOWPb5E1yklPGYnOA60=; b=Zui0qIVN4FR6QgIEo2IhSyMkQ7032V9rIwVuQYF8WWFndNic17CX6CfRkhHuPWwbYh yaLCIwzFkwDtB0Uqpnr6VLwGvl8CSkqOlnIp9kvp2JzGUtKPCoQ0jamA3J3OhmYUb97U KZkwAbTS8uNDy8BIzBU2FjX9QWBrzsVveFZgwrQmOA8n18QlJuY0/0R06bARyuNIZ6P3 72bpk+zQpN52yfmHQu4w6A+AD5Nqy3OWsmABUcXesD70W4Ac6NnSMzDLaFKGUSCCsyQ7 PVp/Z+RC+bME/B+/hZBPoi+MNchZGKXqXv+89ljSXKJ/e7NONv1hssX/ITD5J26P4HN7 xHRQ== X-Forwarded-Encrypted: i=1; AKwUvBz98eCNAC41Pm6vAQXhGJ429pQ/iO5As08CtTo6tIm8kBJLvNnqNk8zIVxy+5giEPerOQScIxiSv14Qkkc=@vger.kernel.org X-Gm-Message-State: AFuF++mehh62xXM9P7fzu4Pohmdq1oVI2lx73wJuMxQRXfkEaB4HC+sz gutL/LDYIZzRJnN/SsVpPSSjyR4Vb+URP2ErYq2iwLhRn4fG9G//Ki2u X-Gm-Gg: AYBFou1So2mrsxZL8uuJEJjr4aafOfYgVvnlW8jx4mDI4cgp/lICoADrQNMCqqa5kRs YJlIEwksuSsO0XPRNqkgpsQIYhGUA0KCxQ7JRouFP0QX08+9m4KKTmZHzJ4tp3czN8u0cmlYQxf JgVuMCayl0Nrc0mG/I239yTqdXIRocoOobgvrQy7KmQVmcmRboNOfXVPe83tDm6QWCms55hKJc9 yfsr9jhUXxv40sQrGfH/WzDno6Vo5XLQl4Z7Ydge5jr15HoGrMElCtFqSmAG92rm+VnjcxW1dvw p4B3zeJgYmK/bnHiq4g0qXihtq+mkYVAEh+FklkuH6Yf/UTbbQIRCaJZbQjpXrxoCDs34ZJrkbo waPwj8jZysv+02CfePRcCJWZA4zIzQnQGEtf/9+jLogJqfE51J1zeSWYpFGt5jVPK9+876COQDm R3RMqqspaLW67Fj43Vm4UJ5cD26AYZ8xp9J8u71sw8hL1GpEJvAmk5anLyvSy40Ot2DfaGW+CYJ dlTbocPldK3G3lEkbUlgrU+ppVsJE+62uv5mBf13DK/bo4fOppzr+B1pxL7XDs= X-Received: by 2002:a05:6a21:15cf:b0:3be:b0b3:3962 with SMTP id adf61e73a8af0-3daed1c1f53mr4438486637.9.1789102631764; Thu, 10 Sep 2026 21:57:11 -0700 (PDT) Received: from pve-server.rlab ([49.205.216.49]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33ba4e9a3casm2837953eec.12.2026.09.10.21.57.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 21:57:10 -0700 (PDT) From: "Ritesh Harjani (IBM)" To: linuxppc-dev@lists.ozlabs.org Cc: Michael Ellerman , Christophe Leroy , Anushree Mathur , Venkat Rao Bagalkote , Harsh Prateek Bora , Madhavan Srinivasan , Shrikanth Hegde , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 2/3] KVM: PPC: Book3S: Don't call __ffs() on an empty pending_exceptions bitmap Date: Fri, 11 Sep 2026 10:26:46 +0530 Message-Id: <3578c377329d39a4a9063c24496d2ac4c31a169d.1789099725.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: quoted-printable Content-Type: text/plain; charset="utf-8" This problem was caught when running KVM PPC selftests on big-endian. __ffs() doc clearly says: "Undefined if no bit exists, so code should check against 0 first" This cause KVM to deliever an arbitary interrupt to the guest and was causing guest to hang up while running these selftests. Signed-off-by: Ritesh Harjani (IBM) --- arch/powerpc/kvm/book3s.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index 2efbe05caed7..e4152e9a0d96 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c @@ -401,17 +401,19 @@ int kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcp= u) if (vcpu->arch.pending_exceptions) printk(KERN_EMERG "KVM: Check pending: %lx\n", vcpu->arch.pending_except= ions); #endif - priority =3D __ffs(*pending); - while (priority < BOOK3S_IRQPRIO_MAX) { - if (kvmppc_book3s_irqprio_deliver(vcpu, priority) && - clear_irqprio(vcpu, priority)) { - clear_bit(priority, &vcpu->arch.pending_exceptions); - break; - } + if (*pending) { + priority =3D __ffs(*pending); + while (priority < BOOK3S_IRQPRIO_MAX) { + if (kvmppc_book3s_irqprio_deliver(vcpu, priority) && + clear_irqprio(vcpu, priority)) { + clear_bit(priority, &vcpu->arch.pending_exceptions); + break; + } - priority =3D find_next_bit(pending, - BITS_PER_BYTE * sizeof(*pending), - priority + 1); + priority =3D find_next_bit(pending, + BITS_PER_BYTE * sizeof(*pending), + priority + 1); + } } /* Tell the guest about our interrupt status */ -- 2.39.5 From nobody Fri Sep 25 15:13:21 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 69DBE29CB52 for ; Fri, 11 Sep 2026 04:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789102638; cv=none; b=paUHh80p9llFX+v0qWI5BMefVb2zJNgtmLR8AQwzxHM+RMkNE4l+GOK4c/ilLsC4Hb2as0VnevDzJL6eNpi01uml6e31wt29mwaj7cwmk/Uc2l5DVXfc2MhdY35/qpsnZM1W9cWa7bNtGzRVzzMVl0t9hgcXrVwShcQAv4b6FBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789102638; c=relaxed/simple; bh=82Pov49TQUI1uX+1GPdDGeVOa0XWO1iz7hV6LXJ6Mak=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aLELUDH/TpaHHKSCcww9WmJY0TgQJpCJ4204xI51gsaUYdPcAhu58GJ8G+Jo+oaQ3dNUZkskVnkO5J5iUpS4zU1ImNSH6wuMEz91C6Kp4lAkLyS2nsWRVB77UjvqHlnd+KV5xKTQyyE7V+DLTTZcuZA1M4iGpAXOFLBilx1GklM= 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=bcZPuy9x; arc=none smtp.client-ip=209.85.216.46 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="bcZPuy9x" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-39b9a99469fso464547a91.3 for ; Thu, 10 Sep 2026 21:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789102637; x=1789707437; 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=bNCb33ZXLrWvVF+B0ZOBHM6IgfnW37C+yUxO/5EOyVA=; b=bcZPuy9xSFaBeqXF539HFWtQdhLa2fJUA96Lti/kYPhxzgPiQikFor4XzvnPy6PoRO ys3hS0cyBB7SwqnafS2EVpgdFD2PxjAQ4wD5w//JNbMJeXJ1GpeQHRM5CaIson0gT3hA u8mQ9HnJtO9VHCAR3ZLfRmwhOJZol/K1uW+WeYXwGQDikJARqOoyVqGK/gf8+LK3EXyR 1cyk/hFE2YtSUf7oGHNOlD7WTgn5/HOu1py310a9SJCplP9wnD+xSMWrReBMf70TWjGG zD9Z4KGZiOjNMLHgo57sGUZzotI7LXvqyA6ze86F+K7M8Dx304uUcU48FXgS/+6l/8we rudw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789102637; x=1789707437; 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=bNCb33ZXLrWvVF+B0ZOBHM6IgfnW37C+yUxO/5EOyVA=; b=pvjQhsC4FlOBYE5h+Hwlmb6qmKNdgS4I97BflPut8eTCsuxtm/5XnatV6+an2tI1Mh gfGm2Tp60kEBuDA5dtRDC1wR+9zJSQBvHBDdauuVsreFfMctRhfwkj393Vfj5IXfdXSM 5zUmsR1clITUpg2N9cISiH0QIgm9q8DDI1WkPxi1JQYRsqsqM8WPoagPmjVE5qbBNAQu yaKCKuaWCM6yd+ilIOSI9LZT6+LzZGII9rnIiFt5tc8bRfMazQr4qC+LGCLIvDjcBrZA kEak2eywxF2j4J8/HLubT/BMNs3NnFEcW5WSDROgZ8ZhS8/D+Jbz2nIaZ88hMt2WssAy bjpw== X-Forwarded-Encrypted: i=1; AKwUvBxpD0GIUjuptaNP3jG8XyExRJLIMdyAF982QMOEZfBIsvJCOPzKRsQ7Slt6iUxxOtX+VPEwQelvsLN+Iag=@vger.kernel.org X-Gm-Message-State: AFuF++kndE3EzTVbnx+n82JaQEX6Ap1TE7FrgUtXa6jZKvnecXPwOguN jIzjH3JDTh1sGH4Gb7Ytrt4R6O7j7+e5QxxC8oJ35K0oAP4OLPFEUnHN X-Gm-Gg: AYBFou0De3VGejAsmnCXHbmHWwOZ19xHo/jFttMv06wOroyoULmOuhnoHHe/zPln2/Z zTqjjnrjCbFpAGCYbyCyiLpMfzc5XmceJbJ3ifjwjTOcwoEPXjPZYyiKbySlcPgbDu6Flzpv79h jgjRE0Go+ZXPOHQ4h5GqFiFO66LVYo+mJ9eeR3MxZ5/mMAVVFILsa+xMaM13au1OCWK4TaycqMX fIM/yh1RYIyyiLpxJzssl7c/nmKSDaZ7pBA/tmf3TjWAnNAiprNL6e4faMaMDs6DfLisYqb3teG ZuYUqjYnv2ualj80bheoqJdpjymqptDFBnWk6eIXwYxtcZ1LIHDk3fEwHBXGZegZLU+jRimUa21 LHyi+FsNKObzSK4fZIV785M/6X8My/PFqRqNB4SiOPE/8sROfsocGSpCk/n/fDPfCZCqyyefGNz gn+oT7f6mGmLtZT3NxBHugIgvW0r7YPZqkBsjBQE7xCntQKbka7pcTyjglQKqKHlpz/hljoyrCp hCGjaxMMCeI1Ol2Wm1+TsX7L7t2KEqWvkQgUmQKvUFWXiMXBWpKk5+WWLS+Xw== X-Received: by 2002:a17:90b:5807:b0:398:e96a:8999 with SMTP id 98e67ed59e1d1-39d9c1befffmr3979865a91.16.1789102636722; Thu, 10 Sep 2026 21:57:16 -0700 (PDT) Received: from pve-server.rlab ([49.205.216.49]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-33ba4e9a3casm2837953eec.12.2026.09.10.21.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 21:57:15 -0700 (PDT) From: "Ritesh Harjani (IBM)" To: linuxppc-dev@lists.ozlabs.org Cc: Michael Ellerman , Christophe Leroy , Anushree Mathur , Venkat Rao Bagalkote , Harsh Prateek Bora , Madhavan Srinivasan , Shrikanth Hegde , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Ritesh Harjani (IBM)" Subject: [RFC 3/3] KVM: PPC: Book3S HV nestedv2: cap max vcpus to PAPR limit Date: Fri, 11 Sep 2026 10:26:47 +0530 Message-Id: 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: quoted-printable Content-Type: text/plain; charset="utf-8" PAPR spec for H_GUEST_CREATE_VCPU says: "Only 2048 VCPUs can be created, and the specified ID must be in the range= of 0 to 2047" However, KVM reports KVM_CAP_MAX_VCPUS as NR_CPUS and KVM_CAP_MAX_VCPU_ID as 8 * NR_CPUS. It also passes the userspace vCPU id through to the hcall unch= anged. On a nestedv2 host (KVM on PowerVM / pseries nested PAPR) built with NR_CPUS > 2048, kvm selftest e.g. kvm_create_max_vcpus will create vCPU 2048 and fail with EINVAL when the hypervisor returns H_P3. Following error gets reported (with a debug print added to selftest to print failed vcpu_id number): ./kvm_create_max_vcpus Random seed: 0x6ec3f539 KVM_CAP_MAX_VCPU_ID: 65536 KVM_CAP_MAX_VCPUS: 8192 Testing creating 8192 vCPUs, with IDs 0...8191. [ 62.655458][ T302] KVM: Create Guest vcpu hcall failed, rc=3D-56 [ 62.655458][ T302] KVM: Create Guest vcpu hcall failed, rc=3D-56 Failed KVM_CREATE_VCPU for vcpu_id 2048 with errno 22 =3D=3D=3D=3D Test Assertion Failure =3D=3D=3D=3D lib/kvm_util.c:1395: vcpu->fd >=3D 0 pid=3D302 tid=3D302 errno=3D22 - Invalid argument 1 0x00000000100061d3: __vm_vcpu_add at kvm_util.c:1395 (discrimin= ator 6) 2 0x0000000010001a6b: test_vcpu_creation at kvm_create_max_vcpus.= c:32 (discriminator 3) 3 0x000000001000160b: main at kvm_create_max_vcpus.c:59 4 0x000000001001b713: __libc_start_call_main at libc-start.o:? 5 0x000000001001bb47: __libc_start_main_impl at ??:? KVM_CREATE_VCPU failed, rc: -1 errno: 22 (Invalid argument) [ 65.316986][ T302] KVM: TLB LPID invalidation hcall failed, rc=3D-2 [ 65.316986][ T302] KVM: TLB LPID invalidation hcall failed, rc=3D-2 Cap both extensions at 2048 when kvmhv_is_nestedv2() is set, so userspace never requests an id the L0 cannot create. PowerNV and nestedv1 are unchanged. The issue is only seen with nestedv2. While at it, this also fixes the limit for KVM_CAP_NR_VCPUS. Fixes: 19d31c5f1157 ("KVM: PPC: Add support for nestedv2 guests") Signed-off-by: Ritesh Harjani (IBM) --- arch/powerpc/include/asm/kvm_host.h | 1 + arch/powerpc/kvm/powerpc.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm= /kvm_host.h index 2d139c807577..d48232557259 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h @@ -37,6 +37,7 @@ #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE #include /* for MAX_SMT_THREADS */ #define KVM_MAX_VCPU_IDS (MAX_SMT_THREADS * KVM_MAX_VCORES) +#define KVM_MAX_VCPU_IDS_NESTEDv2 2048 /* PAPR H_GUEST_CREATE_VCPU vcpuId = */ /* * Limit the nested partition table to 4096 entries (because that's what diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 9194cf492d1c..cf620b6534de 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c @@ -663,12 +663,18 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, lon= g ext) r =3D min(num_present_cpus(), KVM_MAX_VCPUS); else r =3D min(num_online_cpus(), KVM_MAX_VCPUS); + if (kvmhv_is_nestedv2()) + r =3D min(r, KVM_MAX_VCPU_IDS_NESTEDv2); break; case KVM_CAP_MAX_VCPUS: r =3D KVM_MAX_VCPUS; + if (kvmhv_is_nestedv2()) + r =3D min(r, KVM_MAX_VCPU_IDS_NESTEDv2); break; case KVM_CAP_MAX_VCPU_ID: r =3D KVM_MAX_VCPU_IDS; + if (kvmhv_is_nestedv2()) + r =3D min(r, KVM_MAX_VCPU_IDS_NESTEDv2); break; #ifdef CONFIG_PPC_BOOK3S_64 case KVM_CAP_PPC_GET_SMMU_INFO: -- 2.39.5