From nobody Sun Feb 8 02:56:09 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 5EF4114901F for ; Fri, 19 Jul 2024 23:43:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432632; cv=none; b=c73+WrOAcKK9at73N8LIoqPZ5QWu8v2qlqzOIc7+8vtkTnz0jYtNMGtganxh7sYqe0CKFpnoRzZEKZJckE7QpOIN9+cPXswXolsnj5rqvUmx3bfJoeSlL0so0VUzw+XQ13fEPTz6gc4NqA25bL1n2mR+68+kyMbHlXLRfSbC9eM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432632; c=relaxed/simple; bh=9VC1o23EyPnmCsIUXN13mbYo4nMy/PcXMeGVi57HKHs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XTSVuIyrwKuS6JKiOeHXJZmgd24ibc9BmE16fBdwZJI5excavu/ptjsABKELGTUpIUvtxQ5Da531ruBavhYtSySHfvKWvUZszvy8/fFla8JSgLqZW5PjD+0/a7ji/6D3cUpRHekg/uRPiQVs/dJ+TqpvodTRbvSmLHC/pwUR4gs= 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=tnDEs5JU; arc=none smtp.client-ip=209.85.210.202 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="tnDEs5JU" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-70afe95d6d5so1359057b3a.0 for ; Fri, 19 Jul 2024 16:43:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432631; x=1722037431; 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=Q7GRI70QT0vlqusEkjG3FXqYLsYvXxnP78B7joN4qu0=; b=tnDEs5JUoUeVqdoRJ3e7W7T52bF8N2/akckMsHyJxH7BFU1lEzMUshe7a10LxqK7Tf QmX2E0hO5xWXxFulBIKQUYgQeKX64Rwc+Vr+29u5haOWiInkx2QrLyAhnsCGlaX/4JZn krCCg+VCOPM9vjqAwl2yL0b7KeIFVrkaE6szpbz+9Q72nhOlvPcEuJHlb0r3wk6ZCPW4 IGjnc0mSgT14I0ziv81jLfYQ8U7XAsfzTmA31LZQze6M1CFpaNjKNaQ/Hgu4ARI6XEvv Tsi9HDDajwn9O/IYOo1QMnE3AoVWxpekWfIKd52p+rnRj50LYhndx+gBgG0T5RZzpTSV 111g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432631; x=1722037431; 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=Q7GRI70QT0vlqusEkjG3FXqYLsYvXxnP78B7joN4qu0=; b=wE51FGbztyqa8eK7sl731P7EQ1D6zoXrLoCZX0+j+Y6Q3QdwoGPxSRNOp3PgukmeD7 bIRH/5vzHhrje6X7TBJbrpcMzCG53/euK7Pwjf27iHj4CsROJebnTDz9FbYQNNY7pKj7 zHTU+WKQ4g68yEaLvlQ/rkF0GkDl0R/8UY3tNePiEUNowgCgxj0HxTNRm8hG08741St5 ASbc3rAvNh+hMJpTRUvgbhGxjsKR4axVxoIwE/DdckkohqT8/0xBSwTEXUJZBxduSxGB UG6p6KE3BE9ldYA8Aw7sPIVXWl751iRmqPbGyUvlhgzllIl7/gp+kxhiz9CCVzXcn0gk srng== X-Forwarded-Encrypted: i=1; AJvYcCX0aWURl92BBZEWoIW7F+JH6zmuo7it8ZCf/S7N7pxVZFwYqhM89ls6XJQBg/aOjVM4EutSOKu+T7DhLMdZ6Cw/ekQf3YDavRkgBc2e X-Gm-Message-State: AOJu0YxR+xQKdeLS1Sy5Df1aJiDipFipb5MijdmJdJs0PaEOKWcH2J/U zG6lMFIM7iWDgvCNG+FsGiyR+VzbPIWRHZzM6r6nnOoHyxxBqf1CLv42XK3cAmnMP4BMsiRsak7 pJg== X-Google-Smtp-Source: AGHT+IEiuM3Z91qDjQNlWIAL1YtO0VXEuZifNLzsyyzV/85gD4e0QNR3MJvKRnBVzqGPUl26Tn7sPfzVK4g= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:3991:b0:706:71b3:d7cf with SMTP id d2e1a72fcca58-70d0845c0d5mr6033b3a.0.1721432630110; Fri, 19 Jul 2024 16:43:50 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:38 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-2-seanjc@google.com> Subject: [PATCH 1/8] KVM: x86: Enforce x2APIC's must-be-zero reserved ICR bits From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Inject a #GP on a WRMSR(ICR) that attempts to set any reserved bits that are must-be-zero on both Intel and AMD, i.e. any reserved bits other than the BUSY bit, which Intel ignores and basically says is undefined. KVM's xapic_state_test selftest has been fudging the bug since commit 4b88b1a518b3 ("KVM: selftests: Enhance handling WRMSR ICR register in x2APIC mode"), which essentially removed the testcase instead of fixing the bug. WARN if the nodecode path triggers a #GP, as the CPU is supposed to check reserved bits for ICR when it's partially virtualized. Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson --- arch/x86/kvm/lapic.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index a7172ba59ad2..35c4567567a2 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -2472,7 +2472,7 @@ void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u= 32 offset) * maybe-unecessary write, and both are in the noise anyways. */ if (apic_x2apic_mode(apic) && offset =3D=3D APIC_ICR) - kvm_x2apic_icr_write(apic, kvm_lapic_get_reg64(apic, APIC_ICR)); + WARN_ON_ONCE(kvm_x2apic_icr_write(apic, kvm_lapic_get_reg64(apic, APIC_I= CR))); else kvm_lapic_reg_write(apic, offset, kvm_lapic_get_reg(apic, offset)); } @@ -3186,8 +3186,21 @@ int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, = gpa_t vapic_addr) return 0; } =20 +#define X2APIC_ICR_RESERVED_BITS (GENMASK_ULL(31, 20) | GENMASK_ULL(17, 16= ) | BIT(13)) + int kvm_x2apic_icr_write(struct kvm_lapic *apic, u64 data) { + if (data & X2APIC_ICR_RESERVED_BITS) + return 1; + + /* + * The BUSY bit is reserved on both Intel and AMD in x2APIC mode, but + * only AMD requires it to be zero, Intel essentially just ignores the + * bit. And if IPI virtualization (Intel) or x2AVIC (AMD) is enabled, + * the CPU performs the reserved bits checks, i.e. the underlying CPU + * behavior will "win". Arbitrarily clear the BUSY bit, as there is no + * sane way to provide consistent behavior with respect to hardware. + */ data &=3D ~APIC_ICR_BUSY; =20 kvm_apic_send_ipi(apic, (u32)data, (u32)(data >> 32)); --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (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 517691494D6 for ; Fri, 19 Jul 2024 23:43:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432634; cv=none; b=W0HPsn2z5RI3Lb0NQPpSKsPgQwg0EPJLqihlNkgabEx6tLETcmFIl9EBZ2JKO5GrifDJe34gWe2onBdradKDRVpjslwq9EIrjRayjISmoKqWLStF5CjROoxp2W8i4EJYnVmISZ8RnMoYcQaqPNn7KxlW5TwhHMX08ennK+qvuHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432634; c=relaxed/simple; bh=Z1cH1V9K2pPOjjICaFF7xPr76fow0RyXynIXQuiRywA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tAvBG54vgguRl1VCzXnxzvlPnfQTL0Y5ww7xmBUJ0YV6JyhZigumxKG0gMIZQ5mx/2x6E7wxwZ1+sUTEj7wk77cEs6vhCi3KXcQ0XnlmJ+70ar0EAagH2jK5TAC4WCU8BmccDKzXbQj2qeC1MJBuPBZPmD6KALUxMhYn7VqFSf0= 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=TPPHYkBy; arc=none smtp.client-ip=209.85.210.202 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="TPPHYkBy" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-70b0e67e335so1121092b3a.2 for ; Fri, 19 Jul 2024 16:43:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432633; x=1722037433; 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=RdVO46PMlcBgI+ne7j7UwSAA4lN1OIh/NoMWcCiQ7DM=; b=TPPHYkBy3TiUELDRlwMuEx+qBxW/BuO8KYkUDyHRSf5MRNaGhFPDHXmDgsmVwaNDIJ h03JcUYfpPEroZmy0kWXwF2IhAvoCKaKYp1tatz34XiYTzXqudOIWGVsqlgOH1BOJMHP DRV19vp/2yVwlm5/dOIMoynZG9OGr8jYTLrjEvOcGsKb7nGIVzrjUpF0Nlg9g8AX3IKh LPT/cWKLZHsPOa7cV3sTWdOv+zjK6GyAmce0HRb0FbGNyZTycFsqSAYdJeFgy1k8cTK8 TzrICGeUx3icxZ6SBMFaYOx2/VTKm+aKWaBbCWL7EO/3/cjusTZrV0cB7XMxqgurea7e wu9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432633; x=1722037433; 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=RdVO46PMlcBgI+ne7j7UwSAA4lN1OIh/NoMWcCiQ7DM=; b=dUrbsZAPW8bWLeZMtnpidW7wVZHUoGFXdEq7b/H/WsB0E8UBluY7J83lglaRYW4ArX Y+UGu3KlDTXM8XMCcdfg9Wuw4yjcA6lJfG7d+xttipzviHqKsSh3iIpKAM9/Ye7nbXCz MihSUk8vfH8hSENkg4HVZet/qFqXCn/1PupP5vvxXq53Juk15lwyl3eUDrKTe/G8hjQ0 q1u/E5LsflOZ9IYsiQtZvnj43BfnxjB8N3QTbzBIidoJBOME3X8eMu0XXD9sDOzvnmjz H8EN+fijmDnvSGfgHsUgl78D35cj3Xy0eStnlNjAvmarNKTNexH9KJP1XHDJXdRkx3NA h9cg== X-Forwarded-Encrypted: i=1; AJvYcCXOToHB2JNSnrh0OX0t/P2gdX9N6Oqn4n5hQiSkJQ1FHia2Cc5MWcrveLj1uXilrabfAJoxdy+4+eZXyYFJPMY80nGLHLmK0JCAhJR0 X-Gm-Message-State: AOJu0YyvdBE9o/17IyHF5y93AqXl/MsKKsvaVdv+3P3j1RZpfd5vIVKu yscZx6jzb9FX2DiKDxoeK0RxZpbkPO0DeHAE4qY1Q+wiu4sf9zcvL0BQJ9WbfKISFeVxYTQRns6 Obw== X-Google-Smtp-Source: AGHT+IGrqTi7r+bD33iXiOlKe24I4fRBWbe1ifwKtqgnwHLxRGmTs+zh59kEsCtnf3DhIB+XwN5wBZPlmi0= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:aa7:87d8:0:b0:70a:ffc2:ba with SMTP id d2e1a72fcca58-70d0845b84dmr4399b3a.0.1721432632396; Fri, 19 Jul 2024 16:43:52 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:39 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-3-seanjc@google.com> Subject: [PATCH 2/8] KVM: x86: Move x2APIC ICR helper above kvm_apic_write_nodecode() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hoist kvm_x2apic_icr_write() above kvm_apic_write_nodecode() so that a local helper to _read_ the x2APIC ICR can be added and used in the nodecode path without needing a forward declaration. No functional change intended. Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson --- arch/x86/kvm/lapic.c | 46 ++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 35c4567567a2..d14ef485b0bd 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -2455,6 +2455,29 @@ void kvm_lapic_set_eoi(struct kvm_vcpu *vcpu) } EXPORT_SYMBOL_GPL(kvm_lapic_set_eoi); =20 +#define X2APIC_ICR_RESERVED_BITS (GENMASK_ULL(31, 20) | GENMASK_ULL(17, 16= ) | BIT(13)) + +int kvm_x2apic_icr_write(struct kvm_lapic *apic, u64 data) +{ + if (data & X2APIC_ICR_RESERVED_BITS) + return 1; + + /* + * The BUSY bit is reserved on both Intel and AMD in x2APIC mode, but + * only AMD requires it to be zero, Intel essentially just ignores the + * bit. And if IPI virtualization (Intel) or x2AVIC (AMD) is enabled, + * the CPU performs the reserved bits checks, i.e. the underlying CPU + * behavior will "win". Arbitrarily clear the BUSY bit, as there is no + * sane way to provide consistent behavior with respect to hardware. + */ + data &=3D ~APIC_ICR_BUSY; + + kvm_apic_send_ipi(apic, (u32)data, (u32)(data >> 32)); + kvm_lapic_set_reg64(apic, APIC_ICR, data); + trace_kvm_apic_write(APIC_ICR, data); + return 0; +} + /* emulate APIC access in a trap manner */ void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u32 offset) { @@ -3186,29 +3209,6 @@ int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, = gpa_t vapic_addr) return 0; } =20 -#define X2APIC_ICR_RESERVED_BITS (GENMASK_ULL(31, 20) | GENMASK_ULL(17, 16= ) | BIT(13)) - -int kvm_x2apic_icr_write(struct kvm_lapic *apic, u64 data) -{ - if (data & X2APIC_ICR_RESERVED_BITS) - return 1; - - /* - * The BUSY bit is reserved on both Intel and AMD in x2APIC mode, but - * only AMD requires it to be zero, Intel essentially just ignores the - * bit. And if IPI virtualization (Intel) or x2AVIC (AMD) is enabled, - * the CPU performs the reserved bits checks, i.e. the underlying CPU - * behavior will "win". Arbitrarily clear the BUSY bit, as there is no - * sane way to provide consistent behavior with respect to hardware. - */ - data &=3D ~APIC_ICR_BUSY; - - kvm_apic_send_ipi(apic, (u32)data, (u32)(data >> 32)); - kvm_lapic_set_reg64(apic, APIC_ICR, data); - trace_kvm_apic_write(APIC_ICR, data); - return 0; -} - static int kvm_lapic_msr_read(struct kvm_lapic *apic, u32 reg, u64 *data) { u32 low; --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 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 3864D149C64 for ; Fri, 19 Jul 2024 23:43:55 +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=1721432636; cv=none; b=STdLXUT7LLmeRilHmDSVpLRzel7Ik3pM6ZIQfbdgU6WLzIb35F7dJOQXteqCuyjoSBKq2jlBh1rLkzKbqvrrIeJqIaHl30L6CgI3Os6yCpw3n8W3nrZh9O46LeJr+cKNnnI51kLCoBIvOPrpptiOxNXCdHGatqkD29XawYyrvKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432636; c=relaxed/simple; bh=r48XGddCN80zIaPaynZ1yaj/hfmpfp63eVWhm7RV+0o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=bgg4bLAu03C/pLOUt+cKInDtIWkZgS1UGoghlNYAPwe/veZpUFhcP1DR9lUgCZFocBVCHI+nO/gFKkSh2pupvOGNw4fJgC8qoqF1eEmHNqpmbMOOYzgzx8kVmF3q0NA1RE5J1xg7TUET6DQtRgUzg9z6cgK3Z3riXj5JkOU7bJI= 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=WWB0WDFu; 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="WWB0WDFu" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-1fc60ef3076so20865285ad.1 for ; Fri, 19 Jul 2024 16:43:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432634; x=1722037434; 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=x8igdTZgEeKKRURdE5Y+BIgiNYRFx6FmETZmL9mL1H0=; b=WWB0WDFu/9NtJG3zC2CirGtv825hVJZS0vzaQUEyJSO12S2N9LzwuBaJpSO61fxnxD 3f7q1NZkLo99LUsyXFe5Ph5ZewJx/9EaAI24BKCA2V7KfUXMdGJDY6HYpQc1pgCwPmXr J6rMAycphwPWV7hkbu04bSgT7L4bXjsigiPFZ+oEwn2jBpplBOj0dwthLMHnp6bVLXwq 9wLCYDGKSmd11PnDTEMw7NMPI7gtJDj58Xe+Pnc65X9RA4EA7jFqfyfMWLH4u7w0Cw7B iEG4D1eaMx+WPgrH9s5q+4NWlCKRAZ9Gu/SA3RxGXmeXoTCc1gyF4z0EiHwKdssA+ZP2 nepA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432634; x=1722037434; 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=x8igdTZgEeKKRURdE5Y+BIgiNYRFx6FmETZmL9mL1H0=; b=cMYX/p7gOPzvKqnBy3wIZk73NX22+/faIzGGLbKpbJjkccL4W42pTg3O1chGta5Svd gDS0jmXdUiitHhQMGWBPHgVwmdXoM5wH/ywPU2opOW9Or8rbh38mj7+np2g8mFOnu4/g AHFvWozUbf6Gla36xfD+S2zko1cNcAdcoC/WrPbSKTfocAYH8B16QynKPvAF3uFBS0Aq aXxJL6dyxHc6v1wT5Xic7LF3z5Ai4JAQ9DyvlIZH8kkDeGCXNjY+bocnZd/DX5qT9DAM kUSnC9ssbeWsuwamLtiTTjvJ7LVKfwhgmgokesPqeeq6/9C3kDlEmDmkE7zji3VbpjpC ANXg== X-Forwarded-Encrypted: i=1; AJvYcCUmCjqVOGQvYN1WQ6mRmc+FFPSaO2Sb8c3h6xePR1POP9vGsEDnvFqnY/Ps268E5ByMboySMTLT6OuvcNd7zErpqXiqeYxgRwqZCkj7 X-Gm-Message-State: AOJu0YwcsOBaSuMQeibXMWdOa9+E41z2nodKGrEREIFZWyG9lkVF9e9E +iCopfSoLIoCN3nB2cU7cG1VYJ0GPElypRu/Nt8QYPb5O9Of6f3b5CMDODNZUcEb/B5O0DYAuk/ TYA== X-Google-Smtp-Source: AGHT+IGaaLuLfDMyX2Ck/Rh10pNVbyLR+y67SoJ0fL3JQMAp89Fz1Hzg3nnGOd+xkFsesKHNd/kOpG2I7nY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:c404:b0:1fb:56c8:f273 with SMTP id d9443c01a7336-1fd74534000mr872005ad.1.1721432634374; Fri, 19 Jul 2024 16:43:54 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:40 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-4-seanjc@google.com> Subject: [PATCH 3/8] KVM: x86: Re-split x2APIC ICR into ICR+ICR2 for AMD (x2AVIC) From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Re-introduce the "split" x2APIC ICR storage that KVM used prior to Intel's IPI virtualization support, but only for AMD. While not stated anywhere in the APM, despite stating the ICR is a single 64-bit register, AMD CPUs store the 64-bit ICR as two separate 32-bit values in ICR and ICR2. When IPI virtualization (IPIv on Intel, all AVIC flavors on AMD) is enabled, KVM needs to match CPU behavior as some ICR ICR writes will be handled by the CPU, not by KVM. Add a kvm_x86_ops knob to control the underlying format used by the CPU to store the x2APIC ICR, and tune it to AMD vs. Intel regardless of whether or not x2AVIC is enabled. If KVM is handling all ICR writes, the storage format for x2APIC mode doesn't matter, and having the behavior follow AMD versus Intel will provide better test coverage and ease debugging. Fixes: 4d1d7942e36a ("KVM: SVM: Introduce logic to (de)activate x2AVIC mode= ") Cc: stable@vger.kernel.org Cc: Maxim Levitsky Cc: Suravee Suthikulpanit Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/kvm/lapic.c | 42 +++++++++++++++++++++++---------- arch/x86/kvm/svm/svm.c | 2 ++ arch/x86/kvm/vmx/main.c | 2 ++ 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_hos= t.h index 950a03e0181e..edc235521434 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1726,6 +1726,8 @@ struct kvm_x86_ops { void (*enable_nmi_window)(struct kvm_vcpu *vcpu); void (*enable_irq_window)(struct kvm_vcpu *vcpu); void (*update_cr8_intercept)(struct kvm_vcpu *vcpu, int tpr, int irr); + + const bool x2apic_icr_is_split; const unsigned long required_apicv_inhibits; bool allow_apicv_in_x2apic_without_x2apic_virtualization; void (*refresh_apicv_exec_ctrl)(struct kvm_vcpu *vcpu); diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index d14ef485b0bd..cc0a1008fae4 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -2473,11 +2473,25 @@ int kvm_x2apic_icr_write(struct kvm_lapic *apic, u6= 4 data) data &=3D ~APIC_ICR_BUSY; =20 kvm_apic_send_ipi(apic, (u32)data, (u32)(data >> 32)); - kvm_lapic_set_reg64(apic, APIC_ICR, data); + if (kvm_x86_ops.x2apic_icr_is_split) { + kvm_lapic_set_reg(apic, APIC_ICR, data); + kvm_lapic_set_reg(apic, APIC_ICR2, data >> 32); + } else { + kvm_lapic_set_reg64(apic, APIC_ICR, data); + } trace_kvm_apic_write(APIC_ICR, data); return 0; } =20 +static u64 kvm_x2apic_icr_read(struct kvm_lapic *apic) +{ + if (kvm_x86_ops.x2apic_icr_is_split) + return (u64)kvm_lapic_get_reg(apic, APIC_ICR) | + (u64)kvm_lapic_get_reg(apic, APIC_ICR2) << 32; + + return kvm_lapic_get_reg64(apic, APIC_ICR); +} + /* emulate APIC access in a trap manner */ void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u32 offset) { @@ -2495,7 +2509,7 @@ void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u= 32 offset) * maybe-unecessary write, and both are in the noise anyways. */ if (apic_x2apic_mode(apic) && offset =3D=3D APIC_ICR) - WARN_ON_ONCE(kvm_x2apic_icr_write(apic, kvm_lapic_get_reg64(apic, APIC_I= CR))); + WARN_ON_ONCE(kvm_x2apic_icr_write(apic, kvm_x2apic_icr_read(apic))); else kvm_lapic_reg_write(apic, offset, kvm_lapic_get_reg(apic, offset)); } @@ -3005,18 +3019,22 @@ static int kvm_apic_state_fixup(struct kvm_vcpu *vc= pu, =20 /* * In x2APIC mode, the LDR is fixed and based on the id. And - * ICR is internally a single 64-bit register, but needs to be - * split to ICR+ICR2 in userspace for backwards compatibility. + * if the ICR is _not_ split, ICR is internally a single 64-bit + * register, but needs to be split to ICR+ICR2 in userspace for + * backwards compatibility. */ - if (set) { + if (set) *ldr =3D kvm_apic_calc_x2apic_ldr(*id); =20 - icr =3D __kvm_lapic_get_reg(s->regs, APIC_ICR) | - (u64)__kvm_lapic_get_reg(s->regs, APIC_ICR2) << 32; - __kvm_lapic_set_reg64(s->regs, APIC_ICR, icr); - } else { - icr =3D __kvm_lapic_get_reg64(s->regs, APIC_ICR); - __kvm_lapic_set_reg(s->regs, APIC_ICR2, icr >> 32); + if (!kvm_x86_ops.x2apic_icr_is_split) { + if (set) { + icr =3D __kvm_lapic_get_reg(s->regs, APIC_ICR) | + (u64)__kvm_lapic_get_reg(s->regs, APIC_ICR2) << 32; + __kvm_lapic_set_reg64(s->regs, APIC_ICR, icr); + } else { + icr =3D __kvm_lapic_get_reg64(s->regs, APIC_ICR); + __kvm_lapic_set_reg(s->regs, APIC_ICR2, icr >> 32); + } } } =20 @@ -3214,7 +3232,7 @@ static int kvm_lapic_msr_read(struct kvm_lapic *apic,= u32 reg, u64 *data) u32 low; =20 if (reg =3D=3D APIC_ICR) { - *data =3D kvm_lapic_get_reg64(apic, APIC_ICR); + *data =3D kvm_x2apic_icr_read(apic); return 0; } =20 diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index c115d26844f7..04c113386de6 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -5049,6 +5049,8 @@ static struct kvm_x86_ops svm_x86_ops __initdata =3D { .enable_nmi_window =3D svm_enable_nmi_window, .enable_irq_window =3D svm_enable_irq_window, .update_cr8_intercept =3D svm_update_cr8_intercept, + + .x2apic_icr_is_split =3D true, .set_virtual_apic_mode =3D avic_refresh_virtual_apic_mode, .refresh_apicv_exec_ctrl =3D avic_refresh_apicv_exec_ctrl, .apicv_post_state_restore =3D avic_apicv_post_state_restore, diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c index 0bf35ebe8a1b..a70699665e11 100644 --- a/arch/x86/kvm/vmx/main.c +++ b/arch/x86/kvm/vmx/main.c @@ -89,6 +89,8 @@ struct kvm_x86_ops vt_x86_ops __initdata =3D { .enable_nmi_window =3D vmx_enable_nmi_window, .enable_irq_window =3D vmx_enable_irq_window, .update_cr8_intercept =3D vmx_update_cr8_intercept, + + .x2apic_icr_is_split =3D false, .set_virtual_apic_mode =3D vmx_set_virtual_apic_mode, .set_apic_access_page_addr =3D vmx_set_apic_access_page_addr, .refresh_apicv_exec_ctrl =3D vmx_refresh_apicv_exec_ctrl, --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (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 71327149E0C for ; Fri, 19 Jul 2024 23:43:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432638; cv=none; b=g4LWJvuKosX9RejXTomrdQmmxTZpi4pTwqTPDOhzNK9hhIH4NloJTZ7JwrJaAg2eNu5EoK/0/JNV15jFQbiwxfOGN9l8E+M9RCCRBV2ZLAAGuehYsS5LhibBKL/M/O07igLcuYTM/ksqkzHqSSSU26nWl2FamCnvg76zrZNPjHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432638; c=relaxed/simple; bh=L5K4LhEvErOvub+DyS3BuApRHh5XgLwLfLGmErCpdIg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tEl9KTdfstdDjoz0QSKHy0SpS5uNJglH7j5AgFgKCSncaRWIDt5Adg0EytwsldwLAXj6e8Udj7WUgUHX75SnzLCaXCvzIM0qB3yKt/mikDMWSRmeY4ANejmMH7i/wV9CTfPa2w1W7npnJkgp09DzAHDMS+uyTrtV0+sqhA1ouxQ= 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=cKRfBVO9; arc=none smtp.client-ip=209.85.128.202 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="cKRfBVO9" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-664b7a67ad4so63644857b3.2 for ; Fri, 19 Jul 2024 16:43:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432636; x=1722037436; 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=szsmqea3Ly+/pHf0iLcDxQ8R3kri7Zn2BloJwbPXzbQ=; b=cKRfBVO9uW3KH4IWeqnJv1Q6J/rkUKH7lgTsQiOSqXHvbkCSXQGD4g0fwOwKT05jeU YBUO2xk1cEPW+ulo5QCgatStBgQkw5CqJUeoch4ZP0PWgohQ5VpFxpmvngbFOW6w8Aol O44pfnUI7xAu5LJ39PI3M1QdiKVA63wMUd2HvedKjR2evyQOKGA9ubfY2p+NSPnrpyvw v552avnLc7skp2ON9z/Qb0HWEw5XE+y/cK/FbMpWf5L2N7TPOP4xCfI0btsEuNu2MGZs bIMrXgOQ2tKd1hk2Aux213mMT7eI1Ce5K9vW19CarrzOrsR165jBBZnKT/tVMCfCyITT awPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432636; x=1722037436; 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=szsmqea3Ly+/pHf0iLcDxQ8R3kri7Zn2BloJwbPXzbQ=; b=qyJqzhPBAtrMwkQfPUZTdtto/an79l17BWmcxoL7kXqVTyb2b6B1gF/arqL884NDen VOs3XPaAPOpnQr5NvW8EMAA/xwsI9Q3MdZ5nLVHxEFEsFxlA6HezsNH/AtrJN01jxTFR qJlPysCpmaj6xPBOIvs3FCbtC/588XePq25bQDTnMR7e5PINdDrvigRwXbqxAaF+B3tm hG8T8duNyrB5mhfUElD3q51QrIaIrbIAAlbVwnK4eed1d0DMD2ucKskzpi8yY+omknwb HpKuYPuzhWNH+af+K0/hpcD9E4MPZm+24493885rIqPJOgc9A7Zf+2+8keekva67Vt6v iNsA== X-Forwarded-Encrypted: i=1; AJvYcCVZbpNQ3jl8milinm5mhc7JFZYOHMTfGCCnhbf7frChmHiEEy7QwSxsnXsxOgBfAoTLc2SFc04MUxOXM3fnZmD0MgeVYyrtlgcCl6za X-Gm-Message-State: AOJu0Yy7vhtc0dXo/2q/y6kNQD3TyePYGwNRKs0lMDyk/JLDjTHG6wqx ris3kqSbTZLDxRU+reSU+6+KYno7HsYUhloob66ld22hGrfte0F2jomHKydeBuezWv603ZvB9UP Ztw== X-Google-Smtp-Source: AGHT+IHyklNc/kciJMRQw56X5UOMRuQVOpb5WnfAPHuAp+SM9Knp643EKgohR9My7VTvqkjf450OIUMnKJ0= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:804e:0:b0:e03:53a4:1a7 with SMTP id 3f1490d57ef6-e087046cademr8377276.10.1721432636436; Fri, 19 Jul 2024 16:43:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:41 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-5-seanjc@google.com> Subject: [PATCH 4/8] KVM: selftests: Open code vcpu_run() equivalent in guest_printf test From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Open code a version of vcpu_run() in the guest_printf test in anticipation of adding UCALL_ABORT handling to _vcpu_run(). The guest_printf test intentionally generates asserts to verify the output, and thus needs to bypass common assert handling. Open code a helper in the guest_printf test, as it's not expected that any other test would want to skip _only_ the UCALL_ABORT handling. Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/guest_print_test.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_print_test.c b/tools/testing= /selftests/kvm/guest_print_test.c index 8092c2d0f5d6..bcf582852db9 100644 --- a/tools/testing/selftests/kvm/guest_print_test.c +++ b/tools/testing/selftests/kvm/guest_print_test.c @@ -107,6 +107,21 @@ static void ucall_abort(const char *assert_msg, const = char *expected_assert_msg) expected_assert_msg, &assert_msg[offset]); } =20 +/* + * Open code vcpu_run(), sans the UCALL_ABORT handling, so that intentional + * guest asserts guest can be verified instead of being reported as failur= es. + */ +static void do_vcpu_run(struct kvm_vcpu *vcpu) +{ + int r; + + do { + r =3D __vcpu_run(vcpu); + } while (r =3D=3D -1 && errno =3D=3D EINTR); + + TEST_ASSERT(!r, KVM_IOCTL_ERROR(KVM_RUN, r)); +} + static void run_test(struct kvm_vcpu *vcpu, const char *expected_printf, const char *expected_assert) { @@ -114,7 +129,7 @@ static void run_test(struct kvm_vcpu *vcpu, const char = *expected_printf, struct ucall uc; =20 while (1) { - vcpu_run(vcpu); + do_vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D UCALL_EXIT_REASON, "Unexpected exit reason: %u (%s),", @@ -159,7 +174,7 @@ static void test_limits(void) =20 vm =3D vm_create_with_one_vcpu(&vcpu, guest_code_limits); run =3D vcpu->run; - vcpu_run(vcpu); + do_vcpu_run(vcpu); =20 TEST_ASSERT(run->exit_reason =3D=3D UCALL_EXIT_REASON, "Unexpected exit reason: %u (%s),", --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 F3C79148844 for ; Fri, 19 Jul 2024 23:43:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432640; cv=none; b=CqOzYNFsdaqYjXeK3D013/myZhk/Wtc3qTuA/ql1e4dLdv0tO018ufuKFea9Ep3QSCkezaGuZewmmWaOhA9YODCpqZO7W0ZCQnkgnQON0gx7no/QUX6SlM3g4yqIZMmEBSoZdjrBQepR6MqpY9Xc6PVuZ8j4H04Nl3eJ1fREfug= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432640; c=relaxed/simple; bh=PPn7G+f4jddXFxEDGFar00uqs+OIt5lJ4PTBlh2FQQA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TB139tiwqSKbNXG1McyzxmWrPngLI+K7e49zDpcjSQyVFP7V0Elob/qE+EGfV8SXCbQqeG94e5QaixmIUB6LYRWBoqAGjCe9uhS3iQHhdZyj12SqwmFZTsoH11CTyLFeFv5LcWeVpHQUMvZvbGmfsRTLFZReJmdX/VcACWCAyG8= 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=3Vq3fpFf; arc=none smtp.client-ip=209.85.210.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="3Vq3fpFf" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-70af548db1eso1540557b3a.0 for ; Fri, 19 Jul 2024 16:43:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432638; x=1722037438; 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=nPt/EFV+Nq2FbP/DjJ0bFlMBOKC3xPMXdgZnshJlA9c=; b=3Vq3fpFfznOlU1PmOXKDg2z39TyQyHZf9wYfhsx1zuLWJcaUMGN33VlX40g+DSYnnc wul05y62UHZoao/I1r6FAIBNtEDOQAABOrq1+djwvsWpE8kSU55ZL+NaDZxV3k+HZh0U MabqoUJLcTZ0WskElfDW5SlrJ07bkVVSJxMiOxPHmMRTqizMjQs4Y7T/Ej++VKOp7aVB IkJyGJNY1PCtKTHkRKkC+jAa+3/JY3EBVSBVFdIQDzgoqKh2x2g1wl2iSa4+qJIOdKkK Kgqb7Fd2YZM1XX/ePz6Wcbl8bokbGLJd18u7c40jcDyei6Uk6NwAyTZL7oPouTBREXRN +1Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432638; x=1722037438; 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=nPt/EFV+Nq2FbP/DjJ0bFlMBOKC3xPMXdgZnshJlA9c=; b=xAbfrCIYhRprB6pPq2gxvnSSUdl0umhwjNPOXsC5B2AXrotYT0Alnm9R3wXzqfGWRp DM7Qfiih0XdXIMMRB0Er6x6827iDCXS19EAR4sM9zqZCfsfpeK6mWvLy136RCDXPFvjs fxCFxbfG1BRHV9sKG68nkY97RBLSVAl3ZLHIw2jx2NI7r3FGjY0QoC3MfOMoJuYGpVpa 5RCNzl7TiyZDLsKeKA/6GpazpV3gsCVtZc28GwjaeMvhqWtUFD3eOwsuoGh78/InhgKR v0q5jAhVkPP4K4w/9/nUBqlpJNSf3A/432nu8TfCuD48FqSAhYrCrq14nVgQB1l1xlq9 JAAA== X-Forwarded-Encrypted: i=1; AJvYcCXFK+j+Is4gYJUZrtwds688fVHWsT5VaIozvmlC862mdvsnzX/l5Im8Z7/zdlK4AcRNQsPBulsycYOyBUYWEACf+MuFSzeIH4DApQbm X-Gm-Message-State: AOJu0Yxy89/rvIEnl1+32J4MTwwqUll+G+yMJePCoTNEoJBAouiIO1Nx DRve9IIPlWOQsdXgt5iq3vj7UAQSrJXvToQyTk/qaqP4cPaL2vJn2xnvg1/B8SIhjjInfCgmTcA oeg== X-Google-Smtp-Source: AGHT+IH0kpH/UFJ9YnQJ29R7jW5YI6r3QaHGi0uazNzGckCKBUeuNmJ/e1teSmk32abSP1lzY/T/0UsK7vk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1314:b0:706:3433:bf21 with SMTP id d2e1a72fcca58-70cfd58f8f9mr47559b3a.3.1721432638145; Fri, 19 Jul 2024 16:43:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:42 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-6-seanjc@google.com> Subject: [PATCH 5/8] KVM: selftests: Report unhandled exceptions on x86 as regular guest asserts From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that selftests support printf() in the guest, report unexpected exceptions via the regular assertion framework. Exceptions were special cased purely to provide a better error message. Convert only x86 for now, as it's low-hanging fruit (already formats the assertion in the guest), and converting x86 will allow adding asserts in x86 library code without needing to update multiple tests. Once all other architectures are converted, this will allow moving the reporting to common code, which will in turn allow adding asserts in common library code, and will also allow removing UCALL_UNHANDLED. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/lib/x86_64/processor.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/tes= ting/selftests/kvm/lib/x86_64/processor.c index 153739f2e201..814a604c0891 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -566,10 +566,8 @@ void route_exception(struct ex_regs *regs) if (kvm_fixup_exception(regs)) return; =20 - ucall_assert(UCALL_UNHANDLED, - "Unhandled exception in guest", __FILE__, __LINE__, - "Unhandled exception '0x%lx' at guest RIP '0x%lx'", - regs->vector, regs->rip); + GUEST_FAIL("Unhandled exception '0x%lx' at guest RIP '0x%lx'", + regs->vector, regs->rip); } =20 static void vm_init_descriptor_tables(struct kvm_vm *vm) @@ -611,7 +609,7 @@ void assert_on_unhandled_exception(struct kvm_vcpu *vcp= u) { struct ucall uc; =20 - if (get_ucall(vcpu, &uc) =3D=3D UCALL_UNHANDLED) + if (get_ucall(vcpu, &uc) =3D=3D UCALL_ABORT) REPORT_GUEST_ASSERT(uc); } =20 --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 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 E26D714A4D6 for ; Fri, 19 Jul 2024 23:44:00 +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=1721432642; cv=none; b=MOoTOL6ptfPoBFlL23AEEAxhDod8IE5YGFGmj2RHdimMvEBiQEvw1PhuC2fs8GVOSjsrZCBY8QTpUZJbWibsCm95NiXuDzL9iquUroHJ92oTLp1+aLMGIxDN3he0bEa6N+ztBXCyxfy+DF3vNCZxkiiiagUJykZVf8nBAk8Sy+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432642; c=relaxed/simple; bh=avuIVrOvbdJuGswu1VBc5QXgq1mmaRUWopHFZ+/wLdQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JFDYc0krRXaPtzusteiNa49xIkz4vokZHM9yTIg523vDx/LaAwI+DuChUiu/nfTpJrT/ccKTmHJGQZRpQrMTg2Kp1Vy5nICqb0YKRrpm87CsaAHnQuXrUMomlztYMCs5nUddP+LKSaHEv/Pz+zgK46Yr5eSOKX/NmhjOD1/0caI= 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=0r3601bv; 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="0r3601bv" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2cb4bcdd996so1818460a91.1 for ; Fri, 19 Jul 2024 16:44:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432640; x=1722037440; 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=vV3aMaVHf7C/0akufsxFVZJRmuCa+4Ea2SM/3XMiVaU=; b=0r3601bvHPZl17MhLs39ASHfYqDDVZLF/ZdoHoubWqtS08h5jfdX3wo6h4JvqIGu0J tYIe8VuuYIr8sgplw+OSabkUbgzNxEIIwY6LXA3uzUyBgnTPL29CoKfMHewytkSl9/Fx OBCJvXZNXggsMqp/Z0+cfUiQ592ek+H0v5pNnAdkFOER2YjnNTOpnZ+bMyl4KVCH8oak qJ2RcM5VLMOInvxks/wg/2rvKU1dUyJyxbkdBl8mHESEbjtI3qvjMpnyR6QePVGywUCX 1tcWhBlbps4P26N9sqTtmwr0V785nb8yqDaIWRCuicYB3DSkR3148sZNdT0+u/T/8A6e gEng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432640; x=1722037440; 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=vV3aMaVHf7C/0akufsxFVZJRmuCa+4Ea2SM/3XMiVaU=; b=CfZNaKKCasKUPCGNjhSAhgRnUqHFj6FuFYg8LyGJh7rDWtwDnrtfShZ9niySDgO/Ud 3RIE0bL2P7n/gTezop/2K7I8sAGoCiwcSZecqGgX15Q+162No8iQybyTi/yhOAFGCoRu V3InsKaorlcu5rx8cBzL/nnSRa0qfaUdMmwIy7IDahuFqXh4LRQ6g0MXrWPEiPPOhhX4 tERufUS+rSmyYg+pLP/QCWE1y9EqcRTqAO3F3oukNLkoy80d1PlEEAV4GfKFddr5vrBd Lk3xzEinBC3/1m+AIHkrKDJNj4E3XHM8aChN6GvEW3E8HNRfY3P7w+Z6Uhv3wTdXHrdw Z/Dw== X-Forwarded-Encrypted: i=1; AJvYcCUn25BEZ8U/788FY6bptICtfcwBf1gLfxZQZl8/8of/7NBst81RcNP2gL9zfSkRgh9EKiiSfSBnRC8j7KikmYYq41W2k2RjeKc4+AqY X-Gm-Message-State: AOJu0Yy71L3/IhwR0L+KczByBhX9ZxPTmxOoyA//patNn76Ni1j0AFu0 +52P1he1nlbn58PpTCzLgRaNTxd1YopRcu2IG6XNDwi/JboY/7NKFS6uafYojKl/N1DXHAAqWDZ bdg== X-Google-Smtp-Source: AGHT+IGPvuABTRGzUn95rBWDL/2eBHyGq/tmVyD1jWvRffYkunDVRYZslMTOmS1p0lIemoM5bFBHW+JX+M4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:7081:b0:2c8:632:7efe with SMTP id 98e67ed59e1d1-2cb7761c6bbmr21715a91.4.1721432640200; Fri, 19 Jul 2024 16:44:00 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:43 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-7-seanjc@google.com> Subject: [PATCH 6/8] KVM: selftests: Add x86 helpers to play nice with x2APIC MSR #GPs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add helpers to allow and expect #GP on x2APIC MSRs, and opportunistically have the existing helper spit out a more useful error message if an unexpected exception occurs. Signed-off-by: Sean Christopherson --- .../selftests/kvm/include/x86_64/apic.h | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/include/x86_64/apic.h b/tools/test= ing/selftests/kvm/include/x86_64/apic.h index 0f268b55fa06..51990094effd 100644 --- a/tools/testing/selftests/kvm/include/x86_64/apic.h +++ b/tools/testing/selftests/kvm/include/x86_64/apic.h @@ -11,6 +11,7 @@ #include =20 #include "processor.h" +#include "ucall_common.h" =20 #define APIC_DEFAULT_GPA 0xfee00000ULL =20 @@ -93,9 +94,27 @@ static inline uint64_t x2apic_read_reg(unsigned int reg) return rdmsr(APIC_BASE_MSR + (reg >> 4)); } =20 +static inline uint8_t x2apic_write_reg_safe(unsigned int reg, uint64_t val= ue) +{ + return wrmsr_safe(APIC_BASE_MSR + (reg >> 4), value); +} + static inline void x2apic_write_reg(unsigned int reg, uint64_t value) { - wrmsr(APIC_BASE_MSR + (reg >> 4), value); + uint8_t fault =3D x2apic_write_reg_safe(reg, value); + + __GUEST_ASSERT(!fault, "Unexpected fault 0x%x on WRMSR(%x) =3D %lx\n", + fault, APIC_BASE_MSR + (reg >> 4), value); } =20 +static inline void x2apic_write_reg_fault(unsigned int reg, uint64_t value) +{ + uint8_t fault =3D x2apic_write_reg_safe(reg, value); + + __GUEST_ASSERT(fault =3D=3D GP_VECTOR, + "Wanted #GP on WRMSR(%x) =3D %lx, got 0x%x\n", + APIC_BASE_MSR + (reg >> 4), value, fault); +} + + #endif /* SELFTEST_KVM_APIC_H */ --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 573E014A629 for ; Fri, 19 Jul 2024 23:44:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432644; cv=none; b=ecfq3KLNt7L1SFkxXJZJyIPvZBzWw/+wcnXNs+1RxdiXoSfPwX8ug+js102Dpa1D71MIw6EgC/Nck+vC4AnXZqIkxCE89u8Gc+i1J+YhxnmVwTm8PP39OOcWtc4X/3v3dY0kpDoHbz7ZdeFiLKloh5OPEhpxB/tnBnqEZJ7GSiU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432644; c=relaxed/simple; bh=vGX+QjydJu3zU32DeuD0uDs+BGgsKqP86RvQO+BJ6uk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Thu58ggMUXmCnP8imtGtx/dDYkSOQFn3NlKrp9gp2qZ50ZZaa78EfN7zkRY6iQg3aCIv26Catuzxrgcu6Bx+X11l0Vkx4VzANdM0jenMKt4ABsp89xsPaDj8uaKHhEST/NoDy6C9+bimucTOY0OYIDGVPxCdmpFrlXEttN1dREk= 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=IgFEX+ii; arc=none smtp.client-ip=209.85.214.202 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="IgFEX+ii" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-1fc52d8bf24so27331435ad.1 for ; Fri, 19 Jul 2024 16:44:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432642; x=1722037442; 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=ZUvOecK3sLTMz6qm67Q0shiPwc10UQD2irey1Qg3WXo=; b=IgFEX+iim849Wzc++CNUkvAjvUB6Xb6zPl8eSF8bOwiDDAZkZZqS39BN9fNQ5y/btR StMXYkjGqLpS1nq47f1nDQBoDneL22/ZQDYjDnluYzgKINVZyPNjH2tLe85lN0uhafvS yS1O0IrDeOdzrCmP5T9gVSNHhkAXk9SSN6z4GZkKT0EKmVwkRPbEQj1Cr87W9jIyJFKV WNPyFFCG5Efqs34trfgO0FeJXI8p61CqMbzD2tuQYrcx/Xwkm5Pea9QUjljngZ5zdNv6 IELnPCCL03fRlTONGDJxlb1ul75lZ0p9e1I81oGnizxC6fYpWwlOae5QIsEtkv8H+o9a FfvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432642; x=1722037442; 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=ZUvOecK3sLTMz6qm67Q0shiPwc10UQD2irey1Qg3WXo=; b=mN7Rj+dfSlSobIB2b8Y9n4wTTyZQFnYuKVusIFaX4noriM2PNYh4uMoITfB9t/Lh9F 36gg4qX8BgFl7qs14a79yOE+NjlrpwHyoK/JVqREaL1XR8j7XVe3cXxjpCgGuB2cND0M 2od4CNe8+YCQ9XRqIX0gxJOCrO9pivV5NBOJd0cPpEYM/IAiVdUICR+ACKfvawQhFiNo 0W1yRm4POrfs/NVFwocofAH2v2E5TMI60lC4BeTdw0cqu+Xxxjhr9xrSPeG9FgFWjyjd udkChtotxqvMNt2vQF32njPVR3bsEdm6aAY54Y2kTrd496wS+OZESzZk2DiaYVimSH/q V5Lw== X-Forwarded-Encrypted: i=1; AJvYcCVSX9ht8PSotgpy2gtPuunNhGsNLap5xRbNP8GsQFxcqN5ScSpTUSTUJBJ671GL3lR0RjTj9Kg8OuTYPEmEKfothuAFAZG17BBlsPvr X-Gm-Message-State: AOJu0Yx9R30Ky27t16mTGXCtgkinYguN+wOW42HEm3cZGpzO77Z9uqqw qGFDVNn+2X7u2rsopa1DPfSoz0xYHVHrDnNcN6peVpGSqeFRSPMcTcRSHuDfhIKTQxNOITDKOsU MsA== X-Google-Smtp-Source: AGHT+IGnhKiwC1lWgStU0irxOJLtvwWl6nqop+oW+igV346cVb8SlQ4Ca/NDQl0jX64yTdSTKHgW0Kp/9hM= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:ea10:b0:1fb:526a:5d60 with SMTP id d9443c01a7336-1fd74d87f6dmr880325ad.4.1721432642189; Fri, 19 Jul 2024 16:44:02 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:44 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-8-seanjc@google.com> Subject: [PATCH 7/8] KVM: selftests: Skip ICR.BUSY test in xapic_state_test if x2APIC is enabled From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Don't test the ICR BUSY bit when x2APIC is enabled as AMD and Intel have different behavior (AMD #GPs, Intel ignores), and the fact that the CPU performs the reserved bit checks when IPI virtualization is enabled makes it impossible for KVM to precisely emulate one or the other. Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/xapic_state_test.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c b/tools/= testing/selftests/kvm/x86_64/xapic_state_test.c index 69849acd95b0..928d65948c48 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c @@ -70,12 +70,10 @@ static void ____test_icr(struct xapic_vcpu *x, uint64_t= val) vcpu_ioctl(vcpu, KVM_GET_LAPIC, &xapic); icr =3D (u64)(*((u32 *)&xapic.regs[APIC_ICR])) | (u64)(*((u32 *)&xapic.regs[APIC_ICR2])) << 32; - if (!x->is_x2apic) { + if (!x->is_x2apic) val &=3D (-1u | (0xffull << (32 + 24))); - TEST_ASSERT_EQ(icr, val & ~APIC_ICR_BUSY); - } else { - TEST_ASSERT_EQ(icr & ~APIC_ICR_BUSY, val & ~APIC_ICR_BUSY); - } + + TEST_ASSERT_EQ(icr, val & ~APIC_ICR_BUSY); } =20 #define X2APIC_RSVED_BITS_MASK (GENMASK_ULL(31,20) | \ @@ -91,7 +89,15 @@ static void __test_icr(struct xapic_vcpu *x, uint64_t va= l) */ val &=3D ~X2APIC_RSVED_BITS_MASK; } - ____test_icr(x, val | APIC_ICR_BUSY); + + /* + * The BUSY bit is reserved on both AMD and Intel, but only AMD treats + * it is as _must_ be zero. Intel simply ignores the bit. Don't test + * the BUSY bit for x2APIC, as there is no single correct behavior. + */ + if (!x->is_x2apic) + ____test_icr(x, val | APIC_ICR_BUSY); + ____test_icr(x, val & ~(u64)APIC_ICR_BUSY); } =20 --=20 2.45.2.1089.g2a221341d9-goog From nobody Sun Feb 8 02:56:09 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 CBA9E14AD2C for ; Fri, 19 Jul 2024 23:44:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432646; cv=none; b=RmAB2uoMjTGI37lAS4nV1neHmcA6KkD27AmAGO54gi+5lBX5dTBr3LU0H2K9FNZE8gQ9gqUVoFbCr02CtYQTi9/ld1AebyJ6bPJm0Xf/CfvxbwaXeQpz2iATAVj6gdkNUV9L3cpJD/Uj9vZOCuVEF/gZj0Mixki/bTLfv+c/5Ko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721432646; c=relaxed/simple; bh=M/NyQgjGXBaNreFjHyLA402m2eagNzOE5eYuTkfJG8U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N8epdSwTuyvcWrPMAfF6bRYO4iXlkKZw1ZZE1RnB7iZFIVotr24xBZTwuvsJHaOSUy7tfvFnRl7t8Ojr6Np8Mj0n9kjRpI74nPnaV/ratYS3Aq/O5lmdFCZQxcMptdQBdjddLwZp+wflg6JhNZWY4vJ43miBlIy/J8DxV49XjnY= 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=VWJ7ayf8; arc=none smtp.client-ip=209.85.214.202 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="VWJ7ayf8" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-1fd72932d74so4892725ad.1 for ; Fri, 19 Jul 2024 16:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721432644; x=1722037444; 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=rky9lB8r38gMZ+TqqtRst26vC75RUEgf6EDR/NOmmsM=; b=VWJ7ayf8QKyjGG/QhRF+XCbRmHMnELh3uwSBUOVWI4Rdi+8KdaW3smSE9UWhwMkJll 0vr1QBG4vQSn3cdA96fYAuq7WUAHVH8VtiYgHdAGKB6PgdIxGZ7SD1hpsQQaBFMINpiF GQCS9RqHLpcv7HpIbPncUM3fUkdIIO4savj7NjOZwm0V1ClwDUj5yJ4/YD+vgV9CJSH7 SgooQscw90CRiSdx9b8oj5axGstm5P0S+MYv2+TMvEzr9DI9MdLTqB7Im/uxtYGpWFjd uVIIp49Ml1YrpJ3XmjLTwR5p1eOw0GWLDnWhyGlPoPzt/MS7hUBZeOvS428RB/hvmPjt JJoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721432644; x=1722037444; 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=rky9lB8r38gMZ+TqqtRst26vC75RUEgf6EDR/NOmmsM=; b=Soc5KjIuW6uOmtlUJd5Mht0h9xu5JiEiNdVezSJjj2g2u6NpoOnEEG+dmS2X5et4Gg jN++ZNKxF3Pjo3oBA8+bCYN0z+PlO/TlJihyOGZKUiv88FgGMxqb6684pT44yoYD+Jgg 6yJjTHlR5cMoiwzgSFyS40JrRVlxhBOGkzexN0kfA1fXcq9jtHIVIM4hJal8PBXGrbKa tROTN9vJTom49OUGEAxPz7+yG3KQzDc/aG/iI3OB62OXODmN9pEWRAc49hnhFWklws1k lC7lyJYRUnNbbnP+OrbkH0NGUE60t08HU6XypVq+lvlOCKRuoMw7KkuWXD+GqRfs7EC0 2Evg== X-Forwarded-Encrypted: i=1; AJvYcCX87vX60QcxMhDvkRhsk36lXD2BNHj2Z0rWdvBt7GYUk4T+RowHjoRqWp/0qN4QwlVBTq+5+Lt+wxYvHYb1ih7mqw4YLoDp5lLWYmM5 X-Gm-Message-State: AOJu0YyhyfadLbOKR+BB2fnrbgCFFuuVPJxRz56sT93LaGGdpdFgYGaS yJqLufJXdWYaTVpObUEVpNscWlCv+J3xcvmx5bPlnhul6SaH3TCQMImcHVF5gNC1VGtzqeCPZ2c WoQ== X-Google-Smtp-Source: AGHT+IHqLL4iTsWdNjx6HxdWSeX/rS7x3vjnktjhHaCJPZN8EdE2np/68Z7gXEq3b6USSD8ByBeBiZlEqhE= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:32cf:b0:1f9:ddfe:fdde with SMTP id d9443c01a7336-1fd745c27admr911935ad.9.1721432644115; Fri, 19 Jul 2024 16:44:04 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 19 Jul 2024 16:43:45 -0700 In-Reply-To: <20240719234346.3020464-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240719234346.3020464-1-seanjc@google.com> X-Mailer: git-send-email 2.45.2.1089.g2a221341d9-goog Message-ID: <20240719234346.3020464-9-seanjc@google.com> Subject: [PATCH 8/8] KVM: selftests: Test x2APIC ICR reserved bits From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Suravee Suthikulpanit Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Actually test x2APIC ICR reserved bits instead of deliberately skipping them. The behavior that is observed when IPI virtualization is enabled is the architecturally correct behavior, KVM is the one who was wrong, i.e. KVM was missing reserved bit checks. Fixes: 4b88b1a518b3 ("KVM: selftests: Enhance handling WRMSR ICR register i= n x2APIC mode") Signed-off-by: Sean Christopherson --- .../selftests/kvm/x86_64/xapic_state_test.c | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c b/tools/= testing/selftests/kvm/x86_64/xapic_state_test.c index 928d65948c48..d701fe9dd686 100644 --- a/tools/testing/selftests/kvm/x86_64/xapic_state_test.c +++ b/tools/testing/selftests/kvm/x86_64/xapic_state_test.c @@ -31,6 +31,10 @@ static void xapic_guest_code(void) } } =20 +#define X2APIC_RSVD_BITS_MASK (GENMASK_ULL(31, 20) | \ + GENMASK_ULL(17, 16) | \ + GENMASK_ULL(13, 13)) + static void x2apic_guest_code(void) { asm volatile("cli"); @@ -41,7 +45,10 @@ static void x2apic_guest_code(void) uint64_t val =3D x2apic_read_reg(APIC_IRR) | x2apic_read_reg(APIC_IRR + 0x10) << 32; =20 - x2apic_write_reg(APIC_ICR, val); + if (val & X2APIC_RSVD_BITS_MASK) + x2apic_write_reg_fault(APIC_ICR, val); + else + x2apic_write_reg(APIC_ICR, val); GUEST_SYNC(val); } while (1); } @@ -72,24 +79,14 @@ static void ____test_icr(struct xapic_vcpu *x, uint64_t= val) (u64)(*((u32 *)&xapic.regs[APIC_ICR2])) << 32; if (!x->is_x2apic) val &=3D (-1u | (0xffull << (32 + 24))); + else if (val & X2APIC_RSVD_BITS_MASK) + return; =20 TEST_ASSERT_EQ(icr, val & ~APIC_ICR_BUSY); } =20 -#define X2APIC_RSVED_BITS_MASK (GENMASK_ULL(31,20) | \ - GENMASK_ULL(17,16) | \ - GENMASK_ULL(13,13)) - static void __test_icr(struct xapic_vcpu *x, uint64_t val) { - if (x->is_x2apic) { - /* Hardware writing vICR register requires reserved bits 31:20, - * 17:16 and 13 kept as zero to avoid #GP exception. Data value - * written to vICR should mask out those bits above. - */ - val &=3D ~X2APIC_RSVED_BITS_MASK; - } - /* * The BUSY bit is reserved on both AMD and Intel, but only AMD treats * it is as _must_ be zero. Intel simply ignores the bit. Don't test --=20 2.45.2.1089.g2a221341d9-goog