From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756410AbcGHVSO (ORCPT ); Fri, 8 Jul 2016 17:18:14 -0400 Received: from mail-db5eur01on0059.outbound.protection.outlook.com ([104.47.2.59]:6752 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756343AbcGHVSD (ORCPT ); Fri, 8 Jul 2016 17:18:03 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=cmetcalf@mellanox.com; Subject: [PATCH]: arm64: factor work_pending state machine to C To: Catalin Marinas , Will Deacon , Mark Rutland , , References: <1459877922-15512-1-git-send-email-cmetcalf@mellanox.com> <1459877922-15512-13-git-send-email-cmetcalf@mellanox.com> From: Chris Metcalf Message-ID: Date: Fri, 8 Jul 2016 11:43:50 -0400 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <1459877922-15512-13-git-send-email-cmetcalf@mellanox.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [12.216.194.146] X-ClientProxiedBy: DM3PR13CA0031.namprd13.prod.outlook.com (10.164.193.41) To VI1PR05MB1696.eurprd05.prod.outlook.com (10.165.235.158) X-MS-Office365-Filtering-Correlation-Id: e77695c3-5a8d-440e-b0e3-08d3a746b040 X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1696;2:4wAphnd9dDsm10QQaTXCNYhkztctRD/okQzDQcualfZMGx8hmmOAHrFULyG9OEetw7fyz7RMp5GeIIOF56+rNmuGllOg7Ak9v8Hpj0xckQPGPUsYAKmqdX+7jdJf0s4XGZ0rRjpH1pQ/tAljHbaRYLyWjzFsveSKMjlkYut2E6wGyFrmUPt2INjY9625hOf9;3:uV8BKTKtmjvaRsct5aWZbTx53et4eLNT60qV7KmUeZi/pPyDa7rimMxPztxf9n7GU2wjWKMy6v0/SjnXiAsGVeJfqOGoreKe1WTSBu3Faym9LsuxHS63AlqVvjsvHSag;25:++y2s0u/tUviLE8xKb6IK5l8uo+XCmFsyLVmB7cYF8xGg1b1UEHPjrHRxn4SJpqzHrnade/YOzZpuU/tUODbji9OBb3oI9dfVe/wcjyrwbBR7Vo8U/Jmn5UVeOhZ4f2n/BQBi9phM38IN4mKh5IKoKwAwoJD8e8h4Dwj5pzLtiOZXx/iwymj/2FDv4LX4k7sqlhDPEWqtUCV5jh6D03Ho00pyBmFPhmNyrfi7/7iuMq9wyDfOLS1ZMaGNEl1UHKlO22UpFhJeeHI4A5Isuf2ERSc9Fwr3t80mMHKxQrq9G1FmuaAPekMJqeCxH0oUdC9uAiM1k+L6GT3wCcgpYGbkNJzd8LC3slvgdUs5GPZ/yRJyN6VRn5BcjHAcF6CRt6irtgbhdChHlQhOIXkK1rPaGYLlx0PYIDbX5U/Y57fD34=;31:9uYcyZqSbNuvTQp9268E4p2rExCg0DsBLc+JPcOvPfb2Ipj7kUZzipCiaUNGmQuOeY1x77qUEONZdPGz5CvHAYjvPnmnwW0q+z6w0VOGZ986/Ik1QFi+AMLwiJnj0jCAXTazT6QHcvWy6HS5kg3xe0dcKfNxm3rwBzGvvH1dnysFVEKtZuqJtk62r3hVYiDIE92oyX+WP3rpHDQyzrhAtw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1696; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1696;20:+skRomakj36XMTcBK4jQ0sFCWIEq6L9yk9+J5uW2kK9k5LinEbeL50GPtox80/fxgW6mjqptua0QZGQ/Kh90CcvE20Zzv1vrwUndJy9rgn+u33xHWtaz0tA2SKjrcu2Z7UeZQc/y+e9Ytrm9/ft01WeN+8fdtxttKZfeA0+ehVQxvsACabJ3sa2NZ+zEbDhGQbMN3reaxcrwPsLNSCLLvBhiYBcPNhqykhjqg0epWoV2S4DOqXoF3XTohp4sEmJnMBneypVLf2gntLJhTIjIq4Vp+ItlOBFAt0NGRdVewRf03yeTDA5eQNNOwJZdZPsjToaJQ6s5vtyUAPODJBfI4GpZFUaevIbNj/0cnCVYv7xlqhpPYiE2uyg0QHnOUXP5i922vcoChXRVptLDpMpCRuvRxyuj5nLUf/ig8bx4cWoux81ZK7sNxBmgdudV1KKZRndkl0r6661zUTElCRkDWMP0faQBTHJamw/RC+WQxFhaJtpWpgRmDvc68ePmIQhy X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(171992500451332)(42068640409301); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:VI1PR05MB1696;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1696; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1696;4:aXzBsdzTIF8irwcstl5PzbdepERnCJYHL0G46bvpQc/0Y28h1RaTc5cPuJOKdS7l7xJ1nZAmRPpaLAcKgxxi5Otjdaljd0W9JN76VqLZZgnVxHaz5tHrsuFOGz0aB8EQbrFtlwbX1abdWPuRah1/HIjHtvSh7c8z9MUeeZ3eQiY70UGXgrwwGY4AgQ7ljH7TqvKgRP696+kBqfN6Vv7VRppLCgPMJNp3I/hSIOs7nU/wFZShOPUytLNA1QFDl1uN8xAYquYiHMM1Rt0IVR8JcuvvFyXghlmjwUFNRw9BQiP8VeKKc48ZQWLCjZKkb5lHWtLiNk+ANmTWkcL6YqgpnHENapZnwmBsvtFShJAoXb7iGI5VUdzmmj1mRM3vEomBo4ZO2jED4RThn2IyZn7mZXkWNoKLaLMqbvtBPtjf8Ay6O3z6zAxYiSgys9EF1meNx6QtB9OaaKUNGdFg47twtg== X-Forefront-PRVS: 0997523C40 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6049001)(7916002)(24454002)(45074003)(199003)(189002)(377454003)(6116002)(3846002)(230700001)(586003)(50466002)(76176999)(81166006)(50986999)(31686004)(8676002)(54356999)(81156014)(42186005)(101416001)(47776003)(2906002)(36756003)(66066001)(19580405001)(65806001)(65956001)(19580395003)(7846002)(7736002)(305945005)(2950100001)(83506001)(229853001)(64126003)(31696002)(33646002)(77096005)(15975445007)(105586002)(68736007)(106356001)(92566002)(86362001)(189998001)(107886002)(23746002)(5001770100001)(4001350100001)(2201001)(97736004)(65826006)(2101003)(18886065003);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR05MB1696;H:[10.15.7.181];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;VI1PR05MB1696;23:9+/Ie0Yl53tsOS+JrgQtLUZY0QkJsP/mYeDwN?= =?Windows-1252?Q?+1qJIIo6zvUBTeU+zyNnBQfKZLw396GZZOiwM/pYk7MvtNEgfgo2bRX5?= =?Windows-1252?Q?TsQjLkd37gU9r9Ip3QfqBTW1J0t0ipF+ywST8fHaK5HzLtl1nDgMtKas?= =?Windows-1252?Q?sYKOYIJeoxTU0ikuXW3esDsWPnITPGujNdRKSUwl9P4L278RE4ygYLmA?= =?Windows-1252?Q?mPGswIGwPm28RLWYTsIzdXZ2NW8qiXVZIa0ZmO9nmfVBSfY6cb3K6X9i?= =?Windows-1252?Q?oqM7uYa0uW6IRpfK8kX+DbWbGSg4GkpxSpJYXOwXmxfLNQdUy1/v2dNZ?= =?Windows-1252?Q?zgfMZGgW8NYqocu9ry+/dTnJs6HNiQWkQXIl2hARNTyx3qDZ3dWyUa5F?= =?Windows-1252?Q?0JcPhM/IKAQ1jClC96wV07oTQsNmtHIbnZlAvioXC/JUIHTowOeYoI2A?= =?Windows-1252?Q?8G8YAmFKXVfEs/NgBlOjoOZEkIok7Z5ZX63WSNhBEtohH9859P9CvIJL?= =?Windows-1252?Q?O9Kpi8guQ2ImJTsl4/jELzVPulAUNzU8sIW2NwnFEMdRFGw+AbbOTpLB?= =?Windows-1252?Q?S7xuqCdTUovqzmzQHHou2mFSksUg+w471rzeTZxJsmvxqJvD9t/V6cKV?= =?Windows-1252?Q?hdS4jwPaSW5RCuLeSCfTRDcQUhMmz0cHRmLBlrADDlYTGqAYkCCn2A8w?= =?Windows-1252?Q?pl172M+AoPhZOzSNVOBSkFsx7KakWe4pg891kwh7cJQQMHRaSHTuqLI9?= =?Windows-1252?Q?hPRQqLbECb/C9uMZIWRdizU+Nj6QEY+AZTc+1Gpixtyf8z8vZVsJiNQK?= =?Windows-1252?Q?fq93Ej+6eGGFEYGaEq9iiF2t4QlRtX+1EfS5wcoj2XR1E8VLoXeavfv/?= =?Windows-1252?Q?nxVAOVlkrLvAVZHM5iqMULeIDSkQRhyc0Pwa/gG0ooLeZb8E0RTBPbC4?= =?Windows-1252?Q?gxwnTmM+lKiPXC1vQkCM6/nns073gHlS5rmBIIvEP1hIN+Z3nuEiMo2Z?= =?Windows-1252?Q?pp+mnGzb7QQ8zrJOb/UyFm01gzIUT1NirOs60/tzdf4OfQhhrcy9R798?= =?Windows-1252?Q?LHookeJa1pIAgudne9eoUCvEc6f0KF5G4toaka5gqYR9BC/zrlSqfBAN?= =?Windows-1252?Q?e37ZuOrw6XdMxIyo7fAdH5lq1nEmkIe5tCaTsQmLb2ryQBNC5TVyfp4Q?= =?Windows-1252?Q?0UgXX5Lv7yMaa5ragKpw9d5Jj3kqEU9QI2xOE4vDdOGEDYW51gBRubCr?= =?Windows-1252?Q?j7I6RLbjcV+DhGL8d69AILMEsvWaz+2Kss2y5y+Yj05XnQzhqoZ9N95f?= =?Windows-1252?Q?LsD+Iafk0Hu6gbP3OB9KMIoQ2uLKH2i1jGIwfZmVRNJ1dA+lUZSS0V6W?= =?Windows-1252?Q?TmhhUFKELQReqFwOVd+a+8SwIUxsKNwhO36bt+bIP136BHxX1Ur9/L+g?= =?Windows-1252?Q?v3iCCSJea/RpUcTKH+FIcCIwzoCtL4KKUD35xTBTp6V0HP8WJw9KDOpQ?= =?Windows-1252?Q?fSMRM1FPO4m6m37IXAP9XV3nX8470igTmt6MAqMWOZFwaTmew=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1696;6:DSKtNhmzmzSKGROwauGjblbQBvLgbHj7E4FwBTtbq4/SD9aqS5ZotEt5CESDMc/CVr7NDSO4gUN/TKl/GYtdTm1zwnTqY7tBiWTTfOer4bd02PGp+R4rh/q5v5WR5KND8h6V/+8tvyBDEcmo3VXVuXhEi52Di1ukG4qOk3R1NGpepaEPse1QYt+TEKPOSRNOs4PBKGjExzeixoG7l8AGlzqTsC37dKiJA+mp3TDS+MFMWZvHn8VEBsfARSVO8t3OGf8VFuvOkn0w+2wXk4NzQws/LB9w6z7erDDlaxEeKWh3DPK5IjldTy7t68Ls2rWqsu4qK6nR8Tv+ZJCRBvajGA==;5:vMFczU6vct+b13wBCf8BVRoLLCM2ELWEqvg2E5vnmF6kIwZmzOpN8HvBES8jCSRFYppF3kwHPrxOgcMbyFIraWXSLY6MHZ8Sx9Ay9yny7UGfNP+RiSVPEBVcLYod7JtKOWj6lBAlHTMIu1lTusDIvQ==;24:SXYFb1Aj1S8+blg+jS6S5b1jxN6q+O1B/JwVv731QE3fSp/BEar+haG8OOejT4t0QnaAP+ICVIkobiz9VRNj1k/5Wnj91id1Q7ehbAIfYD0=;7:x/0bsT3g4xS1aCxuVW8fEU8XfX16HiFWDwWGTyTg9+skoobfsDYksZkCkITZEBa29+FfHhWve2r4EVnc5hRjY6TETWNOKrSv/qhxYPjjDL2aH7d4NXmZZrL/jhtoGR/IYJCWDGTXWNekQ7WhVRFdQS3+dCSkZC3qxAg0i5SrET1o5lG8rmGGiZDN4udNdPtioVXhMgCsfgP2Ju/5alk89GFVz5WgA2GOGo1fsWUSZu1WsH15vO0b74V277DbYwfq SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2016 15:44:02.2940 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB1696 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ping! I am hopeful that this patch [1] can be picked up for the 4.8 merge window in the arm64 tree. As I mentioned in my last patch series that included this patch [2], I'm hopeful that this version addresses the performance issues that were seen with Mark's original patch. This version tests the TIF flags prior to calling out to the loop in C code. It makes more sense for it go via the arm64 tree than to wait and go through the nohz_full tree, I suspect. Thanks! [1] https://lkml.kernel.org/g/1459877922-15512-13-git-send-email-cmetcalf@mellanox.com [2] https://lkml.kernel.org/g/56E9A3CE.2040209@mellanox.com On 4/5/2016 1:38 PM, Chris Metcalf wrote: > Currently ret_fast_syscall, work_pending, and ret_to_user form an ad-hoc > state machine that can be difficult to reason about due to duplicated > code and a large number of branch targets. > > This patch factors the common logic out into the existing > do_notify_resume function, converting the code to C in the process, > making the code more legible. > > This patch tries to closely mirror the existing behaviour while using > the usual C control flow primitives. As local_irq_{disable,enable} may > be instrumented, we balance exception entry (where we will almost most > likely enable IRQs) with a call to trace_hardirqs_on just before the > return to userspace. > > Signed-off-by: Chris Metcalf > --- > arch/arm64/kernel/entry.S | 12 ++++-------- > arch/arm64/kernel/signal.c | 36 ++++++++++++++++++++++++++---------- > 2 files changed, 30 insertions(+), 18 deletions(-) > > diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S > index 12e8d2bcb3f9..d70a9e44b7d6 100644 > --- a/arch/arm64/kernel/entry.S > +++ b/arch/arm64/kernel/entry.S > @@ -674,18 +674,13 @@ ret_fast_syscall_trace: > * Ok, we need to do extra processing, enter the slow path. > */ > work_pending: > - tbnz x1, #TIF_NEED_RESCHED, work_resched > - /* TIF_SIGPENDING, TIF_NOTIFY_RESUME or TIF_FOREIGN_FPSTATE case */ > mov x0, sp // 'regs' > - enable_irq // enable interrupts for do_notify_resume() > bl do_notify_resume > - b ret_to_user > -work_resched: > #ifdef CONFIG_TRACE_IRQFLAGS > - bl trace_hardirqs_off // the IRQs are off here, inform the tracing code > + bl trace_hardirqs_on // enabled while in userspace > #endif > - bl schedule > - > + ldr x1, [tsk, #TI_FLAGS] // re-check for single-step > + b finish_ret_to_user > /* > * "slow" syscall return path. > */ > @@ -694,6 +689,7 @@ ret_to_user: > ldr x1, [tsk, #TI_FLAGS] > and x2, x1, #_TIF_WORK_MASK > cbnz x2, work_pending > +finish_ret_to_user: > enable_step_tsk x1, x2 > kernel_exit 0 > ENDPROC(ret_to_user) > diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c > index a8eafdbc7cb8..404dd67080b9 100644 > --- a/arch/arm64/kernel/signal.c > +++ b/arch/arm64/kernel/signal.c > @@ -402,15 +402,31 @@ static void do_signal(struct pt_regs *regs) > asmlinkage void do_notify_resume(struct pt_regs *regs, > unsigned int thread_flags) > { > - if (thread_flags & _TIF_SIGPENDING) > - do_signal(regs); > - > - if (thread_flags & _TIF_NOTIFY_RESUME) { > - clear_thread_flag(TIF_NOTIFY_RESUME); > - tracehook_notify_resume(regs); > - } > - > - if (thread_flags & _TIF_FOREIGN_FPSTATE) > - fpsimd_restore_current_state(); > + /* > + * The assembly code enters us with IRQs off, but it hasn't > + * informed the tracing code of that for efficiency reasons. > + * Update the trace code with the current status. > + */ > + trace_hardirqs_off(); > + do { > + if (thread_flags & _TIF_NEED_RESCHED) { > + schedule(); > + } else { > + local_irq_enable(); > + > + if (thread_flags & _TIF_SIGPENDING) > + do_signal(regs); > + > + if (thread_flags & _TIF_NOTIFY_RESUME) { > + clear_thread_flag(TIF_NOTIFY_RESUME); > + tracehook_notify_resume(regs); > + } > + > + if (thread_flags & _TIF_FOREIGN_FPSTATE) > + fpsimd_restore_current_state(); > + } > > + local_irq_disable(); > + thread_flags = READ_ONCE(current_thread_info()->flags); > + } while (thread_flags & _TIF_WORK_MASK); > } -- Chris Metcalf, Mellanox Technologies http://www.mellanox.com