From patchwork Tue Aug 23 18:52:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Suthikulpanit, Suravee" X-Patchwork-Id: 9296241 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A48CC60574 for ; Tue, 23 Aug 2016 19:30:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9747228C62 for ; Tue, 23 Aug 2016 19:30:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8BA7128CF9; Tue, 23 Aug 2016 19:30:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 11B7028C62 for ; Tue, 23 Aug 2016 19:30:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754950AbcHWTad (ORCPT ); Tue, 23 Aug 2016 15:30:33 -0400 Received: from mail-dm3nam03on0052.outbound.protection.outlook.com ([104.47.41.52]:4352 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754912AbcHWTab (ORCPT ); Tue, 23 Aug 2016 15:30:31 -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=AG0lO06KPCnzWfgK0siKOxRqUfd5FHydlVDF9T7ADOw=; b=lzNvJ4f+nwZ6VoeU6L2lmsFpqJnj25Qo4ZKNc+VNoIMgpipIAf1nY5jwR/ESdRyFUEavPaZ0CIEuDNGzgaGBmikQCZS9/O1L+yMqPQgrzvzg8puaAgg7Km3HYGU6TjMMOB0Q3jnGPo1u67MMSjmxMS29IGVIq2ORVOd04LfriRc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Received: from localhost.localdomain (114.109.128.54) by DM5PR12MB1452.namprd12.prod.outlook.com (10.172.38.141) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.557.21; Tue, 23 Aug 2016 18:53:29 +0000 From: Suravee Suthikulpanit To: , , , CC: , , , Suravee Suthikulpanit Subject: [PART2 PATCH v7 07/12] iommu/amd: Introduce amd_iommu_update_ga() Date: Tue, 23 Aug 2016 13:52:38 -0500 Message-ID: <1471978363-13756-8-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1471978363-13756-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1471978363-13756-1-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 X-Originating-IP: [114.109.128.54] X-ClientProxiedBy: KL1PR02CA0053.apcprd02.prod.outlook.com (10.167.54.21) To DM5PR12MB1452.namprd12.prod.outlook.com (10.172.38.141) X-MS-Office365-Filtering-Correlation-Id: ff7c9c14-25f3-4ca0-2986-08d3cb86c79e X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1452; 2:3ugAmURctw4SSkE4kGxz3QIeoUb8AwBTvp6JVCTgd7lVvzIQ9MPFWAbfhuQrtepNqIC3vLBRT3FYO0mz4XYfPwTVqnMo1I+/5R5ciSnvBIEwpPWVmMCXldIpuf267nhq43/WMx8rj3QsEkeZ2TFhFCDQ9KkXNPgO1jaHuTx0wMQPDiTUEIWHKcXn2EyWVaqZ; 3:6vedXr4BPTqHxVBK3FlPkwN04Y9UM4ZqAyAKMzZ6FAZrcHeoAyuNB810rwJvgF7OY70RsImLxOLFDHWmq/gOSzrM+3fy4UuBEUZwt2Z+ivUOK+f27YIMbppIJjmS0Zac X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM5PR12MB1452; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1452; 25:DpY/gSQ+vGwyef0skIS+dHcUlPhvZgkjl/M8wfgJSbaL2rogsGd/nlFfDxm/2YY3dOAoN+QsQEcFvhbK76+7Xwt++HFUcud8D6UM8unUT/eEqmAk/4u8KjVMpSgHjvv6Nfmfey02KrHglk7mDfXP/WZuwWd6ZB3v6vJi6IgfZaMqCd289me2m+/oY7wg8TPXPz1HIUkgCNYHKtb9WEgXa+EJh8ZbIoGnv3zRDubDz7HOhoiHpQ9/ZDdXuIws0ENBwhOmhW9KDx95lDcrGl2U8oWBZS+P8yXDpTERVBCSzo7A1aymU/bvzYBo1k6cDEj4Oift47g8kXIy/BDKJnA+OPFkhIKzg1o27T0aYURjUawRJT+BHlEVPUwCCGL1wZzdX25sbJg7PWVfubX4us2f6sEvj6K+UJAPitykc7qy4YOk29L8qPgAGEyoiGlnxvcNXf9SkTdYtducYXSvOcpHb2osGUKO6MSIkYEVSUitrMCyHlxg37hEHkKqHu0J/wDwRmVcpMpsSVi52picGA0fpPgS7wEJNhLi0jpEoA8FZ2X29DzcOETqXQccQXDEDtrUarn+N+xcSxR86j7ISJRZOcJsS2WKGMHdHLijw4flx9Kj9HJz10IjuoT2/Enp1vT2W6lM4ahVz2zgEjlBKi1FDR7vas8JloV+VmMT7GOIvRCVzvQlTzyzPQyBlRpVrhtZ0CoplmUPglIBalDnV4Chy5kSBByY36nfTN0ragw/+Xt6xGPO1NmWgI/fMHhwn86R X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1452; 31:C1OjJNio7eP2cXav0mTtxIhIQTPdkvUnkTWHd2iU52nLAsZYEpyIacVdPkqe+x1t8VG4DeJo1mY4AbvWA/JAIpK1DaCLC2J3yAnetI4qkovXQWtt7nE7J2nk9V9JHXyenHTz/+sILTRIjvAqSI4irdNEdb0xOAD5qh9ysPuvKvGBc6FuZnobrvOQrob5vIWumq/mwcfMtZwnzHnO5qILvRF/hvz5Wa2xKOzOdi7iPqM=; 20:nyq+NSPhq9eBij+/rC+WuRRIVDZ4QNhG7RoAxlhjT3jYQ+oy9QBjxU0am7IuyYh3fpzEiV15qCWurDStfE6O/aaQegchwyO+NwmAJtQPZbWiCESPXbGbikv7/9WzxMszLIgKF2RR6JQnEQjtZVihP2ik+b1OoGrMotQeJkKP0pFJVSvC5YRwQDQcp+Z80NixhteiHr67C8DQfQj+koWqXjX9yDpwBKzmTptj0YMUb/yQXi7IXC4IISYI1E0XEMO+gQVvUgILIr16hsriaBNa+wdnOUAtcZiaXpuQKdaOdMO1NAXf2cKxi5U63TcGkcX5M/Q7jQbUoJgWyIQ8M44el0qfbpC7b+SqwH+uVdHYq6Bxx7EglLjjoiL00kdQw+In0SWM/WMHRiKz0mw+q+bt6fUS3aI3y7u/PRwjrSzx+Sz69MtRWaMp/FF6N/2G0BGNgCbF/70xfVqNmStYe3+Xx+ARr6Cs902rqQNjnIpKkR1pgCLnd7F6HitH65GiWQ/i X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026); SRVR:DM5PR12MB1452; BCL:0; PCL:0; RULEID:; SRVR:DM5PR12MB1452; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1452; 4:07xh548lZRcEIol1Leu71Yj9voV0L1u043kSUznMKHRxedk6J8QqPWlFbGaRW8jF5YTc4UDUsy9QO5A9zUzD56zluaK8R3nEnh+OUKWVVM+LsZFv+Xm3pkiJtJ9wy9ebcQDeP83Twcg+2zaLzZvM45f2ieWMcMzp//D/lQWmUDrwtpS/5ZCvQk4PFX01mnr4qH7U+NQ8/VEXq0CCrYsuIWuPlO+FMj7I2dKCoJ5MrouK0FHyuYg27x4d9+r6U5qyUIl5JxYWbdrfD3DNkFQRZhLQbi9TOr9KR+/N6PtwDkMrB1r1qRJWCSVbSdgr/m2YR54DMkgXjzMlenKK9j+/SDlJ8tPpqs3VcwlAvGtQzKaz6nmjJpIWht4Vh16FEJlN4xX9XmDDo8qflvvev+VajQ2mkftSxgifjPRI6Wpf8bu4iNQO6KT8CxsSt7cazyxy X-Forefront-PRVS: 004395A01C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(199003)(189002)(42186005)(76176999)(101416001)(48376002)(50466002)(77096005)(5660300001)(92566002)(105586002)(5003940100001)(36756003)(86362001)(106356001)(66066001)(50986999)(5001770100001)(19580395003)(19580405001)(50226002)(97736004)(189998001)(229853001)(3846002)(2950100001)(47776003)(8676002)(7736002)(6116002)(586003)(81156014)(68736007)(4326007)(2201001)(81166006)(305945005)(7846002)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1452; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR12MB1452; 23:IynsjHg7hNnKQTDVOp7VDi2CcOhF+YIoBkZZLVtvy?= =?us-ascii?Q?Zn5WGRncKz22ALUqT+LGKdlvTN1IweyqvVFVP0E2gCqHPzrFE6iW4MwFl2RL?= =?us-ascii?Q?HOs2aR6H1JJAeMFkKLlvcbRj/A5q3nNIH7ZeDQ+DC+Q2Kdi9PYypo/T/tqDR?= =?us-ascii?Q?Bc8E+F8rV8RWLRQMOgJ7gtbbqjCTtOt/WDBcGdUHcBddHMgp2MSk1+7e+AXy?= =?us-ascii?Q?pQj3LdaySdcZVVOUhjyGZwIYlceXXYtnhYABxMf2YkpgQs9UxYyOwmLD1bKv?= =?us-ascii?Q?EDs3neHE/J0TMyZoQeVdfAzbudnYhuZ7PSg6LsNrWNkYbGRS30l1XyrvBwY+?= =?us-ascii?Q?wyRj7bcH8yNLSBc4PvLI7pwKo3HqgMS8wynGH2EZe8YgYKlsZbRN7uko/9qL?= =?us-ascii?Q?ZHsL70u+ZnIwcS49P3MXr/BW8umkFZvWlS+Lg4WMbEHkMVZgkjoD4yZlOm0f?= =?us-ascii?Q?OVwmolWXIweKORPT6LygX5fj9K1zGvRBJUqaTZ/wJAKa+oBZgF2Dd8XvhF2J?= =?us-ascii?Q?fUIM6MVzQ8BInlBLaB6k9Nhr+5a74mhG573tuWIoprGBCyvSLCHLkfT58cHg?= =?us-ascii?Q?69l+gPkUvq84r/TXE985fPGQ7Um6SXhet6T5r0ax6e7YNKMUABloIVO9Gd4m?= =?us-ascii?Q?Np7QMed+IH1PGOUDdAM6mjfOQz/DBRe0q9lkJoHRUOs6hz321AD2PFi0CC68?= =?us-ascii?Q?1jXFs7U7TXJ24GDITWPIDu7Ribrm+AJfpUWoQDG+W05VncftGuK3QRJy4ylW?= =?us-ascii?Q?HsqsZzcNg4vNqUxkZGwVBXtt+ea+Bkr5lnPuyPEMoU6V4U95QQuTxCsjXufW?= =?us-ascii?Q?x+QHs2uLSTZ4RempJwBdKF5cppYx2enQrI+IGHNuf/p43dsFi+HLVGNMVg2Z?= =?us-ascii?Q?Sebb6ldb+o4RsL6h5JX31fe0wywpr0mUwbsTaOSw4jEmdCmxhWQex8tH8YjR?= =?us-ascii?Q?KG1MdEo4SPm9GflJf7ttoOJcX/NOWIAFFepaoOG28nAaS7nmseg51B05PGV8?= =?us-ascii?Q?DVueDo+f0e/M29xqRlCVjN3+DMR2XN5u8VSOCQr4YluaM/smJ7rKdWqZ4uF8?= =?us-ascii?Q?ZzwUz7bea1Knlzw0iL85UT/PY399HIKW6/Euevk5TWYbeEeAQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1452; 6:XPlSfRyiO6kOymqM3JHYrFHA5kpmUaaOUHF5IeqRjq7VT+RET3ueijZwCzAX/1f+9f1QSX1GmBd7mpqwBy1cyaUgxfo95EypfmiJaDIjJYuMHGXysqH1859z3SoTQimd6EOotmE0NOUO0zFFRUoxv+BbOeIpyyhv8ZYp9h/vxjnSEzX9GNDz0lLOsXG0QuDhVLQAmy0FotCJeIQeGnizzCavTOLXx7PbvJbmeTXUmEkmkXaAhIUJbpnYdNArEe/oMo4zW5PCFTyd1V7kOIB0oq0eFccnakhZQBvdLhVry7IpCFrkqJSQiMgRo6Efh+Rd8ftaOfuXfxImWnvbTMGa1Q==; 5:B2GtfONCyXPRgE6QyqBL6kKGw7bqbX1GQDXyzvz44AphbGXB9XhW6rAweXSiLQIcB0UZy05GCUI8oKDnu898U0JL3BISV5RQel87OGb3YwH7K0Rrb2M64P2jdgB7iZ/V/VZI7w6yM0ZWf1VrrzuUaQ==; 24:ipXagPsHmweuluFpECqZHHccI/T/+UUAi2Htk5Yt096mBaZ9KWLOTmS5vGNTeBdRdBeBEunHlQTRnVF1/lmjkHuIUI1pg0gjlF0qkRhSGTU=; 7:uUAbU6v0A7RIudAg8ur/tBQ8mbAy/skoUARFUwf0YKxENkCpEXo0lVtnATI0jIaWd7A+rp6mmDlMDXnaJNkA+SEMwcgiaASlpnabrMVYOG9t/4g5VIlG7Zf5EgnVWh42H/r9h9oFGxD2DsVCTIaZy/C0tOR03GgV5XhV97undMFNIcoxA7elFkxnBkMFWkceOlLDprd/9KCaJ4kM5zpmaJNGBBGv5dZF0nJoBPBnSl/frX9W/ju7Av56x5Kwa73u SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1452; 20:pQ1DhMtZ9B3NJCPAPpBb3PT2sSDWGSZdmYE8nnM5DmUfbxU+UFhpJvie13524ug9ajGNACQGBMxtQUlf8573LZ46P2pA7hZ0QIH61od9IbQuXPDmaOq8GIU57u18sYFpFHQKLTy0rLWGZOoG/azHiqcnqIdbo+thBra228aESsS3U1CMMEAYZTUARo4mdIg0elKIyNB1foYoh69BY8mCo8qaW6xH9ZGtXNqS0cq5MN8WJOfCPYQSXIXVE4EuFiid X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2016 18:53:29.5505 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1452 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Suravee Suthikulpanit Introduces a new IOMMU API, amd_iommu_update_ga(), which allows KVM (SVM) to update existing posted interrupt IOMMU IRTE when load/unload vcpu. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd_iommu.c | 39 +++++++++++++++++++++++++++++++++++++++ drivers/iommu/amd_iommu_types.h | 1 + include/linux/amd-iommu.h | 9 +++++++++ 3 files changed, 49 insertions(+) diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index 8df3dbf..9f91480 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -4451,4 +4451,43 @@ int amd_iommu_create_irq_domain(struct amd_iommu *iommu) return 0; } + +int amd_iommu_update_ga(int cpu, bool is_run, void *data) +{ + unsigned long flags; + struct amd_iommu *iommu; + struct irq_remap_table *irt; + struct amd_ir_data *ir_data = (struct amd_ir_data *)data; + int devid = ir_data->irq_2_irte.devid; + struct irte_ga *entry = (struct irte_ga *) ir_data->entry; + struct irte_ga *ref = (struct irte_ga *) ir_data->ref; + + if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) || + !ref || !entry || !entry->lo.fields_vapic.guest_mode) + return 0; + + iommu = amd_iommu_rlookup_table[devid]; + if (!iommu) + return -ENODEV; + + irt = get_irq_table(devid, false); + if (!irt) + return -ENODEV; + + spin_lock_irqsave(&irt->lock, flags); + + if (ref->lo.fields_vapic.guest_mode) { + if (cpu >= 0) + ref->lo.fields_vapic.destination = cpu; + ref->lo.fields_vapic.is_run = is_run; + barrier(); + } + + spin_unlock_irqrestore(&irt->lock, flags); + + iommu_flush_irt(iommu, devid); + iommu_completion_wait(iommu); + return 0; +} +EXPORT_SYMBOL(amd_iommu_update_ga); #endif diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h index a3b6e22..6973952 100644 --- a/drivers/iommu/amd_iommu_types.h +++ b/drivers/iommu/amd_iommu_types.h @@ -811,6 +811,7 @@ struct amd_ir_data { struct irq_2_irte irq_2_irte; struct msi_msg msi_entry; void *entry; /* Pointer to union irte or struct irte_ga */ + void *ref; /* Pointer to the actual irte */ }; struct amd_irte_ops { diff --git a/include/linux/amd-iommu.h b/include/linux/amd-iommu.h index 465d096..d8d48ac 100644 --- a/include/linux/amd-iommu.h +++ b/include/linux/amd-iommu.h @@ -179,6 +179,9 @@ static inline int amd_iommu_detect(void) { return -ENODEV; } /* IOMMU AVIC Function */ extern int amd_iommu_register_ga_log_notifier(int (*notifier)(u32)); +extern int +amd_iommu_update_ga(int cpu, bool is_run, void *data); + #else /* defined(CONFIG_AMD_IOMMU) && defined(CONFIG_IRQ_REMAP) */ static inline int @@ -187,6 +190,12 @@ amd_iommu_register_ga_log_notifier(int (*notifier)(u32)) return 0; } +static inline int +amd_iommu_update_ga(int cpu, bool is_run, void *data) +{ + return 0; +} + #endif /* defined(CONFIG_AMD_IOMMU) && defined(CONFIG_IRQ_REMAP) */ #endif /* _ASM_X86_AMD_IOMMU_H */