Re: [PATCH 2/4] tile: support CONTEXT_TRACKING and thus NOHZ_FULL

From: Chris Metcalf
Date: Tue Mar 24 2015 - 17:50:08 EST


On 3/24/2015 5:15 PM, Frederic Weisbecker wrote:
On Tue, Mar 24, 2015 at 03:21:33PM -0400, cmetcalf@xxxxxxxxxx wrote:
From: Chris Metcalf <cmetcalf@xxxxxxxxxx>

Add the TIF_NOHZ flag appropriately.

Add call to user_exit() on entry to do_work_pending() and on entry
to syscalls via do_syscall_trace_enter(), and also the top of
do_syscall_trace_exit() just because it's done in x86.
You only need to protect do_syscall_trace_exit() if there is a risk
that something calls user_enter() before. x86 does it so because
schedule_user() can be called before although I think we've changed
schedule_user() to use exception_enter/exit. I should check if that
user_exit() in do_syscall_trace_exit() is still necessary in x86.

Anyway, calling user_exit() on context tracking kerne mode doesn't do
any harm.

Yes, I see the exception_enter/exit in schedule_user(). I guess I will plan to
leave the user_exit() in for now, but if you conclude it's not necessary for x86,
I can remove it for tile as well at that point.

diff --git a/arch/tile/kernel/process.c b/arch/tile/kernel/process.c
index 48e5773dd0b7..b403c2e3e263 100644
--- a/arch/tile/kernel/process.c
+++ b/arch/tile/kernel/process.c
@@ -27,6 +27,7 @@
#include <linux/kernel.h>
#include <linux/tracehook.h>
#include <linux/signal.h>
+#include <linux/context_tracking.h>
#include <asm/stack.h>
#include <asm/switch_to.h>
#include <asm/homecache.h>
@@ -474,6 +475,8 @@ int do_work_pending(struct pt_regs *regs, u32 thread_info_flags)
if (!user_mode(regs))
return 0;
+ user_exit();
+
/* Enable interrupts; they are disabled again on return to caller. */
local_irq_enable();
@@ -496,11 +499,12 @@ int do_work_pending(struct pt_regs *regs, u32 thread_info_flags)
tracehook_notify_resume(regs);
return 1;
}
- if (thread_info_flags & _TIF_SINGLESTEP) {
+ if (thread_info_flags & _TIF_SINGLESTEP)
single_step_once(regs);
- return 0;
- }
- panic("work_pending: bad flags %#x\n", thread_info_flags);
+
+ user_enter();
So, do work pending is called from syscall exit only? Or does it concern
interrupts, exceptions as well?

It's called on every return to userspace if the TIF flags require it.

Well if it's always followed by a return to userspace, it should be fine.

Let me know if you'd like me to put your Acked-by on the commit. Thanks!

--
Chris Metcalf, EZChip Semiconductor
http://www.ezchip.com

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/