From patchwork Sat Feb 15 01:06:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 13975862 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 CB131F9F8 for ; Sat, 15 Feb 2025 01:06:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739581575; cv=none; b=KtOXOMZ3UbqALAPCKE2GeoDOaOgMG+5scPr+NJli9SntvV2VTokjw9i/qKsDBllvQeR+mQmn2UkANoIG1NU3qsDUtPX2DfPZRPzcedA2x/mc+t7eBG/7JhOViqoFMmaFMQ4fFQ6Puv1k/xP7pLZzsZCQzpdi83m4iFfOBOKeuNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739581575; c=relaxed/simple; bh=5wliXWDYsrFCwme0bU8BDoFYLmTGBwCFoyuhP4vduys=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=IJVXOdN51ntcMwgH/Mm9TZYwgTPoLZNWRGO7qClS8cKBOPOP8ZhwBKBbK2F4+FcNW0nnQMqQhUt2sgIDLk7H+9izYYeUpFOsIFQQDoCTDil9nt/taxjJGKathIv7j3auzzrWTsWRZegRIPc7W1e1N0HeFiJ7AQUbVLrjnsuLW7c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Om+ngLa3; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Om+ngLa3" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-220ff7d7b67so15895915ad.2 for ; Fri, 14 Feb 2025 17:06:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739581573; x=1740186373; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=gnHrxG87g2zrpNznbUWyypfRtpr7va7BhlbJAw1+aOQ=; b=Om+ngLa3jxTKgaX7Canh3KrefjMF9f9R+pxKqw1qMdfYuVfPoVaPM6YaDh8Hyb5iDM UhN03+GRWOS7q/aDkQFRHaXpeN86Zxzjvb344yehazSmn/YkJlIWFil2ZbBa+x6iGhCw Qm0nNnmuh3citPrsn6yhuwaP+HMBObp3hUmSnmziF+NfXviXyislWG9G19A+amZLwpQO 0iucd3nGaBBK6jxkc736S3WhXBbZTV2mq0oJEYM69AFY6YCWUap4ZeGLrumthlZ30e5q 7T/+dtdwWBxu5xOQa3teEMxF/mt/PSb7F6x0aptw8JM2hb36QSM5oiCBjyXBCguTPWqj PDHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739581573; x=1740186373; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gnHrxG87g2zrpNznbUWyypfRtpr7va7BhlbJAw1+aOQ=; b=kER0dnykfSJ9g9jRCTk3V7ICmFQMRo/X4FExREQ6xWhpPW2av1U1dnFpeoVSsOaEQh m0ijxVuTgMVTzUsJ9lzQg+CwUHJWHoAacbnTeYQIzVge8v7aUt5QNJBYxAtnfaBB6AtM A1tVispxOYKqLDNsNhuJ1/uuViymZjlNnJq8BwbvHWJWWp6vlA9uTd6TajsOo9M/AUab M6rHZBFyJRT8SXTpVk52qKlyPw1cUn59WUV5+OUMc579DSDQjKWl5HDZMM1WaR2U33Tt 44hP3Uh5O0QSLdL57CJlvxTet8TQ9Zg94YXgKfX9zN9TuwQrgoz7C10kwbrdtPGwFvA5 XPtw== X-Gm-Message-State: AOJu0Yyq9iydmzz5dJm1eSialWn/HopIgt87jzsKOgUbhB49wUTaXG+D gu2jqq93x3FKHagYi1f+aJ8BBCp2Al5Wq2iEvwyg/4U9XSsifR3ncjK13wtdiDRmvMmm1xBwx1P 6Kw== X-Google-Smtp-Source: AGHT+IFqpbcx0eksJgzswjg2oejQ8+iZ+7K9CjQZzR/co/7jmMUA3+1XjLY7h+QZJ+aWbZridj68BiDJaJg= X-Received: from pjbpd11.prod.google.com ([2002:a17:90b:1dcb:b0:2fa:27e2:a64d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:dac5:b0:216:7ee9:2227 with SMTP id d9443c01a7336-221040a8e62mr21822595ad.36.1739581573052; Fri, 14 Feb 2025 17:06:13 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 14 Feb 2025 17:06:08 -0800 In-Reply-To: <20250215010609.1199982-1-seanjc@google.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250215010609.1199982-1-seanjc@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250215010609.1199982-2-seanjc@google.com> Subject: [PATCH 1/2] KVM: x86: Don't inject PV async #PF if SEND_ALWAYS=0 and guest state is protected From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Don't inject PV async #PFs into guests with protected register state, i.e. SEV-ES and SEV-SNP guests, unless the guest has opted-in to receiving #PFs at CPL0. For protected guests, the actual CPL of the guest is unknown. Note, no sane CoCo guest should enable PV async #PF, but the current state of Linux-as-a-CoCo-guest isn't entirely sane. Fixes: add5e2f04541 ("KVM: SVM: Add support for the SEV-ES VMSA") Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 58b82d6fd77c..3b67425c3e3d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -13395,7 +13395,7 @@ static bool kvm_can_deliver_async_pf(struct kvm_vcpu *vcpu) return false; if (vcpu->arch.apf.send_user_only && - kvm_x86_call(get_cpl)(vcpu) == 0) + (vcpu->arch.guest_state_protected || !kvm_x86_call(get_cpl)(vcpu))) return false; if (is_guest_mode(vcpu)) { From patchwork Sat Feb 15 01:06:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 13975863 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 6537E146A6F for ; Sat, 15 Feb 2025 01:06:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739581577; cv=none; b=SM75OKtOdiAU85IG4HI/7W67oXnWUcwUg1N7N9iAkAMZle7DiU8AEVuCl5Wme5yh/s0xdfDG+M52sP13wY1K8/z99h5ihxFyZ0xH6oR2hRlWc+RmvizdWDlJR5euJGV5BCQA6yPrxHtr8FrhFwJ7Kx02noMfHWZ+X9QFvaIvC00= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739581577; c=relaxed/simple; bh=bSuqZiuVhGn+R3CBW88ZrNQnYfX6dqIbqMfitjYCmLM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=sHVDsrf5G2H5M0Z0GeLS78Dlh2IxaX4vRZ+sONBijyj0u6zGa4OQSpqomny5lgCaaMkgueSnjGpUC3a5FxiqugVlxxyvzyUAPDvppalZlGsT8nTdYXVEq3Uw00MfVy8SKvQznsgZ1h6/0Jcx8Cs4aPw5qrlfJmcBzWn7ZWj+rP4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=JUMYj2e8; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="JUMYj2e8" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2fc3e239675so1628203a91.0 for ; Fri, 14 Feb 2025 17:06:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739581574; x=1740186374; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=zn5CjaOI/LVKyc7fUHXaWbf0DV9/drzUj0wLJyxdr5U=; b=JUMYj2e8ztRB9wvmZJVlppjf51+uPL+5ng/JYFX0Hvn1agTnbFH00Ec/JtXPLJxV2l 689JmXF7zvRlYOqXYAKHKs8z0Qvcwla2aNXgN6qlmV6IbzT3sMg6DFf8MsIqBnIsc6h6 Tse6QyqgUOwsoIgR5ggzN5aAFRAchNsND1+jbY6gQCrWtLiXZU08AutYA2Qg6C20eeEr Zo4fb3i/qZaz6A0vzgzTIKxi6MNDebPO9ZlxqIM8378I4j3Si4ouTeF7embzUrq9Hzcn JhyiAEeRdcXsrD6HGoLpT8cwAJlZFmOveYbkr7L8qVIQfNNN+TUFI0ae4IUU+piuildv 3QgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739581574; x=1740186374; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=zn5CjaOI/LVKyc7fUHXaWbf0DV9/drzUj0wLJyxdr5U=; b=JqmFWZXWhRx7Y9s3tMGvynR3C6LlGN7LYRHaecDdxEjQ+QvMIElhv5wYKjSmqSfIXm rWLQ4/jS+N9zvMxbfoNl7tiK3xzQRto6U0r2HRkxxY+bbm2cE72uKH89Jss0fV1ZfzPP Z1J83lgrB6NNFMWToKf2YZolDMR8MdSTlLp/f5xpB2pO8AlqqoDaPsOp39Cuy9FyDMSh 5zEGMxpHduRH+YOsdiloorb6ltbBs1rddh5WErGlvUiEB7mKO3szjkn3Bbz1wyrM+ah4 epDB2g9Q0XyyyG8rx4suTmTCFhOmpV4sDLLtb90mAwsEluTHILd+M8+6GOOgfeRVOIz0 apRA== X-Gm-Message-State: AOJu0Yy1bwL7Bmig9qxIR1grTRZehR+er5F+5MkDiIxq8avfhtyLwVxV h3fayKjplwGdyskwU5DuqTrnZ69Dj5ZeMXWlfo+q6plDGyUfwL0Qc9hW88l1P/ToJUBGDbdlHBL Fdg== X-Google-Smtp-Source: AGHT+IFIwMKT3tvPATCPjCIoh5AEF4qKbxWAMxjW2j21dZojwEmwm8bNWQma8rcOLanXENnhrxNv4XpJxno= X-Received: from pjbpq11.prod.google.com ([2002:a17:90b:3d8b:b0:2ea:5469:76c2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:380f:b0:2fa:ba3:5451 with SMTP id 98e67ed59e1d1-2fc4115089fmr1816354a91.35.1739581574696; Fri, 14 Feb 2025 17:06:14 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 14 Feb 2025 17:06:09 -0800 In-Reply-To: <20250215010609.1199982-1-seanjc@google.com> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250215010609.1199982-1-seanjc@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250215010609.1199982-3-seanjc@google.com> Subject: [PATCH 2/2] KVM: x86: Rename and invert async #PF's send_user_only flag to send_always From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Rename send_user_only to avoid "user", because KVM's ABI is to not inject page faults into CPL0, whereas "user" in x86 is specifically CPL3. Invert the polarity to keep the naming simple and unambiguous. E.g. while KVM often refers to CPL0 as "kernel", that terminology isn't ubiquitous, and "send_kernel" could be misconstrued as "send only to kernel". Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 2 +- arch/x86/kvm/x86.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 3506f497741b..0f1c57006da3 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -999,8 +999,8 @@ struct kvm_vcpu_arch { u64 msr_int_val; /* MSR_KVM_ASYNC_PF_INT */ u16 vec; u32 id; - bool send_user_only; u32 host_apf_flags; + bool send_always; bool delivery_as_pf_vmexit; bool pageready_pending; } apf; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 3b67425c3e3d..c8e2d905c172 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3561,7 +3561,7 @@ static int kvm_pv_enable_async_pf(struct kvm_vcpu *vcpu, u64 data) sizeof(u64))) return 1; - vcpu->arch.apf.send_user_only = !(data & KVM_ASYNC_PF_SEND_ALWAYS); + vcpu->arch.apf.send_always = (data & KVM_ASYNC_PF_SEND_ALWAYS); vcpu->arch.apf.delivery_as_pf_vmexit = data & KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT; kvm_async_pf_wakeup_all(vcpu); @@ -13394,7 +13394,7 @@ static bool kvm_can_deliver_async_pf(struct kvm_vcpu *vcpu) if (!kvm_pv_async_pf_enabled(vcpu)) return false; - if (vcpu->arch.apf.send_user_only && + if (!vcpu->arch.apf.send_always && (vcpu->arch.guest_state_protected || !kvm_x86_call(get_cpl)(vcpu))) return false;