From patchwork Fri Feb 12 13:59:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Suthikulpanit, Suravee" X-Patchwork-Id: 61849 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp840365lbl; Fri, 12 Feb 2016 06:01:21 -0800 (PST) X-Received: by 10.66.97.102 with SMTP id dz6mr2263234pab.59.1455285681701; Fri, 12 Feb 2016 06:01:21 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id kx15si20233785pab.43.2016.02.12.06.01.21; Fri, 12 Feb 2016 06:01:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752955AbcBLOBS (ORCPT + 30 others); Fri, 12 Feb 2016 09:01:18 -0500 Received: from mail-bn1bon0097.outbound.protection.outlook.com ([157.56.111.97]:24224 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752936AbcBLOBN (ORCPT ); Fri, 12 Feb 2016 09:01:13 -0500 Authentication-Results: 8bytes.org; dkim=none (message not signed) header.d=none; 8bytes.org; dmarc=none action=none header.from=amd.com; Received: from localhost.localdomain (124.121.8.20) by BY1PR12MB0440.namprd12.prod.outlook.com (10.162.147.141) with Microsoft SMTP Server (TLS) id 15.1.403.16; Fri, 12 Feb 2016 14:01:01 +0000 From: Suravee Suthikulpanit To: , , , CC: , , , , Suravee Suthikulpanit , Suravee Suthikulpanit Subject: [PART1 RFC 7/9] svm: Do not expose x2APIC when enable AVIC Date: Fri, 12 Feb 2016 20:59:32 +0700 Message-ID: <1455285574-27892-8-git-send-email-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1455285574-27892-1-git-send-email-suravee.suthikulpanit@amd.com> References: <1455285574-27892-1-git-send-email-suravee.suthikulpanit@amd.com> MIME-Version: 1.0 X-Originating-IP: [124.121.8.20] X-ClientProxiedBy: SG2PR03CA0036.apcprd03.prod.outlook.com (25.160.233.46) To BY1PR12MB0440.namprd12.prod.outlook.com (25.162.147.141) X-MS-Office365-Filtering-Correlation-Id: 8d7f7670-fc47-4f1b-9b11-08d333b4f58e X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0440; 2:EsfKAjxV3iKMoJoTpOf4iUrx54e7oAbpbAxCrPsc7ReCEsXlKGbDIGuCYrxghXWavQa2rc4VexmVKvtiWMl3SAp7xvmu/NjRL3LO+j0jUjWTlXnLWZVJ9ZaujQ8CSpEPx87IZVns8wfd4a4ZjDd8Rbihum3Rw2iNkxAqSYbKnrCR05aAmBYYG77FuzxYEntY; 3:CURy8cDMiMR6C7+lNzHvBA+6ZQrTkaqbgiPMpq/o7ytyjOvJmh2zlt2YKMkbQVMJatg350lI/UBbiXdmmlW/4SKLtn7a6Yq87tAGgN6Io3QdwHA46GIzyfGzvFRW1TLg; 25:r8J3i/nYIhkuVLvNOW1DHsoorLZp9JiLhoGIrc4dMLe6gjxXX8Cz/F0W6WBtPCJQ0mWqqdYJA/LA+tUY3vXyDpAwQLDTQr4z1XpXLR+WmrDnr/1qkMkrjXV+e+LZm1RPTJMXZ2tUS5bM4L+fpkf8nwioLqqFhpIpcDxpvjyB32yYwxQZqYPQiimGSEDNZQjAmBOdSejeDNi7FE0vBkVkOVeYwhM8EXhdl7689Qv5E0OkGvLJ7+QNHQTgwwl4WoMWF+nn62MVDoeKaahboX/Z4Q7ZUcnQ/2F21e2Nm1FHaGq0ickdVdTvvhHYGjPLQr7d X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0440; X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0440; 20:bL+7vRrstTX1e6zg7mnY8EMICMi4oDMwhO3/jGY6culOTxAJvFxzMKIwU0EjVwTmtH7CxV6MPwLhdnKB/Up1pnh3alrpmZPrMWy+ELSafRUjHAk5/gdH8dutlMIa9TuThNr3mXMJGsUsuTfH0cwWvZ9rXUs0f9omhul6FTqDSv5/z4EVsc5QV3NQHKFRuPDVDgQwEnqArUAyzQN5hA3CZiS8f/O85E8r8vk+VztUUVYxzR1lS54rxvwZBG9XnTDTSoK8XPPx2KbtIPMGu6VOHBgpjqGHrFUsYXlyHc6E+AliC3+YIb3pocADG1jTuXXyNsGWt41/i3bqWDpLT3UXVo1PxA+vEQYPZ1j3Ewq8a+cQXAEGvQsq/xPTrKksfnuE/XQzvx9Y3TZsLwiy80B7hYrR0cEaCV7Xo9QYXYgtG4RKW9P5+Y3lQFIfLzRXjXqh9vtHwzzhRQ3I1zxI/z5vIFMPEgtTWyVss2JzZeu3xeQKuM5W/i3q085fQl4fS7qZ; 4:VMJfyYluHGQuQ5QOd2VMEYL90UynD0v6E64cPOAEYaE6HOlYW7FIS1BeQ49YsbrGTJK++tTc2ajdK2wJUhg13lwdTgrbSI/Zy+WQ3nVOQ1LdC0jIPDulDtj1hTmjnb8bsRAPECO8joDei/H3X8zkBB67XhOn/NSCwbGxg2OAXv5kijMyafJr3Ovq1UORMzK9Khi+WJT2xAk57lmkdSnWmFx9MkGpF0XoOyOX6ADvX5Y5go+MNKLvxM+nYxUr0J8naoTpYIyvvi+tGYN64u5wShYWvLr23JABQd3uH5FQ2qkQEYD+y0W6h3K5KWkb0TgCWPUkg/S6TMyny1b495JSImWsj8u07CZ2NcBSP9FaJ5XklDxVhZQC/Y0jwkYwYgNRDQt+HDicpxdMhPt9tXsp2Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046); SRVR:BY1PR12MB0440; BCL:0; PCL:0; RULEID:; SRVR:BY1PR12MB0440; X-Forefront-PRVS: 0850800A29 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6069001)(2201001)(36756003)(48376002)(586003)(40100003)(92566002)(3846002)(5003940100001)(77096005)(229853001)(2950100001)(19580395003)(19580405001)(6116002)(5004730100002)(189998001)(4326007)(42186005)(66066001)(50226001)(87976001)(5008740100001)(5001770100001)(122386002)(33646002)(50466002)(76176999)(50986999)(86362001)(5001960100002)(47776003)(1096002)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR12MB0440; H:localhost.localdomain; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR12MB0440; 23:mvIbaUjlPFP+bzukNEFslBnwGUTvKSOUPUbADV6qc?= =?us-ascii?Q?kiq7yT32p5ZmffMNCc20rybjK7uU0ZQYCvlqgMIqUg3pmgM5Jj9X18Izgf3a?= =?us-ascii?Q?DpD3Pi+jI5jl7YjDFghf+5JRvGu499L6wAcGfoP14Xg+iusBvr0ut8IXXOeh?= =?us-ascii?Q?BSDeoUkIidl+mZLTmApx4TtGK0/rf1VpRrGUK1+OkyAxkiZZDU45YRoBj1ay?= =?us-ascii?Q?dNrLesKdM0YzpTqonlegNC7bpmxqTWE2Y/nZUOkMvO4MJmAS8JS5rf9U9N85?= =?us-ascii?Q?iEBsWGINKmEXbMrpskAdB2oBsXN06Bp7ghT2xCtr1ii5gUUSf46GULnA7LuH?= =?us-ascii?Q?b6RYY0Q0S5v2aQV3BgWuvWGVdDyy6ouYi/5/CSS+0nxemkYvQri14W9YJirK?= =?us-ascii?Q?KQK6cyO6JYjKFl0Bwrczzgygc2LHUSwP43rcVLb4/9kFYqQfESCYuIrnycMi?= =?us-ascii?Q?rrHkYnonLz3tzdUCKn3v8M4PLS2H1qOaD6pJQNP9QFMWEs5HoPA5+lLS6gW3?= =?us-ascii?Q?jgh1Df7PJLQrgnM079/myTbHjE6YVgh9PLV+Cyu2UHCPVc1WiKMkkDq+jn12?= =?us-ascii?Q?b7/9kUJOZ1h3lnuaCXBYdc47zL52tNFBnlPTzpz/WfWIDOhv9N0lC7aI+b8u?= =?us-ascii?Q?bBUQYoyV5E3qOdMPrOfHozRSh/OqU0e6h4HgvkXglZGjz2s7cpjTbzL54Qfx?= =?us-ascii?Q?4Acem/5srDr7Yixd6U2tgi4bWFgwDDhYAyUL14K5F9jWw7W3vHlqb+lZ2V4j?= =?us-ascii?Q?TQv/qZCnS4fWyJZ3slZUP6NI3I0U2ZvlZBNzJrSDbV259ep1tqPz0jerAJh/?= =?us-ascii?Q?/c3SRt+siXsfGFcTBK5b8ARLYEQzIWeteixCy0yZA10ikVWsY66Pm/tJo6AZ?= =?us-ascii?Q?F6kDX/wuhT2tx85qCyFO9BBRGVanEuj3t7TkmwtzX4y8PVkUoDzFKAUqaa4s?= =?us-ascii?Q?8AYP+F6BygE2oy/9BYhlgnOsrXRr0m4wTztnA1rew=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0440; 5:oAqCfQXDUQ0ZZh2/yKiHT6bMRaidFJQCvYKECXY3aIrO5y8jya6kMebtLa/1DSWgNdgZt/bF4ttKuyEYuMB1q6+0QGEc9qr5WfToZlRd7JcYCNFsEh+kJHV4zWppp0bKm1ntG04mxTOLLIV7wjveHg==; 24:e2DtEqdUA+457Dvuxy1ZHyNqfvwYqpBHkr5bOwrunP3HCUT0sG2CVCrM5XLW/u6Q1mckD2MhWfPol0B9yctGYgD+9ANEIHITF5wRjtclcXM=; 20:y/NOtT6rOTR65kDGPxJvIDTpF+HXPBC28Tr7l+z+PhRtPwIrVQfuhePrDv4gMYBMTxRUYQfvvsu08fEVCzkWBlmESvvgZBMGASAgJxnHQSWgzlyd2VpkE5xEQhGW1f0x/hRK2BkVCU+uHJJonux5jLjb7yK7CiknA9Q8OT0KTNH5gj3lvENtKDc49pDed9FVC6fGHB7EEZh+6cDJklIMHzPdYgQaXWFjjkRt8HkShehUlCr6+YKqGA1DIt8hyh2D X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2016 14:01:01.6731 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB0440 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since AVIC only virtualizes xAPIC hardware for the guest, we need to: * Intercept APIC BAR msr accesses to disable x2APIC * Intercept CPUID access to not advertise x2APIC support * Hide x2APIC support when checking via KVM ioctl Signed-off-by: Suravee Suthikulpanit --- arch/x86/kvm/svm.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) -- 1.9.1 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 5d7b049..0998e67 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -223,6 +223,7 @@ static const struct svm_direct_access_msrs { { .index = MSR_IA32_LASTBRANCHTOIP, .always = false }, { .index = MSR_IA32_LASTINTFROMIP, .always = false }, { .index = MSR_IA32_LASTINTTOIP, .always = false }, + { .index = MSR_IA32_APICBASE, .always = false }, { .index = MSR_INVALID, .always = false }, }; @@ -850,6 +851,9 @@ static void svm_vcpu_init_msrpm(u32 *msrpm) set_msr_interception(msrpm, direct_access_msrs[i].index, 1, 1); } + + if (avic) + set_msr_interception(msrpm, MSR_IA32_APICBASE, 1, 1); } static void add_msr_offset(u32 offset) @@ -3480,6 +3484,18 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) msr_info->data = 0x1E; } break; + case MSR_IA32_APICBASE: + if (avic) { + /* Note: + * For AVIC, we need to disable X2APIC + * and enable XAPIC + */ + kvm_get_msr_common(vcpu, msr_info); + msr_info->data &= ~X2APIC_ENABLE; + msr_info->data |= XAPIC_ENABLE; + break; + } + /* Follow through if not AVIC */ default: return kvm_get_msr_common(vcpu, msr_info); } @@ -3608,6 +3624,10 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) case MSR_VM_IGNNE: vcpu_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data); break; + case MSR_IA32_APICBASE: + if (avic) + avic_update_vapic_bar(to_svm(vcpu), data); + /* Follow through */ default: return kvm_set_msr_common(vcpu, msr); } @@ -4785,11 +4805,26 @@ static void svm_cpuid_update(struct kvm_vcpu *vcpu) /* Update nrips enabled cache */ svm->nrips_enabled = !!guest_cpuid_has_nrips(&svm->vcpu); + + /* Do not support X2APIC when enable AVIC */ + if (avic) { + int i; + + for (i = 0 ; i < vcpu->arch.cpuid_nent ; i++) { + if (vcpu->arch.cpuid_entries[i].function == 1) + vcpu->arch.cpuid_entries[i].ecx &= ~(1 << 21); + } + } } static void svm_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry) { switch (func) { + case 0x00000001: + /* Do not support X2APIC when enable AVIC */ + if (avic) + entry->ecx &= ~(1 << 21); + break; case 0x80000001: if (nested) entry->ecx |= (1 << 2); /* Set SVM bit */