From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932428AbcHPCms (ORCPT ); Mon, 15 Aug 2016 22:42:48 -0400 Received: from mail-co1nam03on0046.outbound.protection.outlook.com ([104.47.40.46]:41568 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932225AbcHPCmp (ORCPT ); Mon, 15 Aug 2016 22:42:45 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Subject: Re: [PART2 PATCH v5 06/12] iommu/amd: Adding GALOG interrupt handler To: Joerg Roedel References: <1469439131-11308-1-git-send-email-suravee.suthikulpanit@amd.com> <1469439131-11308-7-git-send-email-suravee.suthikulpanit@amd.com> <20160809144347.GC1437@8bytes.org> CC: , , , , , From: Suravee Suthikulpanit Message-ID: <65d32f61-7d23-b7b7-cfb3-8ec4653a0e82@amd.com> Date: Tue, 16 Aug 2016 09:43:00 +0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160809144347.GC1437@8bytes.org> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [115.87.78.219] X-ClientProxiedBy: SIXPR04CA0057.apcprd04.prod.outlook.com (10.162.171.47) To BN6PR12MB1441.namprd12.prod.outlook.com (10.172.24.18) X-MS-Office365-Filtering-Correlation-Id: f3702c9b-5877-4390-4942-08d3c57efe8f X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1441;2:2SMiikDaUdJuhjUarRvToF+gMCkNh3cDK1Yy4dgu8mNei2Xio6rj4c+LQA4E9etOyj2H8+MKgBaY+dEFZC7rFw29TXlAAs99Zz1TxlIQ3Q6CpyO1LmqGVl+UWcKi2oH2eMgiDXQdItlS51USV+94ThpeDQdUFTA2SHgE+8NYEr4rluUgC21+lBdh9n5DuRM4;3:gDOvv6pptHkVF1n3Ov5Gne8Jay4uqNEX3lb97bmGepJkwnxYyxBd42371atKl2xecIll32HV+bjqDXWf1K0sNIBNdxmYIUaL/ygKpogNnrs8Pz2G46qLq6inbAGS4eD1;25:u8ftfa4vxq+sEwd/EMH8knE6dSSE3/cGiYOAaTQvVe301h7vrECpA/OAsUr9fxvWPwOGQPj7E8b/3oelTVxxNRFqq3obZyXJF0mE1cedXFrzGLPLJOhH02wm05b95MvUCiJmqmy4oTxZPz+CmgWemv1pGoyPR9R8q8HgFvRS2/KpTOVrWPvAPbHOOkOpDqHQyfXMMXiDdGihmyHAT3/KUYW+o7hS8+M7jthoVUEpr2Lu8D+E+5BMsxPBDOmeJPnBwnkjvRG2xd2tZapUK2ynpEShUTRo1RMUrhsNZg61PE5usLqyjUOY1vSJ8QjqzYSkRR9wq/T89vfunKiS6Cil4p37zfQ13RGcqrK4+gjcbPfccoMY6b8v/cNi9uHR9wCuVCGvZRS0wdOKG+8UfecKfM62oEvsDtAxddL2W08nxf4= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN6PR12MB1441; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1441;31:z7kvBjSE77W1p3/T7WYov2mPZsUqbKvatUbV3SW3FMJi34Q4Q44LOnQ7RVft7/l3ELSo0SMfL+UcP07Er6cJv0+tb3dl7F8+4bOrXjV3uAN4s60XQjLgbPxolcLMZMD2WLWr41wnSTn2tfu9CamIPkH5Tu6sGsIwCxckFwfU3aDr8IycttdkvRmqrZ3CjRLJD/3xfiLe57R46B4A/pc/WKQmBfYtkOXEgp3DgmOM/ZQ=;20:XnC5aN2Ycs0kzqROW950C58GrHsoF+16FXWaVj+37Lkl66gBWSUDLhEITCyVKDRJYDpWFIXZ2lhCBF8zl1SQUMSEIZUhSmNXYjWqJ4BCHk1kqIx2GK5fD+59tMFEEnot5qX7kx+b0KDaKcsLwowFdsFqMWIh6wWd/DAr6/VxBa700Qb/G8q3pC6+FQxlJDmyDw3Gv+NC33K0DF8Mio5h0gVoXNEXMqVKFUobpdzZSr6x4aYKiUwT8PHxFAio6GqgTPG+jTivfjhk4fZwQBVqS2TXTehm0SqCNMFTQze6/zHmYOf2+owHGpcCCAAS7ToMeKOOLCzvzkIN+QmRdEkdl/F8Mq0qMKybAl5gPqpB4IzCMhBEk6Hsyd4KXDXusbMBtfIjL1UDttN2KHq3g7HwlHnnh5pBsgaL+bxiFZfhScjro40rfXkyJwTRwZoB3OGYFV03+i0+MDENtfPojRPhnPm6X3Skg2oEikbNuC1/cxAUE3m8HGw5R+mVcjCXTavw 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)(10201501046)(3002001)(6055026);SRVR:BN6PR12MB1441;BCL:0;PCL:0;RULEID:;SRVR:BN6PR12MB1441; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1441;4:74wFn/a6gof5thk+gIq0sS5T7moGrK7e7xeHVE5u66Ra0TTrf2QDTKA7Il85l9t3rRQNDZEtPrRW1qZkT1WDoVuB3tuL5hbYmgzGE2YIAPYR3fknnm5HsVJv7AaDoBewHltdDcQbeN6Cp3RdBT50tMbhhmfVgC+VLJn1Zhm4OvN75MwDYOFg2lMaPKQ4DATr0aG2l1H56dTqFvfGJ6tQicH+19K8186lOuvCe5FmM+NhDWXIXKTNUqFGO639pePETcZNKEazvmgcddIgvNpVdgglSBX50yjgmCSpXmI+kj1PRD+qbreQeKevvesiGM2RJ0Lv7huwisdPiunw9KQBrYAw571tJQURurncxR4QMWsdUEnVmWcjDj374WLvdIrUvjSScul3RJ34wN9ki/YYsesGUZbCgvuXDCZ0B7HN7/xMos5KLljPGOd6o3OPbZKb X-Forefront-PRVS: 0036736630 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(199003)(76104003)(24454002)(189002)(106356001)(92566002)(50466002)(81166006)(7846002)(19580405001)(110136002)(66066001)(65956001)(64126003)(23746002)(2950100001)(8676002)(4326007)(230700001)(3846002)(6116002)(81156014)(77096005)(36756003)(586003)(2906002)(54356999)(305945005)(31686004)(50986999)(76176999)(189998001)(19580395003)(7736002)(31696002)(4001350100001)(33646002)(97736004)(47776003)(68736007)(101416001)(42186005)(105586002)(65806001)(83506001)(86362001)(65826006);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR12MB1441;H:Suravees-MacBook-Pro.local;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BN6PR12MB1441;23:r7aSOqjLFRYO1jjjhzenfdsW2IClyrYJitxQI?= =?Windows-1252?Q?iAxyy1cS/Z2Zb+TR2L867Z0RKSWVYlRK3hn0musULoNSYFlfq9Y40CaR?= =?Windows-1252?Q?4nNDh5er6PYBTmeCjn4Jxdjb+KdcT/7uWMD/BkwJyg0iEHbh6p5/lwr8?= =?Windows-1252?Q?4mFigM8NLBwfhkvNYlCr3os0/nFBXqPo/RcLo7dQzji15CKQ3Xg4G4pT?= =?Windows-1252?Q?XQZwv8r8la4+VReRc8+MxJsai5X8p3XvpHaBNMGezlOxSiLaRAkfxTEI?= =?Windows-1252?Q?GCvGeeZ/jpNHQq7/RbNJngAvmRxm20SnMkYJsIHKvbvpkGVH0/jQeIaU?= =?Windows-1252?Q?iMVzW4ua5pReE9/NGy/cwTxdT/qalS/1Uux/+RMFUKqEKL6+k+kU+iBV?= =?Windows-1252?Q?WxXnAgEabtJbv69tAMkQjkbV50B8VtW2URNIujIHPXDG6IwrjqBvL/ZX?= =?Windows-1252?Q?uV95pGo+qomYVAwgazTalWdpD3RljH6TKSOCRfmqp2GoRGkm/I8kfLSA?= =?Windows-1252?Q?9ALCDzccacSIzuoF7q5O7LKJMLyLiKCNAo5SFddM8+rtcYzMsqd6mEqY?= =?Windows-1252?Q?OIrU5oa39Nr6Z0OF5kKAp8/oVDAkCbOjmAszPJIHht4H22D5tjOGhbXc?= =?Windows-1252?Q?5kM7fn4tLBVHCVZC9DI+UI/AqJEkcYadg/7y7QsgccR0zJWqvRpy7tqx?= =?Windows-1252?Q?ST80qzJ7eVtMSFQigZYpA/qYJdryR40EHQAo/RPgK/1+yO5uOCHYz64T?= =?Windows-1252?Q?PVGQpc0KKbAHQUfMsatufsLf11A8YDLu23n6/QJcJDI0hiRNw0Fg9R/1?= =?Windows-1252?Q?0Rt6rqyLr6+WQYnjWh32w/VVynTInpPYAl0mSapj8iDNPT4IRXIR1DaW?= =?Windows-1252?Q?U3lJzDcmHEK01JZhaJRsehHLsNhdlEjudgOlPCT/KKj+jQYLcL0Bg0cD?= =?Windows-1252?Q?cg20F1tX3vMCe3UBBSICD29D4iS2KJXC7Shvs1nnLq5PiDnNHGz59VfY?= =?Windows-1252?Q?AtMdsdqNL8P/mdqBNnkDjb6I/6WkWPLDKCe6MwnUAO4qHTRVcGBkHkLA?= =?Windows-1252?Q?BA1GTDqYU6DfzRyfobOLNTWWAIz2MxbOEYFIsXq6v7RVd8hAFn1Nx9hM?= =?Windows-1252?Q?YnCuecEBKjgvvfmBfkDbF+it0xYpSPVEnuLvlZxRpVgX+65ejP5MYw9F?= =?Windows-1252?Q?4GgKH+7T1xsU8DapxVSy4WDbpjWvHbHLq1qWzP13Pk4TkIy+7KhNpsFt?= =?Windows-1252?Q?d108nuKgfkG4hDf+frsSSEoYAZ4gRhZ6U6EAkuzRJy6AI2zRpHDwbKjm?= =?Windows-1252?Q?DNqsFhRxb5e4N+KdAhQfyxdZaPSkoT0QTeEoI7giBki4TY=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1441;6:IUJIhyoD/hQVwI/1++uwiWX5KONjVPQNDv5g6vWrTg13MBgvF4MofhlmSHzMCc1T3Tf5XmcV3hplkf2OP6+x85v18TNGcZbZooxZ0W7PuspMoM85rdjW1a+wqS+98T8ry8+h49LPnVEOJ1pnVayDGqAw6irQ33zYiEamorBCvZTwZ8qlDAlc6hh5JxCtvh3MTuGsajs6TIAA/M8+9wSnHb53FMxEM5sh8cWvP+HdpIeuZMAIA1XWT2tukVm81/nOKKOo+rhmfJ1waI8kLNPSWdPZuXQT6GihZwczBYV2JMMSRw1iuDca3TTdWDCmNsHCXS0iKHwNh0PyJHz5HFvfDw==;5:6oSChMnb+FRZFgHjS0jnIcP9sMfJySzSEYvJxyfRovo38XPvcAEZ2z7xfrXaEF1hIaU1rvEciKdRDf/Ho+YsQWXH1JmFvBWvg1AqzUt5n2XMIZPt9yafSPjgwRECEHGNuWPp+RuK2IjavovlIBao5g==;24:NuVoSOdlcMPHObO8zBSFwHt1huo5qVRtW6T5LNEU6w1HujhJNkLzOqPPcI/N458flByI+Jo3di9ZFIeeIk7LmWpxX/rj1Zj3SBTslQTF/kk=;7:oMujkJu/Weka4GNk7M8wTf/jMjE99JPkkRWls3RB4+JeKyZ+/q/CA0h8VAk3+2cLXSW8tqsrj4K15tJPcK2v27B036NBzGcruuaZfiLj7YvmBCD42NpNU5v+QHpB1uu2miGO5J/dKH+bOqyTvj6O2PAfuVTLOSZFM41LBfuHj7EoBZf5/pC0H8EyhQn4u+ibXx8TL5en6fhIxRBHLMviAt3UwoNhfELw8vdLL35QZofc5AUeFf9GQP4cmIJ0bcBy SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1441;20:x2Bl12vtSUlD3aqMghJUIogwCIxlyBSrZGd58cpjDZIpCo7JL2gQuFiXnQ9KVDoWIZqPeEKLsiVzDBCpccFVw51H/lYdCkh8r6fhwXSAelinL9/WV5FrIr+qBA439TMwHUjPxhf5Q6K5SH6dhKjpV08yTFBgB/tqR6xe/Oct4iRadlg1hjvUxvcFMBqlL4B1llgBYZ/GJTlAYlG4EEpQqt3zQeMzeyw5RhsqAiG+EFLVuf4dsygdXSh0eIBUE+1n X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Aug 2016 02:42:39.0644 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1441 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Joerg, On 8/9/16 21:43, Joerg Roedel wrote: > On Mon, Jul 25, 2016 at 04:32:05AM -0500, Suthikulpanit, Suravee wrote: >> From: Suravee Suthikulpanit >> >> This patch adds AMD IOMMU guest virtual APIC log (GALOG) handler. >> When IOMMU hardware receives an interrupt targeting a blocking vcpu, >> it creates an entry in the GALOG, and generates an interrupt to notify >> the AMD IOMMU driver. >> >> At this point, the driver processes the log entry, and notify the SVM >> driver via the registered iommu_ga_log_notifier function. >> >> Signed-off-by: Suravee Suthikulpanit >> --- >> drivers/iommu/amd_iommu.c | 77 +++++++++++++++++++++++++++++++++++++++++++++-- >> include/linux/amd-iommu.h | 20 ++++++++++-- >> 2 files changed, 91 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c >> index abfb2b7..861d723 100644 >> --- a/drivers/iommu/amd_iommu.c >> +++ b/drivers/iommu/amd_iommu.c >> @@ -741,14 +741,78 @@ static void iommu_poll_ppr_log(struct amd_iommu *iommu) >> } >> } >> >> +#ifdef CONFIG_IRQ_REMAP >> +static int (*iommu_ga_log_notifier)(u32); >> + >> +int amd_iommu_register_ga_log_notifier(int (*notifier)(u32)) >> +{ >> + iommu_ga_log_notifier = notifier; >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(amd_iommu_register_ga_log_notifier); >> + >> +static void iommu_poll_ga_log(struct amd_iommu *iommu) >> +{ >> + u32 head, tail, cnt = 0; >> + >> + if (iommu->ga_log == NULL) >> + return; >> + >> + head = readl(iommu->mmio_base + MMIO_GA_HEAD_OFFSET); >> + tail = readl(iommu->mmio_base + MMIO_GA_TAIL_OFFSET); >> + >> + while (head != tail) { >> + volatile u64 *raw; >> + u64 log_entry; >> + >> + raw = (u64 *)(iommu->ga_log + head); >> + cnt++; >> + >> + /* Avoid memcpy function-call overhead */ >> + log_entry = *raw; >> + >> + /* Update head pointer of hardware ring-buffer */ >> + head = (head + GA_ENTRY_SIZE) % GA_LOG_SIZE; >> + writel(head, iommu->mmio_base + MMIO_GA_HEAD_OFFSET); >> + >> + /* Handle GA entry */ >> + switch (GA_REQ_TYPE(log_entry)) { >> + case GA_GUEST_NR: >> + if (!iommu_ga_log_notifier) >> + break; >> + >> + pr_debug("AMD-Vi: %s: devid=%#x, ga_tag=%#x\n", >> + __func__, GA_DEVID(log_entry), >> + GA_TAG(log_entry)); >> + >> + if (iommu_ga_log_notifier(GA_TAG(log_entry)) != 0) >> + pr_err("AMD-Vi: GA log notifier failed.\n"); >> + break; >> + default: >> + break; >> + } >> + >> + /* Refresh ring-buffer information */ >> + head = readl(iommu->mmio_base + MMIO_GA_HEAD_OFFSET); >> + tail = readl(iommu->mmio_base + MMIO_GA_TAIL_OFFSET); > > Couldn't that cause an endless-loop in case of an interrupt storm from a > device? I think it is better to just read head and tail once before the > loop and update head after we get out of the loop. Any new entries > could be handled by the next iommu interrupt. This avoids any > soft-lockups that might happen when the loop runs for too long. > Sure. Also, we might need to start handling GALogOverflow as well. However, let's put that in a separate patch series. What do you think? S