From patchwork Mon Jun 13 22:06:50 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Suthikulpanit, Suravee" X-Patchwork-Id: 69951 Delivered-To: patch@linaro.org Received: by 10.140.106.246 with SMTP id e109csp1759243qgf; Mon, 13 Jun 2016 15:22:58 -0700 (PDT) X-Received: by 10.67.7.71 with SMTP id da7mr24067647pad.136.1465856578655; Mon, 13 Jun 2016 15:22:58 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f62si34430941pfa.18.2016.06.13.15.22.58; Mon, 13 Jun 2016 15:22:58 -0700 (PDT) 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; dkim=pass header.i=@amdcloud.onmicrosoft.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 S1423876AbcFMWWz (ORCPT + 30 others); Mon, 13 Jun 2016 18:22:55 -0400 Received: from mail-bn1on0061.outbound.protection.outlook.com ([157.56.110.61]:14821 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1423066AbcFMWWX (ORCPT ); Mon, 13 Jun 2016 18:22:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=zRifK0L9FmHZL7ry4pERjh6cGxS+Pu3Ef9YE5TUDT3A=; b=k6xzk+los8S/d9Gu5oCruJc+zhorKqOI7wXWkgjqsi55lUMvVbLc/QOwuLDKBRG6KE5S7TjxPKzNVvXXn1MhNk75xC2JaIpgsgl7pTNUuR4fzlpApE8p1W2VsfumTYvsI/rPBVWrwENGjtzimY/vTjcXndcXneCBEJo+3qq9vfc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Received: from ssuthiku-cz-dev.amd.com (165.204.77.1) by BLUPR12MB0434.namprd12.prod.outlook.com (10.162.92.14) with Microsoft SMTP Server (TLS) id 15.1.517.8; Mon, 13 Jun 2016 22:07:09 +0000 From: Suravee Suthikulpanit To: , , , CC: , , , Suravee Suthikulpanit Subject: [PART2 RFC v2 10/10] svm: Update AMD IOMMU IRTE with vcpu scheduling information when enable AVIC Date: Mon, 13 Jun 2016 17:06:50 -0500 Message-ID: <1465855611-10092-11-git-send-email-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1465855611-10092-1-git-send-email-suravee.suthikulpanit@amd.com> References: <1465855611-10092-1-git-send-email-suravee.suthikulpanit@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN1PR0701CA0005.namprd07.prod.outlook.com (10.162.96.15) To BLUPR12MB0434.namprd12.prod.outlook.com (10.162.92.14) X-MS-Office365-Filtering-Correlation-Id: 06819a5e-1edc-41aa-e96b-08d393d710e8 X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0434; 2:OfPWkvPC5rolNWIGxC/6sPebBMnJ6OClXzK7zyyhMS0sK4se9GKjQ1w5WiJHNnFHFEiaLsTGrEMT62doo8onAoLbfmQmJWGHAYermJ9u/bGtF6b7c8L2faINTyXovtrXEOpdZ0t2zOMlyGWnAAUg8HVm3tWEBBWm6XadzKRY0p/QYrJvxuY4y6JUIa4SFtuc; 3:Bn8IUgDEHPR7O8s1tGN70ppvAQXyWyXq8970xXudJRtxrFV94c/r/z8Sz5UmlaiCLXKmoxKTIHEghFNDjkF5BpBHGCM6z9hzPgrrR2y8UyQAyNV+XaCLBbGfqHK8zAXM; 25:mjGoRHKL4vVzoN7eCjL4lQW2taYAzMlNCrAsa0V7frizU0l/o6Ex6z3eOYq8E9vMCHV0uAQVxChZGnd/cejYZipVGG7BAOJYaC92xXMuLDARzL6Wa5b1DSFFswEOtfEJodauCWOOVkteylREZ3OFqQUGbfBBiNWI/OOyYjtRfq+jhzCGwCHFR4iMGuZe/XfSwEN+HtC1FxxDqr8DkByF68QYF85l+tnRCsRIDvGYSv6TBmdbtxgfBJ2Tuvo+1KoSSrd8r6Ah7/MGkUovmiFQ7gnDhMCuiuLrwNnkABTXZ8iAkiYIHTn8jxTOmLXLjNt3HbQ4Mi02Juf6iQM7ZdJix/BlwmjeT8oyp0R+0SMYCqWrfWSBDIDZ36dXywcvU9C4ATTY+KQrYq3IMiwIq3WQZ2ZBW9j86PDibfAjuuxMVXU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0434; X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0434; 20:cT0jkOClaRKMvsAaId8xDa76TtQkQwfvzeFBt+81pGwaKQ0diy3omSpC6G3Ucl6qg73kdu7VlCFGG4R7UdEGVRUkUDfdxJWHa7poi9+Xe9Aae6Bl2xg/hkL7uAzI+msIAsLjSEH0wYJ2TGOszSdAuHiZJGKQ13qJl9FpLtMYKGEu9f1cQneKTmmNcy8kWd06TWn952dYz5ENJlCtwmVw0+XPqq+hO1RoVJCRULTF3LMpel/xF5e5Q3eGmEpmoBcNjAUHlBl5+PJo6KqLlcN2i6dDq4HoNTiugpkDRCZ3hCwCaUnn7RYsuIxB42imW64lpaGv3EhFSCtdlLZUSW5abgy+vLtQh6Vfyqlgvdmh/dttw0Qyc4cdYKb4EL2LSAcowVdO9iMzxmMe3gQGVeXuKj8YOf2NTFU6xMXpzxhIV3tfEmUDnOl9zybwTKV8jgH3ei4DGi9fbIF6JGZNi7K+CN0k1cdkmcygg9ZsiuweadCoQ0vj17GukVSTSzIIntww; 4:CYmsNRhRY8B9fWaO7e//9zl31uVQPbAIs24ksXKfnC0osjCkOFO2oIR8CKWs1DHGG5E7lW34C2zSB+wE8e4T0ZlsBlDSwsLpa7S9C96O2y2/o7GBNjyg72chnxwOUP7R7LIO3A0EGlD/bdkP4rVxZAjIgJX3OIT1G7QpxwmyIqtnoi2RMaXL0hcKce/iqeVHFbbWhHhV7FoaGSE70mcfLOe4/d5PfT3hQUC6UEheYP/irno1vYyt/wwbF6V9qx5PvlAt1iNJ8kjLBJAE9ZRqAV7cN71rjaQRzF72j5pNJ5spyfKD5O278aFXDKeOiaqn0ZsWlCJZoUbXWdCADbclsH9NPxL0ym1CWEvEVKAsG+uIwwRjQGhl6pV2BiAfjNJP4Inw5r5ESwWvciKcAeZR09Yd1I/GhsUlj2YK2uyb8N8oUenkMQCXt7o3eCbHPRmM X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:BLUPR12MB0434; BCL:0; PCL:0; RULEID:; SRVR:BLUPR12MB0434; X-Forefront-PRVS: 0972DEC1D9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(53416004)(50226002)(5008740100001)(50466002)(36756003)(19580405001)(19580395003)(15650500001)(106356001)(189998001)(68736007)(105586002)(42186005)(2906002)(586003)(5001770100001)(101416001)(50986999)(4326007)(8676002)(81156014)(2950100001)(3846002)(6116002)(76176999)(77096005)(81166006)(97736004)(5003940100001)(5004730100002)(47776003)(86362001)(575784001)(48376002)(92566002)(229853001)(33646002)(2201001)(66066001)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR12MB0434; H:ssuthiku-cz-dev.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; CAT:NONE; LANG:en; CAT:NONE; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR12MB0434; 23:Qxz6wB6FZJBewphv2qyx/O54WJroQ8XX36CD7QSA0?= =?us-ascii?Q?7e7yDrUmJT7gviglhrqIdkM2xDKJI+nfywE6c9XDWv/SiqHaijMlFcTUHQtP?= =?us-ascii?Q?F0TYAhVNCKNZRARehDSbzVR2bOrQFMYEdy91NdbYUhfDiJ23S3rnIaWhE4Ma?= =?us-ascii?Q?xWeJy0Lbs7LamWABPdWqZWF8vdv6dHgx3FzRMAB5jvDt3ZzHX+JsuEUdgyy7?= =?us-ascii?Q?2ofnGmK3yDhKc9/TPOmGr4VZS5kB5Q7LYiwd7+12GTp1v9Smv518AT374qBU?= =?us-ascii?Q?voSxj1oAerV0OlUWx/iy0zYpxjUPstaFbK9XEi5y/Fd/FL1JBLy7var45Xj8?= =?us-ascii?Q?kGQmuwmB2eScCo1qESwJyXaQlNYFPiUjStve30xHGunt5n7luYRvOMbP3N9w?= =?us-ascii?Q?SpERz4ZEgpNY8N6AfsYQR+rrshjXx9QELibhGKxpKiTiDLIixYh6rgEe+U9r?= =?us-ascii?Q?BjF9hp0CypWt6HR1/YJxJ7re4B0qhEvL2Sw50pMAyFcwJGoUof1lnq8BWPrR?= =?us-ascii?Q?EIxx6etujxrjGHCAFJMx1eU3p9aXy3REQVigfA3A1jV1fS4V7j7kPrpvfldw?= =?us-ascii?Q?5altg2IhGAmfuXU45reJZZJA5pb8wDepwINV5ws7o5rdjOtbCIgKZ96Rrdb7?= =?us-ascii?Q?8f2U7mNt7bE+6cauigitN0YSc5X2kiUutWeM+C2gC7OJ+VuFDYWFlG2gj3V9?= =?us-ascii?Q?PWpWq2Vv+4xB65nHnk4gw/Ft9EOyPjJ74adluZiuyPK5MQi0ogCy3C2fiSMF?= =?us-ascii?Q?faE6+0YjAtYmQ65bsmEjmgp2Mx/7Bd4DHaazdAZ8/ij81JAZBIG55ZB+tXy6?= =?us-ascii?Q?jb77GRtE/ZzqeYydAcHVt+pfkMhQwYe46Q76i1XTSrZ4In/KSrgPd6sJuR9r?= =?us-ascii?Q?QA4RFOWUhlB5g99HMGNIdGkfd7G156QhfkByIVvkoMiPT6ue5QL7unEjz6qb?= =?us-ascii?Q?VeBWtdBT42q5BoM57Gt8ACyH4IMb7BOtx0NuyNL4GU1eye3OY73t4wd7GA2a?= =?us-ascii?Q?aEZRgNaqSITQyBSiGOv2BOxPXIMOiXsIBZk0GW1v+Z5aFJpefn0lMMHY5BIx?= =?us-ascii?Q?ZBeTph1CF1CrJqwEvA2oLsfSgv2vLKz9hayNg8W2Wzl/8MJq1vLOveYHiNjV?= =?us-ascii?Q?yZeK2G0Tz46TVJJoUDaFV1EC5C/B8//FfRC//9X8mHHq8JDKpRbDrsIs/vRw?= =?us-ascii?Q?HBbJYugr5eAdmw=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0434; 6:gLnh7RVdTvWeoxXz32puRMVc4UIl3R8oWIHuA8ixZsSMfb03Ww2XVhzCdNo1tA65qDEdlExYvyWxPWH9AR9iOMimH87RobhwcOGzH8p0vSML2yigGzy4RA2TnQ4obJbhS1BDoEP8LYFpBxP9J//FuYI18m5gO27ACg7UyWfBQZGJfDmAvnPC+7AOhqDdZz05cAlR6V5wMRf5Odmui2KuRULoL9f6hB0D4q4hJVipKJ1ySL4gu+KmxrlpnJdx76ObA3TryZkqQCX6MRUTCGz8S49T83Q1DI5L2cHSfVb3LMebMgZak0IuLFBmq9F6W5Ul; 5:Dow3HUDM2LRYVOxITjd5ThIp/DcXMdwfxNBELmHRXJEKkCIV2DWttjrknc2DUKFyrO3YZq8xI/x9+qtSGMwXqLcQY2FCb3W7I+ibwoX/BgvcEJ4LrFjEW+INONgdiW86OZ7ZyyuSICei6bX+syijRw==; 24:2Q3gL6mXRJb0hJ3xqecxTT7FUvZJ0+HcTk8RYuiLtJiVrijRydHLofkhAKmBtHPzETjKblvM1RI1rLkosFlD7I+n07fTQe3vBKBBS3Ii1C8=; 7:VBbWhf72lxUwRN1IpTos6qKUyWB5bzE4s/eW3f1Xvr/B/bS79V/5izyE00l0snSK1fncU5bAUTqS5JXWMe/cPdiS6N+x4vUfYW2VApUZWdm5EL4bbnpXot20tH76ikj+WCdjRfyC9qG1a5cl6bL8q508/EwTfufIHoKmRaHg2tmBQRLxim+45ifMOuO2vyjJC3+57Zw7Fcx9C5wRdPASmg== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0434; 20:q4ssgdTQh8nzSHBGZHqle7Gqly7AzYyQbuzLmlb142aawftNiLa6AuFMTJvz3jK8iMvTVnPk6MHA31HCBO5yxuzRhF8+MjlZSK+AnNlDoJeESnRZwNh16SSo9BG9hPqeBAFMRhlnCjGSfxODV4YVwZRxcDniGlB24DjGbmhzbcxwwKjdO8ZGKomw01CQsz/wMx97Na/rvauF5N7/8ZjQHeByMga8qixQkoRWqw7rWu/pWiydF7Asl9/ALK2hul+J X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2016 22:07:09.5166 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR12MB0434 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In case AVIC is enabled, during vcpu_load/unload, SVM needs to update IOMMU IRTE with appropriate host physical APIC ID. Also, when vcpu_blocking/unblocking, SVM needs to update the is-running bit in the IOMMU IRTE. Both are achieved via calling amd_iommu_update_ga(). However, if GA mode is not enabled for the pass-through device, IOMMU driver will simply just return when calling amd_iommu_update_ga. Signed-off-by: Suravee Suthikulpanit --- arch/x86/kvm/svm.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) -- 1.9.1 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 5a0b89a..803351a 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -1384,6 +1384,18 @@ free_avic: return err; } +static inline int +avic_update_iommu(struct kvm_vcpu *vcpu, int cpu, phys_addr_t pa, bool r) +{ + struct kvm_arch *vm_data = &vcpu->kvm->arch; + + if (!kvm_arch_has_assigned_device(vcpu->kvm)) + return 0; + + return amd_iommu_update_ga(vcpu->vcpu_id, cpu, vm_data->avic_tag, + (pa & AVIC_HPA_MASK), r); +} + /** * This function is called during VCPU halt/unhalt. */ @@ -1406,9 +1418,16 @@ static void avic_set_running(struct kvm_vcpu *vcpu, bool is_run) WARN_ON(is_run == !!(entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK)); entry &= ~AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK; - if (is_run) + if (is_run) { entry |= AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK; - WRITE_ONCE(*(svm->avic_physical_id_cache), entry); + WRITE_ONCE(*(svm->avic_physical_id_cache), entry); + avic_update_iommu(vcpu, h_physical_id, + page_to_phys(svm->avic_backing_page), 1); + } else { + avic_update_iommu(vcpu, h_physical_id, + page_to_phys(svm->avic_backing_page), 0); + WRITE_ONCE(*(svm->avic_physical_id_cache), entry); + } } static void avic_vcpu_load(struct kvm_vcpu *vcpu, int cpu) @@ -1435,6 +1454,9 @@ static void avic_vcpu_load(struct kvm_vcpu *vcpu, int cpu) entry |= AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK; WRITE_ONCE(*(svm->avic_physical_id_cache), entry); + avic_update_iommu(vcpu, h_physical_id, + page_to_phys(svm->avic_backing_page), + svm->avic_is_running); } static void avic_vcpu_put(struct kvm_vcpu *vcpu) @@ -1446,6 +1468,10 @@ static void avic_vcpu_put(struct kvm_vcpu *vcpu) return; entry = READ_ONCE(*(svm->avic_physical_id_cache)); + if (entry & AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK) + avic_update_iommu(vcpu, -1, + page_to_phys(svm->avic_backing_page), 0); + entry &= ~AVIC_PHYSICAL_ID_ENTRY_IS_RUNNING_MASK; WRITE_ONCE(*(svm->avic_physical_id_cache), entry); }