[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] x86/viridian: EOI MSR should always happen in affected vCPU context


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Date: Thu, 1 Apr 2021 12:22:52 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fzignekplPfrIkofHKCad40QtmcSARFz8dyYlMrVaZk=; b=K7Ga2K26AnJQwOQmfuFWqXEzby63OKCrz8vrLsozqKD+UD2J2amq3NMx7igAorRerty2hdCfg/Lmo4d6vd2ki7cJNEBUlcOywGdr6blhHiQAX2/5yUQlbfen0ofw5y5mR3tVd+QdVUiiafcvIXFVKNVqrOm/Jhp59vKGxmH2i6ZVmbEL+tOPeO0eWkCIzpkLcts44sVSnPznCV1K4Cb46j4gg8zCYJSo4BLbwCAIc3mZ05bJ1+t6l5ERzGryUw1BjbHmcwFhAnttuiO7BINAZXX72Irun+5ktnG0/7f37644JLC8pxcb4aHgC1QCt/7UVuNQMpDIYMXh0lJeeYOOIA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IGU3gj+fEVCLHlOzWdAXzgS9WAOQikTT8B6jnwO1zAzOsLXbDcohJiMxDv3FiIL3BBGiHnLRM1HaRy9adC4QsjLGZeazW7CCuhUiXT60/tUVxoL/n1Ikl5vGBHFBt83nVASD8BLl8xlg0LoguPbAUCilf2Fe+AgtB//G8EFY8+2ZBFpcHVDiMwQkn/5pTf9j6dFr4OTWKUzlX5GWRwXlL1nR7ROW8Xa94qsFTqfNRo0dqd/fHvLODosXaGI/lUVaNCwycTXqGlcCoVBbHnn0b/lIpfCLbAwUvfEb1jlRYWVq5223M+ON44UxwUD1hjgFgoLKNoH4pB5ben47dvFp1w==
  • Authentication-results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>, Wei Liu <wl@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Delivery-date: Thu, 01 Apr 2021 10:23:13 +0000
  • Ironport-hdrordr: A9a23:C124Hq59MPwxKqZ6eAPXwSyEI+orLtY04lQ7vn1ZYSd+NuSFis Gjm+ka3xfoiDAXHEotg8yEJbPoexzh3LZPy800Ma25VAfr/FGpIoZr8Jf4z1TbdxHW3tV2kZ 1te60WMrDNJHBnkMf35xS5Gd48wN+BtJuln/va0m0Fd2BXQotLhj0JbjqzOEtwWQVAGN4FD5 Ka/MVKvH6Nfn4QY8S9CBA+LpL+jvfMk4/rZgNDOg4/5GC1/EiVwZPZMzzd5BcRVDtT3awvmF KqryXV7riu2svLrCP0+HTU6/1t6bnc4/9iIODJtcQPMDXrjW+TFfpccpmPpio8ru3qyHtCqq i0nz4aM85+62zccwiOyHOHsWmQs0df11bYxUKFmnymmMTlRVsBerV8rLhEeRjU4VdIhqAa7I t32Quixv9qJCKFtiH869/Ubgpth0q5rFEz+NRj80B3YM8wbqRcopcY+14QOJAcHDji4IRiK+ V2CtrAjcwmO2+yXjT8hC1C0dasVnM8ElOvRVUDgNWc13xzkGpix0UV6cQDlh47hd8AYqgBw9 6BHrVjlblIQMNTR7l6Hv09Tcy+DXGIaQ7QMUqJSG6XWp0vCjbokdra8b817OaldNgj150pgq nMV1teqCobZ1/uM8uTx5dGmyq9D1mVbHDI8IVz9pJ5srrzSP7AKiuYUm0jlMOmvrExGcved/ GvOI9HIvPqIGf0cLw5nzHWat13Ez0zQccVstE0VxalucTQMLDnseTdbbLyKdPWYHUZc1K6Jk FGcCn4Jc1G4EzucGT/mgLtV3TkfVG62ZpxFaPd7tUC0YRlDPwPjiElzXCCou2bIzxLtaI7OG FkJqn8r6+9rW6quUHF8ntuIRgYKkpO+r3vXzdrqGYxQg/JWIdGn+/aVXFZ3XOBKBM6ZdjRCh Rjq1N+/r/yCYeRyyAkA9eOKXmbkHMXmXKPQ/4n6+y+zPagXql9IoctWaR3GwmOPQdygxxWpG BKbxJBelXSDQr0iaKujIUdAcbWc9UUunbvHedk7Vbk8WmMr8AmQXUWGxqjS9SejwoVSz1IvV Fp6KMEjL2cmTGgFHsnjI0DQSxxQVXSJIgDIBWOZY1SlLyuQg12QGuQrRGxih04eAPRhgwvr1 2kCRfRVeDAA1JbtHwd773j90lscH6BO2hqbGphjIF7HWPam3p63OORfJCv22+JZlZq+JBYDB j1JR8pZi9+zdG+0xCY3AuYHXI935M0I6jzCq8gf7y74ALYFKS40YU9W9la85ZuOIqw7qslUe eDdxSUKz29IeUzwACRrmskPi4xiHRMq4Kb5DTVqEyDmFg4Cr7uBX4jYZcxCdSV9XLlSPaFy4 8Rt6NCgcKAdkHKLuebwqTWZQNZIhzdoWSKX/glwKokzp4ahf9WJd3nSjPG23FM4QUmIOr1nE 0YRr5n4LqpAP4bQ+UiPwZQ/l8kj720XTMWmz2zJu81Zlc2iXDHe/uP/rrTsLIqa3fx7DfYCB 268ydH+e3CUDbG/bkGC7goKWATTEQn8nxt8KejcILXYT/aPN1rzR6fMnWndqVaR7XAMbIMrg xi69XNptSpTUPDqXftlAo+BLlP/WahSd6zBwzJOdcgya3GBX28xo2w4MCyiz/rTyCccEpwv/ wDSXAt
  • Ironport-sdr: qRYtQFagYKcNt4XqlQBWb8oK+bqim6YGuEFIfIlZW4pzcQSdcw7ez+KZM3VBE4Ch3Fwb1ynoxk 6U2Tk9D7INfcp2Wjupzl4NmO8hb0IA2pZZiOTQ/Qym/tOY44dBJYxcre83bH/iodYwFtWEgihZ yVJgHeHCYoodEYMRXQGnbJg+v5X6NzF8Uw/Q01uN5CTUN9tPQlAbNhHYYH0sq6My6vhyw5X2MY Jxit2drsjXkd00xL4ncqUzvBEBzRpeH4wJ6togB6B8RDNrCFHeV8ealK1CmeHMOeMhmfJXumqe /ms=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

The HV_X64_MSR_EOI wrmsr should always happen with the target vCPU
as current, as there's no support for EOI'ing interrupts on a remote
vCPU.

While there also turn the unconditional assert at the top of the
function into an error on non-debug builds.

No functional change intended.

Requested-by: Jan Beulich <jbeulich@xxxxxxxx>
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/hvm/viridian/synic.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/hvm/viridian/synic.c 
b/xen/arch/x86/hvm/viridian/synic.c
index 22e2df27e5d..e18538c60a6 100644
--- a/xen/arch/x86/hvm/viridian/synic.c
+++ b/xen/arch/x86/hvm/viridian/synic.c
@@ -79,11 +79,20 @@ int viridian_synic_wrmsr(struct vcpu *v, uint32_t idx, 
uint64_t val)
     struct viridian_vcpu *vv = v->arch.hvm.viridian;
     struct domain *d = v->domain;
 
-    ASSERT(v == current || !v->is_running);
+    if ( v != current && v->is_running )
+    {
+        ASSERT_UNREACHABLE();
+        return X86EMUL_EXCEPTION;
+    }
 
     switch ( idx )
     {
     case HV_X64_MSR_EOI:
+        if ( v != current )
+        {
+            ASSERT_UNREACHABLE();
+            return X86EMUL_EXCEPTION;
+        }
         vlapic_EOI_set(vcpu_vlapic(v));
         break;
 
-- 
2.30.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.