From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753450AbbJTUi2 (ORCPT ); Tue, 20 Oct 2015 16:38:28 -0400 Received: from mail-db3hn0250.outbound.protection.outlook.com ([157.55.234.250]:54016 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753410AbbJTUh1 (ORCPT ); Tue, 20 Oct 2015 16:37:27 -0400 Authentication-Results: spf=fail (sender IP is 12.216.194.146) smtp.mailfrom=ezchip.com; ezchip.com; dkim=none (message not signed) header.d=none;ezchip.com; dmarc=none action=none header.from=ezchip.com; From: Chris Metcalf To: Gilad Ben Yossef , Steven Rostedt , Ingo Molnar , Peter Zijlstra , Andrew Morton , "Rik van Riel" , Tejun Heo , Frederic Weisbecker , Thomas Gleixner , "Paul E. McKenney" , Christoph Lameter , Viresh Kumar , Catalin Marinas , Will Deacon , Andy Lutomirski , CC: Chris Metcalf Subject: [PATCH v8 14/14] arch/tile: enable task isolation functionality Date: Tue, 20 Oct 2015 16:36:12 -0400 Message-ID: <1445373372-6567-15-git-send-email-cmetcalf@ezchip.com> X-Mailer: git-send-email 2.1.2 In-Reply-To: <1445373372-6567-1-git-send-email-cmetcalf@ezchip.com> References: <1445373372-6567-1-git-send-email-cmetcalf@ezchip.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD050;1:pHY24wzVeOsBLae2kXRGqe0IFgMTgoL1SWIkiJdVKoZ3n9v1FsIx0sAmluD6IdKbdvMyfhNSul06F9Uh4hppIBLrRM2TcEEhPOccMQ3mY9eH1DEgZJWjdGDvVJlzY7UyfdjFnjEi33AvqQhxp+p3siEds33PNMJ4BwFNtJPrGeW94Fay5Z8olFqU1up1bhZl45nPQy5zt+8J+XR9nGZ/CJOpeNT5nzDs+DqXJcKAbOFUxOgI3eJtaq8xupmsL3g7vAe97wKLNGLekb8x/1IqUtVv+cbdWCXOIEfQLq0/YlUMxq0UVIWInATE6lplNLdG9Hd5YQwg/DmAf1dzcstLo69ShoGh1i4PS2ek31wOsZ8= X-Forefront-Antispam-Report: CIP:12.216.194.146;CTRY:US;IPV:NLI;EFV:NLI;SFV:SPM;SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(19580405001)(11100500001)(106356001)(5008740100001)(105606002)(19580395003)(50986999)(85426001)(42186005)(106476002)(87936001)(46102003)(106466001)(86362001)(47776003)(50226001)(104016004)(189998001)(48376002)(81156007)(229853001)(76176999)(33646002)(5001920100001)(5001960100002)(5001770100001)(36756003)(5007970100001)(2950100001)(107886002)(5003940100001)(97736004)(64706001)(50466002)(92566002)(6806005)(9376005)(334744003)(921003)(4001430100001)(83996005)(1121003)(2101003);DIR:OUT;SFP:1501;SCL:5;SRVR:AM2PR02MB0418;H:ld-1.internal.tilera.com;FPR:;SPF:Fail;PTR:InfoNoRecords;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;AM2PR02MB0418;2:3xTOQBkYM2CmTVkLHLAaxkoi1Mqedpwhh7PsDpNGGA10Fa0FPp2HMUR2+hPlvOaU0oQy7fssFMwhHnpm4k69KUHXo5b6kScHFKKWGyjICf4PrVzSWB/rIf/hl3MA6vrNuwbP6mDUXeGjj2NcCaWOFmRrVl30YO/dy0rGIZAWUvw=;3:qooY3yd0P2idJ1XMpnHbb79OZSzT7MKvRm1wJyf5Ph8PYqxkczwOxqNZ/s8UKFB+DBJf1NbgI0oAe5ieViWVkh4QkKDYi+z4irSsfAr1mMvCnpb26FmvMYv/DrzgMNIfkJPJujAqMDsBR824cbYro2pPA9rVVU38Tu64rM//TlOGqRKkrZ1lyWiaLaCEZPcJ4hyDs7iQJpkO0z3TEXoNh5WoePgeXM6yiAzBhn4Bk7t4/pbJCODtFwfJzVA1FqfT;25:WZ2TRAe0HMcWaZjEhB1/ycke9YYApe3ZDZCBb7YtNHCDepyK+yjWVVkHhkPBNHASKja6Oy6H/gxuBKuJm/5w4AafFJ0JCmd/MQP5XLZfzk3I5NlBTPGlVdo1cFc4bE4tKSRbXIv7xeYOiCBIYc2INuUns1qD653H9CYmgjmmEqb/BIi44zFyMZq/lhbhigA7nS4+E12VDrM0pzOtT4dyP60vQDtPycvbbqFuaJcxhrAnz1RTVjlq0gKGjd8mgVXrcysY3TUiKhPFBpB4hTTKOQ==;20:JWuY92n3d6JzZCDGGKLwXt93EfY9g5GqNVjdPduDEh2FBiZAo98hr+suYa3bifoLJ2Q4vyI1PWSxowSnB9RhPoHUmUDftysX0y0SwrO9v4PFRxA78n4VHQrx2AtX4T9Qnv7rmSzqs8oYepKJMsz9arZElvLanKgvi1hYxvhW840= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM2PR02MB0418; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(121898900299872); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(3002001);SRVR:AM2PR02MB0418;BCL:0;PCL:0;RULEID:;SRVR:AM2PR02MB0418; X-Microsoft-Exchange-Diagnostics: 1;AM2PR02MB0418;4:kx0phQVkhrPAgMD/nhrHXIGYxDFIWBOBL7hzDEXRoTqXqmPrDUlE9ka5s/X2fLc2eq+eVqGs+3sO6ihJbs1PpypCResZGlEfk3z4SGGOHC/DCgfRd7uXL7if7Rpn3B0HoyBmqK1rstxlZGpv7qfXxDHeoVfy8KDgG0QsRODe8dkCcNeVo1xh+/Z+yGvfEBRPZXKyD2crMwk5eacwzrePyrdiEcHdpLzu+DYXJHZikhxqlTnlxkOJzeV2ZIqdKBtZukHwJr31SodSIiL+gsjWbzQVCrV6IhBaqEcJ8JdwG+bpTTW44Iw2vAiqv1jNv1zLYjkcPs1fACEUvkAPguyh0m2PAEhXXAhIx7jxMOTm8D8= X-Forefront-PRVS: 073515755F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM2PR02MB0418;23:ZMy11ehrBH05moLRlft/MsDo3UdXQlu7E/0iE1MH4?= =?us-ascii?Q?qAZxjZJZA4uTvASwt4U+ZZmlSFJu8/wWw8k384R2i5VRhnFT+dbwplrLjJg/?= =?us-ascii?Q?FolQhsvAIkgA8cm7JKtBOtl85t4SbEHFaV9QwRYXpMN6XbSErJa6DVj4a1Wt?= =?us-ascii?Q?ZVSV9lhHID6n3j5d+ziP05eBRafHomUgwvVvaZ5NH8vZacKOJVtSpwNvV7vH?= =?us-ascii?Q?zbIhU/dSi0BVbm+9ujPF3YPDG9vwJx1pGfTZ4GoMfjc2MTlJF703aANv45PS?= =?us-ascii?Q?+rB5aoNfVO+H7iZgjH2c4eKnU5Ar9hQlQs+l+kZsWBcYvHqh43ky/fFJDwxC?= =?us-ascii?Q?cwkxN4C2drd+9RClKv13rcwJckTsYT8L1XGzVMdihrUV8ueb91SN/u++/xXK?= =?us-ascii?Q?FOKBRVqt7hS3SuLUmW0HsoMIvkGg7f7K1ot3DyZkb02qRPErotpNYadcgL2b?= =?us-ascii?Q?Iq8KHgmR4H0AHQAvTnEkO8dDJx7zY9NTQtfHE8nFvkrW0XSr4ZSj3+KUpNsN?= =?us-ascii?Q?6ZYTmzV3LRjPil54/x+lWEQhQ7t+mK0dDa/VPmQq01ccQk7JtoLRKjp5IkU2?= =?us-ascii?Q?o0E9MbErfxNWpUds/Gqx0phmyq+gw8y3uVw1ViY/nwuDisVXV8j85mgdpI/V?= =?us-ascii?Q?5lG/XsbvPvcXK/ctSyTBdYqMp8aUx8hhgTDiylPY3g1QIkVw+Ke4v/FfV2oJ?= =?us-ascii?Q?S2lrgC6jE90q3UnoTyj+dGVnn/rT128JpebR0JamDsLUpuiG/iPn1srqobU9?= =?us-ascii?Q?sWfUfODW2ZP5TL3zaoyoNozjlyHrQfLK5EvlW2u//gl81DNtmUqt9H7NeTMY?= =?us-ascii?Q?Kpd8KLNXiPDa6kvrlZl45mSGkUpoM68JiYpx17dOd9EdDqJo6W88NQK+0hVZ?= =?us-ascii?Q?6oC5HWUMUYP/dT7IXx64fKuvf9fM1SaIHB+g134ynLoDfI9m+R3dFEjiwrmz?= =?us-ascii?Q?v1hVUSYvliZ2s/P3R3TxOtR48nOiMIMEdUh8IrDQ5fFB8Za1Ib7BjPkcmrFS?= =?us-ascii?Q?XpQE3YnSnDFebzzDTAYjC9bGcYBpKIFrGANWZ0MVVY3RslTAKHgwt1N2hVzK?= =?us-ascii?Q?YIjfzCSyI5Q3DBeW23Q7/Unz2RTE0sWpHPon/IhyrZVgxAZQVDgBMWF4lh98?= =?us-ascii?Q?MQA4IINrExjKMhwPR6FJvuaCXcTL2rXqGWNnkAnqPUp4svysvIqeKhKh7cWv?= =?us-ascii?Q?0eWW33aC26NJ0FXvvMx5+YdHve5y9X+8KwmGLRCna1IIF1FPu/zkzCP+M1dJ?= =?us-ascii?Q?k7hqINk9enMbF+74cPTaDhQYvr4UOaKb1ZQgjZ+0+lSb9zDaRhZkKEXsIL3i?= =?us-ascii?Q?SZgYIAdD35/wgyYk8CCoGE=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM2PR02MB0418;5:ax1mZkuiDbSMSOFJDO1lKN2/xrtW++sX+6oawMiK+Rt5kNpJwI//Qwffaz64TowaeZptrogspqJ5/wHk04SRv2NuJG6hARmPaboPDvbDtaFX8+950pLolLKbUXJP7F8o1qjekv5+mwgYwv34EPoDwg==;24:zLbx7NkavkXexCbuGNHyujwKNHqZcjImnU/5DJ2B/PjPr4QlVO3J49n2oFIpDZcbAFqMp8KOJNe/CkezUW7P0g==;20:114Z8FafiOaKb9HBl4TBWXwYAEQ2uP0xl69pl4tfEk7cUvVYDg2CeqwBWLAlfvuQemED7ZC8jWTKKF4K3mEUSw== SpamDiagnosticOutput: 1:22 SpamDiagnosticMetadata: 00000000%2D0000%2D0000%2D0000%2D000000000000 X-OriginatorOrg: ezchip.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2015 20:37:23.0115 (UTC) X-MS-Exchange-CrossTenant-Id: 0fc16e0a-3cd3-4092-8b2f-0a42cff122c3 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0fc16e0a-3cd3-4092-8b2f-0a42cff122c3;Ip=[12.216.194.146];Helo=[ld-1.internal.tilera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR02MB0418 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We add the necessary call to task_isolation_enter() in the prepare_exit_to_usermode() routine. We already unconditionally call into this routine if TIF_NOHZ is set, since that's where we do the user_enter() call. We add calls to task_isolation_check_exception() in places where exceptions may not generate signals to the application. In addition, we add an overriding task_isolation_wait() call that runs a nap instruction while waiting for an interrupt, to make the task_isolation_enter() loop run in a lower-power state. Signed-off-by: Chris Metcalf --- arch/tile/kernel/process.c | 6 +++++- arch/tile/kernel/ptrace.c | 6 +++++- arch/tile/kernel/single_step.c | 5 +++++ arch/tile/kernel/unaligned.c | 3 +++ arch/tile/mm/fault.c | 3 +++ arch/tile/mm/homecache.c | 5 ++++- 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/arch/tile/kernel/process.c b/arch/tile/kernel/process.c index b5f30d376ce1..832febfd65df 100644 --- a/arch/tile/kernel/process.c +++ b/arch/tile/kernel/process.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -495,10 +496,13 @@ void prepare_exit_to_usermode(struct pt_regs *regs, u32 thread_info_flags) tracehook_notify_resume(regs); } + task_isolation_enter(); + local_irq_disable(); thread_info_flags = READ_ONCE(current_thread_info()->flags); - } while (thread_info_flags & _TIF_WORK_MASK); + } while ((thread_info_flags & _TIF_WORK_MASK) || + !task_isolation_ready()); if (thread_info_flags & _TIF_SINGLESTEP) { single_step_once(regs); diff --git a/arch/tile/kernel/ptrace.c b/arch/tile/kernel/ptrace.c index bdc126faf741..63acf7b4655f 100644 --- a/arch/tile/kernel/ptrace.c +++ b/arch/tile/kernel/ptrace.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -259,8 +260,11 @@ int do_syscall_trace_enter(struct pt_regs *regs) * If TIF_NOHZ is set, we are required to call user_exit() before * doing anything that could touch RCU. */ - if (work & _TIF_NOHZ) + if (work & _TIF_NOHZ) { user_exit(); + if (task_isolation_check_syscall(regs->regs[TREG_SYSCALL_NR])) + return -1; + } if (secure_computing() == -1) return -1; diff --git a/arch/tile/kernel/single_step.c b/arch/tile/kernel/single_step.c index 53f7b9def07b..4cba9f4a1915 100644 --- a/arch/tile/kernel/single_step.c +++ b/arch/tile/kernel/single_step.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -321,6 +322,8 @@ void single_step_once(struct pt_regs *regs) int size = 0, sign_ext = 0; /* happy compiler */ int align_ctl; + task_isolation_check_exception("single step at %#lx", regs->pc); + align_ctl = unaligned_fixup; switch (task_thread_info(current)->align_ctl) { case PR_UNALIGN_NOPRINT: @@ -770,6 +773,8 @@ void single_step_once(struct pt_regs *regs) unsigned long *ss_pc = this_cpu_ptr(&ss_saved_pc); unsigned long control = __insn_mfspr(SPR_SINGLE_STEP_CONTROL_K); + task_isolation_check_exception("single step at %#lx", regs->pc); + *ss_pc = regs->pc; control |= SPR_SINGLE_STEP_CONTROL_1__CANCELED_MASK; control |= SPR_SINGLE_STEP_CONTROL_1__INHIBIT_MASK; diff --git a/arch/tile/kernel/unaligned.c b/arch/tile/kernel/unaligned.c index d075f92ccee0..dbb9c1144236 100644 --- a/arch/tile/kernel/unaligned.c +++ b/arch/tile/kernel/unaligned.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -1547,6 +1548,8 @@ void do_unaligned(struct pt_regs *regs, int vecnum) goto done; } + task_isolation_check_exception("unaligned JIT at %#lx", regs->pc); + if (!info->unalign_jit_base) { void __user *user_page; diff --git a/arch/tile/mm/fault.c b/arch/tile/mm/fault.c index 13eac59bf16a..53514ca54143 100644 --- a/arch/tile/mm/fault.c +++ b/arch/tile/mm/fault.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -846,6 +847,8 @@ void do_page_fault(struct pt_regs *regs, int fault_num, unsigned long address, unsigned long write) { enum ctx_state prev_state = exception_enter(); + task_isolation_check_exception("page fault interrupt %d at %#lx (%#lx)", + fault_num, regs->pc, address); __do_page_fault(regs, fault_num, address, write); exception_exit(prev_state); } diff --git a/arch/tile/mm/homecache.c b/arch/tile/mm/homecache.c index 40ca30a9fee3..a79325113105 100644 --- a/arch/tile/mm/homecache.c +++ b/arch/tile/mm/homecache.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -83,8 +84,10 @@ static void hv_flush_update(const struct cpumask *cache_cpumask, * Don't bother to update atomically; losing a count * here is not that critical. */ - for_each_cpu(cpu, &mask) + for_each_cpu(cpu, &mask) { ++per_cpu(irq_stat, cpu).irq_hv_flush_count; + task_isolation_debug(cpu); + } } /* -- 2.1.2