From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753272AbcADTgB (ORCPT ); Mon, 4 Jan 2016 14:36:01 -0500 Received: from mail-am1on0089.outbound.protection.outlook.com ([157.56.112.89]:14151 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751970AbcADTfy (ORCPT ); Mon, 4 Jan 2016 14:35:54 -0500 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 v9 12/13] arch/tile: enable task isolation functionality Date: Mon, 4 Jan 2016 14:34:50 -0500 Message-ID: <1451936091-29247-13-git-send-email-cmetcalf@ezchip.com> X-Mailer: git-send-email 2.1.2 In-Reply-To: <1451936091-29247-1-git-send-email-cmetcalf@ezchip.com> References: <1451936091-29247-1-git-send-email-cmetcalf@ezchip.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD046;1:+mXXgfvAtgt0gyJnxMlAMANuRzsxx86NECAv8ev9RINysFwxFoGOxK5X04ktHsQqwxfH6UGx/DZRVQxeJegy9+KcXG36YE1QkpCkzPI6RUGRxF1YVLEmyxxWTC3kea3lzwjPqNwIQDf5UK1P5d8eqPwyJDBHmmAqpHmgEsyaPTStnQrv6PMGWiK31ESlY11F36xDGntgsNdilYOd7lUJkMf91eT5Zk+4G9WHTntLHa58UluF+oX14LvEj9HyaLd539v7I+evj0ivjMU2WzNUkap53sYYfUgrCRO4wzwoC4bFfuiCB+Ynmz8OgKSCslBzNig/50escyATZ27zcYRa6PCoKaBIiEYLT4OhfBcVlKQZLswHYnMbIy11iQAXkEjp X-Forefront-Antispam-Report: CIP:12.216.194.146;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(47776003)(92566002)(229853001)(86362001)(105606002)(50986999)(33646002)(5003940100001)(4326007)(76176999)(6806005)(2950100001)(42186005)(1220700001)(48376002)(50466002)(5001770100001)(5001970100001)(5008740100001)(19580395003)(19580405001)(50226001)(189998001)(85426001)(87936001)(104016004)(1096002)(4001430100002)(107886002)(586003)(36756003)(106466001)(334744003)(921003)(1121003)(2101003)(83996005);DIR:OUT;SFP:1101;SCL:1;SRVR:DB4PR02MB0430;H:ld-1.internal.tilera.com;FPR:;SPF:Fail;PTR:wb-fw1.tilera.com;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB0430;2:jv7YSt/FmgaJZwIzO3Ni00tq7gavcP84JQc8/CaBEciBMWllgmYocTvQxVSFMzV10ekRslMuutXy3EKBc9Q8C/4Cm9oRN7tzBoRYR7IoNcxj9OW2kkfuikaoyAcOZaFIsKD5OK4CiH8Xa3vpLoSZHg==;3:1KlQV8jyQO3kIbp13hePxbbOhitxCFdHbvCE8rUeqvepStNmAXJKHokCHFTGEvTznR0qBaEOV1yTZ7i672Rw4SH3XaPdYiksiLh2x+2WseLACC3Iye6DES9DtxpjWtvjJ+DJj13rT0WQ8hS/5FTUeqauOU5IcGF8Cc8I7pmDg6xK9S2+q0nJoZ67xPC3JpFrIA9RArhflCob5QnT2jgyWYmngSuKnrEdhrWlIxqC6aU=;25:/CIs/v8LHgagOhj8KLs8IB5icO3Fg/4RVDO3mTUvE1aUpESJ7ZmmjUvlUoiZXze8Rn1eOuQbOo3/fQIOI6qvnzVDrZHBgxu17MzYVc3o2nP4VxdBiy0RR3fJYqAePpCO+BVwC8zQqwkccu3Ge/+8GcZt7dHYaFz3qC7/iBtjdJNnxImqpvwJlhgjwJ4eiix/b+nYrZDYbDzigtpXJeObcUKGFpI/zl5b2VnIJhT7hq5yqMB+x1tIQJZl9BGEgRqEA3tC1v+yL+3fOsqmWlNr3w==;20:UQxmGCQ69h7RxKGPGR49jtXJ/6W8nv3CtQmhhnbGFF+07Aa/JlNGrVqJPTBsn/kLFdC7nYdWl8k7bLtUFEw/2YqHY0jiPpdFdbpvay8gx8bKA1Wom04D12yt7ERfP30zP42Ud6aOlaq+ChPQh52LEpvt/g5U0eD8SCBRPbdgATQ= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB4PR02MB0430; 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)(10201501046)(3002001);SRVR:DB4PR02MB0430;BCL:0;PCL:0;RULEID:;SRVR:DB4PR02MB0430; X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB0430;4:E8EVBpIWlDbo3Fwl2dAl2LAWxKIGaCrQC4dosaHQ8g8Dp/r5fLPmcY++40IMWHrDqzHUtlQ3ovtaDo82V7y5ygBylk4/rQ+pzZXA9gIu7IuDcsxG2TxmhYFkRzAVf038B3Jtk9YJw6QEnmA8Te8/wgFDWQWTXYeAiX1gY4oHWjEgjAG+j8kObP0wuB+8c2WV04rNz952YBnXmneRBChBQgXwDYuqocqYcKif1k1u6zQR/m7P80ibwIYMyQy0bRPmi/oy5pENvw6VE4bRTPwsX2HzQvyCnl0oanE8BU0YSApOTxmySPafr2CSwmWP3cd6QJvu7mFT8JkwVov3tyzuU/D/tMus8OPhix/3aUgRirUkeNS4qWdi5YU+kdWgkG4sO2akNMST5eReHK47DZ98TTwfWuUoOqdeXEqVdz9fzgHqVKDDfvSWBR0lQBxg+dm4 X-Forefront-PRVS: 08118EFC2B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB4PR02MB0430;23:inWV+dEE3xRBydxXw9id8rs7uWgHj9ZWMSp9Ji/YU?= =?us-ascii?Q?EZoUGIIn4H9gx0AFYzG31Aasg7rcFi5ASR9BDfDcy23zcjuSSegCWpJC4eba?= =?us-ascii?Q?ofj5lmyWOLlNoadQ+XZMUm9mCayoSl/XGqI/sZDLeF5kse8x+TjmGlGENlrq?= =?us-ascii?Q?L1TwBNcvL7n2Ixp5vV4Jpkam4l6Rh61JUXvWVg3IL2BStpXwevAOPd0Dp1L5?= =?us-ascii?Q?JBGrlI/tBQICmXf1B1lLpfFx059zlOmyiTpN20bO7ah70ltPaz/GPwForHfj?= =?us-ascii?Q?3rGEE0H6aJKfaxr8xNXY5JvCJvEsnfjpsv5WwzmCNyroYxhPOsUbyQWEFVsN?= =?us-ascii?Q?OFL2MWQXF5BI+q7ZweGNCkP5KFYxqaCEc+pY07qUkQ/ZavoBOBNJ9j6luoMb?= =?us-ascii?Q?+ZY7YZTsD6QCTen3vyKkGWVglwXDCy+/0UM44IyGASExBDKs93YBwoTIo7MC?= =?us-ascii?Q?5ADMnM9MRVhP5IzIudaYmK4QQ+tNNOi1RHBq9r1VbOjZSnG6ylP/T45CiSi/?= =?us-ascii?Q?dznopoa0JGTMLZl2S0b4Hj+kSPmHQumxmkdQlVHPwhAxAFvMoEIUdjAf7Ka0?= =?us-ascii?Q?CtJbnzGPvetQKUrvp3m72gyLilw473Tqyh5HEMmKZljH/kNWRhs1VPhYAxEX?= =?us-ascii?Q?4AME8BHavtYGTAOIWd01XW2NpSjO7A1jlpUSGGvv4Y/95A1C/BLXjKAOXBsl?= =?us-ascii?Q?9Ei0S2rkCrZsAe0pbenooJ46u61Q/CCEr7GHH713QOk6WHzvjo2pKl+5VJUL?= =?us-ascii?Q?d+z6MJzMB1hNJI0qmrxyDYIxeAIEuGFWx50jEsLlO6mYFpzNrfRSU0p50M73?= =?us-ascii?Q?FBfrtsBv1bP5IP+jEwGLaKVWSxlXyJJvNAGT50CFe638Uw2B811kxJO6fY96?= =?us-ascii?Q?+iOkFwRfLnziwhpgYHB4FsWn7St+jhPurE6MqfX74phUT9QUSkMjyMKquzf7?= =?us-ascii?Q?8pGCqZqHDXpMntOc2+uBVg6QskgtNzpfyFI92JIVF8rCWD/5df0rCjbLB+Ki?= =?us-ascii?Q?/3ySEyA0WM6IZ5MGXcFvDSbYt4A8YLzpno8vONuLi5IjaDjJmLUPSyiVebPO?= =?us-ascii?Q?PKT1dUyZAXBmKUlrsMYy5ccQR1AFg9oWPMlmlRFGbyUKCCVfdnC7fxcRAGiI?= =?us-ascii?Q?h04JM1bJUFBu/g6jlI/2kWKcIfMxNIYXKdF1m4zTCX6sO4qYXDqPg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB0430;5:MQBCpqBpGecZphIWHCRt1n4ozohQ+VJ7JgjUt4/oeicvCQyH326TgjxydcDMJmHivPc/a/E71+9eHTWCt3nluOo/R1AvJ5/+xqPYsnNhOzLpTbmPsdkXrEAJs2OnLrSDgiim8qOmHT/I+mhzbQpisA==;24:eolw4wxiE5nzKKO6hqIW5OvK1RzV+NZDUWlybU2a0vQOjXXzUJv8n8y+2hWMmDhhEBNdVIatSz83lfR4geOJSSl8bZB7s32eUGLcV/wUc9E= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ezchip.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2016 19:35:49.3577 (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: DB4PR02MB0430 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. 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/smp.c | 26 ++++++++++++++------------ arch/tile/kernel/unaligned.c | 3 +++ arch/tile/mm/fault.c | 3 +++ arch/tile/mm/homecache.c | 2 ++ 7 files changed, 38 insertions(+), 13 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 54e7b723db99..f76f2d8b8923 100644 --- a/arch/tile/kernel/ptrace.c +++ b/arch/tile/kernel/ptrace.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -255,6 +256,11 @@ int do_syscall_trace_enter(struct pt_regs *regs) { u32 work = ACCESS_ONCE(current_thread_info()->flags); + if (work & _TIF_NOHZ) { + 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 862973074bf9..ba01eacde7a3 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 @@ -320,6 +321,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: @@ -767,6 +770,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/smp.c b/arch/tile/kernel/smp.c index 07e3ff5cc740..7298d68d4584 100644 --- a/arch/tile/kernel/smp.c +++ b/arch/tile/kernel/smp.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -181,10 +182,11 @@ void flush_icache_range(unsigned long start, unsigned long end) struct ipi_flush flush = { start, end }; /* If invoked with irqs disabled, we can not issue IPIs. */ - if (irqs_disabled()) + if (irqs_disabled()) { + task_isolation_debug_cpumask(&task_isolation_map); flush_remote(0, HV_FLUSH_EVICT_L1I, NULL, 0, 0, 0, NULL, NULL, 0); - else { + } else { preempt_disable(); on_each_cpu(ipi_flush_icache_range, &flush, 1); preempt_enable(); @@ -258,10 +260,8 @@ void __init ipi_init(void) #if CHIP_HAS_IPI() -void smp_send_reschedule(int cpu) +static void __smp_send_reschedule(int cpu) { - WARN_ON(cpu_is_offline(cpu)); - /* * We just want to do an MMIO store. The traditional writeq() * functions aren't really correct here, since they're always @@ -273,15 +273,17 @@ void smp_send_reschedule(int cpu) #else -void smp_send_reschedule(int cpu) +static void __smp_send_reschedule(int cpu) { - HV_Coord coord; - - WARN_ON(cpu_is_offline(cpu)); - - coord.y = cpu_y(cpu); - coord.x = cpu_x(cpu); + HV_Coord coord = { .y = cpu_y(cpu), .x = cpu_x(cpu) }; hv_trigger_ipi(coord, IRQ_RESCHEDULE); } #endif /* CHIP_HAS_IPI() */ + +void smp_send_reschedule(int cpu) +{ + WARN_ON(cpu_is_offline(cpu)); + task_isolation_debug(cpu); + __smp_send_reschedule(cpu); +} diff --git a/arch/tile/kernel/unaligned.c b/arch/tile/kernel/unaligned.c index 0db5f7c9d9e5..b1e229a1ff62 100644 --- a/arch/tile/kernel/unaligned.c +++ b/arch/tile/kernel/unaligned.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -1545,6 +1546,8 @@ void do_unaligned(struct pt_regs *regs, int vecnum) return; } + 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 26734214818c..1dee18d3ffbd 100644 --- a/arch/tile/mm/fault.c +++ b/arch/tile/mm/fault.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -844,6 +845,8 @@ static inline void __do_page_fault(struct pt_regs *regs, int fault_num, void do_page_fault(struct pt_regs *regs, int fault_num, unsigned long address, unsigned long write) { + task_isolation_check_exception("page fault interrupt %d at %#lx (%#lx)", + fault_num, regs->pc, address); __do_page_fault(regs, fault_num, address, write); } diff --git a/arch/tile/mm/homecache.c b/arch/tile/mm/homecache.c index 40ca30a9fee3..e044e8dd8372 100644 --- a/arch/tile/mm/homecache.c +++ b/arch/tile/mm/homecache.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -83,6 +84,7 @@ static void hv_flush_update(const struct cpumask *cache_cpumask, * Don't bother to update atomically; losing a count * here is not that critical. */ + task_isolation_debug_cpumask(&mask); for_each_cpu(cpu, &mask) ++per_cpu(irq_stat, cpu).irq_hv_flush_count; } -- 2.1.2