Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] KVM_CAP_PPC_COMPAT_CAPS incorrectly advertises support on non-nestedv2 pseries hosts, but KVM_PPC_GET_COMPAT_CAPS unconditionally fails with -EINVAL.
--
--- Patch [2]: [PATCH v7 2/4] KVM: PPC: Book3S HV: Implement compat CPU capability retrieval for KVM on PowerVM ---
commit 7fc253c4f6dbfb301a4c2d7a89c141048079da6c
Author: Amit Machhiwal <[email protected]>
KVM: PPC: Book3S HV: Implement compat CPU capability retrieval for KVM on PowerVM
On POWER systems, the host CPU may run in a compatibility mode (e.g., a
Power11 processor operating in Power10 compatibility mode). In such
cases, the effective CPU level exposed to guests differs from the
physical processor generation. This patch exposes host CPU compatibility
mode capabilities to userspace for nested KVM guests via a new ioctl.
> diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
> index 61dbeea317f3b..8799124b80960 100644
> --- a/arch/powerpc/kvm/book3s_hv.c
> +++ b/arch/powerpc/kvm/book3s_hv.c
> @@ -6510,6 +6510,25 @@ static bool kvmppc_hash_v3_possible(void)
> return true;
> }
>
> +
> +static int kvmppc_get_compat_caps(struct kvm_ppc_compat_caps *host_caps)
> +{
> + unsigned long capabilities = 0;
> + long rc = -EINVAL;
> +
> + if (kvmhv_on_pseries()) {
> + if (kvmhv_is_nestedv2()) {
> + WARN_ON_ONCE(!nested_capabilities);
> + capabilities = nested_capabilities;
> + rc = 0;
> + }
> + }
> +
> + host_caps->compat_capabilities = capabilities & KVM_PPC_COMPAT_BITMASK;
> +
> + return rc;
> +}
[Severity: High]
Does this code break guest initialization on non-nestedv2 pseries hosts?
In arch/powerpc/kvm/powerpc.c, kvm_vm_ioctl_check_extension() advertises
KVM_CAP_PPC_COMPAT_CAPS support on all pseries hosts:
case KVM_CAP_PPC_COMPAT_CAPS:
r = 0;
if (hv_enabled && kvmhv_on_pseries())
r = 1;
break;
But here in kvmppc_get_compat_caps(), if kvmhv_on_pseries() is true and
kvmhv_is_nestedv2() is false, rc remains -EINVAL.
When userspace (like QEMU) sees the capability is supported, it will call the
KVM_PPC_GET_COMPAT_CAPS ioctl. Receiving an unexpected -EINVAL here causes
QEMU to fail VM initialization, breaking guest boots on standard pseries
hosts.
Should the check extension logic be updated to also require
kvmhv_is_nestedv2(), or should this function handle non-nestedv2 pseries
hosts without returning an error?
--
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.