linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Tony Luck <tony.luck@intel.com>,
	Wanpeng Li <wanpeng.li@hotmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Paul Mackerras <paulus@samba.org>,
	Fenghua Yu <fenghua.yu@intel.com>, Rik van Riel <riel@redhat.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Stanislaw Gruszka <sgruszka@redhat.com>
Subject: [PATCH RESEND 20/36] itimer: Convert internal cputime_t units to nsec
Date: Tue, 31 Jan 2017 04:09:35 +0100	[thread overview]
Message-ID: <1485832191-26889-20-git-send-email-fweisbec@gmail.com> (raw)
In-Reply-To: <1485832191-26889-1-git-send-email-fweisbec@gmail.com>
In-Reply-To: <1485751603-15913-1-git-send-email-fweisbec@gmail.com>

Use the new nsec based cputime accessors as part of the whole cputime
conversion from cputime_t to nsecs.

Also convert itimers to use nsec based internal counters. This simplifies
it and remove the whole game with error/inc_error which served to deal
with cputime_t random granularity.

Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 include/linux/posix-timers.h   |  2 +-
 include/linux/sched.h          |  6 ++--
 include/trace/events/timer.h   | 26 ++++++++---------
 kernel/time/itimer.c           | 64 +++++++++++++++---------------------------
 kernel/time/posix-cpu-timers.c | 43 +++++++++++-----------------
 5 files changed, 55 insertions(+), 86 deletions(-)

diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h
index 890de52..64aa189 100644
--- a/include/linux/posix-timers.h
+++ b/include/linux/posix-timers.h
@@ -119,7 +119,7 @@ void run_posix_cpu_timers(struct task_struct *task);
 void posix_cpu_timers_exit(struct task_struct *task);
 void posix_cpu_timers_exit_group(struct task_struct *task);
 void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
-			   cputime_t *newval, cputime_t *oldval);
+			   u64 *newval, u64 *oldval);
 
 long clock_nanosleep_restart(struct restart_block *restart_block);
 
diff --git a/include/linux/sched.h b/include/linux/sched.h
index baa6a28..268fdd7 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -568,10 +568,8 @@ struct pacct_struct {
 };
 
 struct cpu_itimer {
-	cputime_t expires;
-	cputime_t incr;
-	u32 error;
-	u32 incr_error;
+	u64 expires;
+	u64 incr;
 };
 
 /**
diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h
index 1448637..1bca99d 100644
--- a/include/trace/events/timer.h
+++ b/include/trace/events/timer.h
@@ -269,17 +269,17 @@ DEFINE_EVENT(hrtimer_class, hrtimer_cancel,
 TRACE_EVENT(itimer_state,
 
 	TP_PROTO(int which, const struct itimerval *const value,
-		 cputime_t expires),
+		 unsigned long long expires),
 
 	TP_ARGS(which, value, expires),
 
 	TP_STRUCT__entry(
-		__field(	int,		which		)
-		__field(	cputime_t,	expires		)
-		__field(	long,		value_sec	)
-		__field(	long,		value_usec	)
-		__field(	long,		interval_sec	)
-		__field(	long,		interval_usec	)
+		__field(	int,			which		)
+		__field(	unsigned long long,	expires		)
+		__field(	long,			value_sec	)
+		__field(	long,			value_usec	)
+		__field(	long,			interval_sec	)
+		__field(	long,			interval_usec	)
 	),
 
 	TP_fast_assign(
@@ -292,7 +292,7 @@ TRACE_EVENT(itimer_state,
 	),
 
 	TP_printk("which=%d expires=%llu it_value=%ld.%ld it_interval=%ld.%ld",
-		  __entry->which, (unsigned long long)__entry->expires,
+		  __entry->which, __entry->expires,
 		  __entry->value_sec, __entry->value_usec,
 		  __entry->interval_sec, __entry->interval_usec)
 );
@@ -305,14 +305,14 @@ TRACE_EVENT(itimer_state,
  */
 TRACE_EVENT(itimer_expire,
 
-	TP_PROTO(int which, struct pid *pid, cputime_t now),
+	TP_PROTO(int which, struct pid *pid, unsigned long long now),
 
 	TP_ARGS(which, pid, now),
 
 	TP_STRUCT__entry(
-		__field( int ,		which	)
-		__field( pid_t,		pid	)
-		__field( cputime_t,	now	)
+		__field( int ,			which	)
+		__field( pid_t,			pid	)
+		__field( unsigned long long,	now	)
 	),
 
 	TP_fast_assign(
@@ -322,7 +322,7 @@ TRACE_EVENT(itimer_expire,
 	),
 
 	TP_printk("which=%d pid=%d now=%llu", __entry->which,
-		  (int) __entry->pid, (unsigned long long)__entry->now)
+		  (int) __entry->pid, __entry->now)
 );
 
 #ifdef CONFIG_NO_HZ_COMMON
diff --git a/kernel/time/itimer.c b/kernel/time/itimer.c
index bb01ff4..a95f13c 100644
--- a/kernel/time/itimer.c
+++ b/kernel/time/itimer.c
@@ -45,35 +45,35 @@ static struct timeval itimer_get_remtime(struct hrtimer *timer)
 static void get_cpu_itimer(struct task_struct *tsk, unsigned int clock_id,
 			   struct itimerval *const value)
 {
-	cputime_t cval, cinterval;
+	u64 val, interval;
 	struct cpu_itimer *it = &tsk->signal->it[clock_id];
 
 	spin_lock_irq(&tsk->sighand->siglock);
 
-	cval = it->expires;
-	cinterval = it->incr;
-	if (cval) {
+	val = it->expires;
+	interval = it->incr;
+	if (val) {
 		struct task_cputime cputime;
-		cputime_t t;
+		u64 t;
 
 		thread_group_cputimer(tsk, &cputime);
 		if (clock_id == CPUCLOCK_PROF)
-			t = nsecs_to_cputime(cputime.utime + cputime.stime);
+			t = cputime.utime + cputime.stime;
 		else
 			/* CPUCLOCK_VIRT */
-			t = nsecs_to_cputime(cputime.utime);
+			t = cputime.utime;
 
-		if (cval < t)
+		if (val < t)
 			/* about to fire */
-			cval = cputime_one_jiffy;
+			val = TICK_NSEC;
 		else
-			cval = cval - t;
+			val -= t;
 	}
 
 	spin_unlock_irq(&tsk->sighand->siglock);
 
-	cputime_to_timeval(cval, &value->it_value);
-	cputime_to_timeval(cinterval, &value->it_interval);
+	value->it_value = ns_to_timeval(val);
+	value->it_interval = ns_to_timeval(interval);
 }
 
 int do_getitimer(int which, struct itimerval *value)
@@ -129,55 +129,35 @@ enum hrtimer_restart it_real_fn(struct hrtimer *timer)
 	return HRTIMER_NORESTART;
 }
 
-static inline u32 cputime_sub_ns(cputime_t ct, s64 real_ns)
-{
-	struct timespec ts;
-	s64 cpu_ns;
-
-	cputime_to_timespec(ct, &ts);
-	cpu_ns = timespec_to_ns(&ts);
-
-	return (cpu_ns <= real_ns) ? 0 : cpu_ns - real_ns;
-}
-
 static void set_cpu_itimer(struct task_struct *tsk, unsigned int clock_id,
 			   const struct itimerval *const value,
 			   struct itimerval *const ovalue)
 {
-	cputime_t cval, nval, cinterval, ninterval;
-	s64 ns_ninterval, ns_nval;
-	u32 error, incr_error;
+	u64 oval, nval, ointerval, ninterval;
 	struct cpu_itimer *it = &tsk->signal->it[clock_id];
 
-	nval = timeval_to_cputime(&value->it_value);
-	ns_nval = timeval_to_ns(&value->it_value);
-	ninterval = timeval_to_cputime(&value->it_interval);
-	ns_ninterval = timeval_to_ns(&value->it_interval);
-
-	error = cputime_sub_ns(nval, ns_nval);
-	incr_error = cputime_sub_ns(ninterval, ns_ninterval);
+	nval = timeval_to_ns(&value->it_value);
+	ninterval = timeval_to_ns(&value->it_interval);
 
 	spin_lock_irq(&tsk->sighand->siglock);
 
-	cval = it->expires;
-	cinterval = it->incr;
-	if (cval || nval) {
+	oval = it->expires;
+	ointerval = it->incr;
+	if (oval || nval) {
 		if (nval > 0)
-			nval += cputime_one_jiffy;
-		set_process_cpu_timer(tsk, clock_id, &nval, &cval);
+			nval += TICK_NSEC;
+		set_process_cpu_timer(tsk, clock_id, &nval, &oval);
 	}
 	it->expires = nval;
 	it->incr = ninterval;
-	it->error = error;
-	it->incr_error = incr_error;
 	trace_itimer_state(clock_id == CPUCLOCK_VIRT ?
 			   ITIMER_VIRTUAL : ITIMER_PROF, value, nval);
 
 	spin_unlock_irq(&tsk->sighand->siglock);
 
 	if (ovalue) {
-		cputime_to_timeval(cval, &ovalue->it_value);
-		cputime_to_timeval(cinterval, &ovalue->it_interval);
+		ovalue->it_value = ns_to_timeval(oval);
+		ovalue->it_interval = ns_to_timeval(ointerval);
 	}
 }
 
diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
index 45be3ce..b4377a5 100644
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -20,10 +20,10 @@
  */
 void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new)
 {
-	cputime_t cputime = secs_to_cputime(rlim_new);
+	u64 nsecs = rlim_new * NSEC_PER_SEC;
 
 	spin_lock_irq(&task->sighand->siglock);
-	set_process_cpu_timer(task, CPUCLOCK_PROF, &cputime, NULL);
+	set_process_cpu_timer(task, CPUCLOCK_PROF, &nsecs, NULL);
 	spin_unlock_irq(&task->sighand->siglock);
 }
 
@@ -860,17 +860,11 @@ static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it,
 	if (!it->expires)
 		return;
 
-	if (cur_time >= cputime_to_nsecs(it->expires)) {
-		if (it->incr) {
+	if (cur_time >= it->expires) {
+		if (it->incr)
 			it->expires += it->incr;
-			it->error += it->incr_error;
-			if (it->error >= TICK_NSEC) {
-				it->expires -= cputime_one_jiffy;
-				it->error -= TICK_NSEC;
-			}
-		} else {
+		else
 			it->expires = 0;
-		}
 
 		trace_itimer_expire(signo == SIGPROF ?
 				    ITIMER_PROF : ITIMER_VIRTUAL,
@@ -878,9 +872,8 @@ static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it,
 		__group_send_sig_info(signo, SEND_SIG_PRIV, tsk);
 	}
 
-	if (it->expires && (!*expires || cputime_to_nsecs(it->expires) < *expires)) {
-		*expires = cputime_to_nsecs(it->expires);
-	}
+	if (it->expires && (!*expires || it->expires < *expires))
+		*expires = it->expires;
 }
 
 /*
@@ -1174,9 +1167,9 @@ void run_posix_cpu_timers(struct task_struct *tsk)
  * The tsk->sighand->siglock must be held by the caller.
  */
 void set_process_cpu_timer(struct task_struct *tsk, unsigned int clock_idx,
-			   cputime_t *newval, cputime_t *oldval)
+			   u64 *newval, u64 *oldval)
 {
-	u64 now, new;
+	u64 now;
 
 	WARN_ON_ONCE(clock_idx == CPUCLOCK_SCHED);
 	cpu_timer_sample_group(clock_idx, tsk, &now);
@@ -1188,33 +1181,31 @@ void set_process_cpu_timer(struct task_struct *tsk, unsigned int clock_idx,
 		 * it to be absolute.
 		 */
 		if (*oldval) {
-			if (cputime_to_nsecs(*oldval) <= now) {
+			if (*oldval <= now) {
 				/* Just about to fire. */
-				*oldval = cputime_one_jiffy;
+				*oldval = TICK_NSEC;
 			} else {
-				*oldval -= nsecs_to_cputime(now);
+				*oldval -= now;
 			}
 		}
 
 		if (!*newval)
 			return;
-		*newval += nsecs_to_cputime(now);
+		*newval += now;
 	}
 
-	new = cputime_to_nsecs(*newval);
-
 	/*
 	 * Update expiration cache if we are the earliest timer, or eventually
 	 * RLIMIT_CPU limit is earlier than prof_exp cpu timer expire.
 	 */
 	switch (clock_idx) {
 	case CPUCLOCK_PROF:
-		if (expires_gt(tsk->signal->cputime_expires.prof_exp, new))
-			tsk->signal->cputime_expires.prof_exp = new;
+		if (expires_gt(tsk->signal->cputime_expires.prof_exp, *newval))
+			tsk->signal->cputime_expires.prof_exp = *newval;
 		break;
 	case CPUCLOCK_VIRT:
-		if (expires_gt(tsk->signal->cputime_expires.virt_exp, new))
-			tsk->signal->cputime_expires.virt_exp = new;
+		if (expires_gt(tsk->signal->cputime_expires.virt_exp, *newval))
+			tsk->signal->cputime_expires.virt_exp = *newval;
 		break;
 	}
 
-- 
2.7.4

  parent reply	other threads:[~2017-01-31  3:12 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-30  4:46 [GIT PULL] cputime: Convert core use of cputime_t to nsecs Frederic Weisbecker
2017-01-30 14:32 ` Stanislaw Gruszka
2017-01-30 14:56   ` Frederic Weisbecker
2017-01-30 15:29     ` Stanislaw Gruszka
2017-01-31  3:09 ` [PATCH RESEND 01/36] jiffies: Reuse TICK_NSEC instead of NSEC_PER_JIFFY Frederic Weisbecker
2017-02-01  9:49   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 02/36] time: Introduce jiffies64_to_nsecs() Frederic Weisbecker
2017-02-01  9:50   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 03/36] sched: Remove unused INIT_CPUTIME macro Frederic Weisbecker
2017-02-01  9:50   ` [tip:sched/core] sched/cputime: Remove the " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 04/36] cputime: Convert kcpustat to nsecs Frederic Weisbecker
2017-02-01  9:51   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 05/36] macintosh/rack-meter: Remove cputime_t internal use Frederic Weisbecker
2017-02-01  9:51   ` [tip:sched/core] macintosh/rack-meter: Convert cputime64_t use to u64 tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 06/36] cputime: Convert guest time accounting to nsecs Frederic Weisbecker
2017-02-01  9:52   ` [tip:sched/core] sched/cputime: Convert guest time accounting to nsecs (u64) tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 07/36] cputime: Special API to return old-typed cputime Frederic Weisbecker
2017-02-01  9:52   ` [tip:sched/core] sched/cputime: Introduce special task_cputime_t() " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 08/36] cputime: Convert task/group cputime to nsecs Frederic Weisbecker
2017-02-01  9:53   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 09/36] alpha: Convert obsolete cputime_t " Frederic Weisbecker
2017-02-01  9:53   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 10/36] x86: Convert obsolete cputime type " Frederic Weisbecker
2017-02-01  9:54   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 11/36] isdn: " Frederic Weisbecker
2017-02-01  9:54   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 12/36] binfmt: " Frederic Weisbecker
2017-02-01  9:55   ` [tip:sched/core] fs/binfmt: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 13/36] acct: " Frederic Weisbecker
2017-02-01  9:55   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 14/36] delaycct: " Frederic Weisbecker
2017-02-01  9:56   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 15/36] tsacct: " Frederic Weisbecker
2017-02-01  9:56   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 16/36] signal: " Frederic Weisbecker
2017-02-01  9:57   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 17/36] cputime: Increment kcpustat directly on irqtime account Frederic Weisbecker
2017-02-01  9:58   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 18/36] posix-timers: Use TICK_NSEC instead of a dynamically ad-hoc calculated version Frederic Weisbecker
2017-02-01  9:58   ` [tip:sched/core] timers/posix-timers: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 19/36] posix-timers: Convert internals to use nsecs Frederic Weisbecker
2017-02-01  9:59   ` [tip:sched/core] timers/posix-timers: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` Frederic Weisbecker [this message]
2017-02-01  9:59   ` [tip:sched/core] timers/itimer: Convert internal cputime_t units to nsec tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 21/36] sched: Remove temporary cputime_t accessors Frederic Weisbecker
2017-02-01 10:00   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 22/36] cputime: Push time to account_user_time() in nsecs Frederic Weisbecker
2017-02-01 10:00   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 23/36] cputime: Push time to account_steal_time() " Frederic Weisbecker
2017-02-01 10:01   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 24/36] cputime: Push time to account_idle_time() " Frederic Weisbecker
2017-02-01 10:01   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 25/36] cputime: Push time to account_system_time() " Frederic Weisbecker
2017-02-01 10:02   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 26/36] cputime: Complete nsec conversion of tick based accounting Frederic Weisbecker
2017-02-01 10:02   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 27/36] vtime: Return nsecs instead of cputime_t to account Frederic Weisbecker
2017-02-01 10:03   ` [tip:sched/core] sched/cputime, " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 28/36] cputime: Remove jiffies based cputime Frederic Weisbecker
2017-02-01 10:03   ` [tip:sched/core] sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 29/36] ia64: Move nsecs based cputime headers to the last arch using it Frederic Weisbecker
2017-02-01 10:04   ` [tip:sched/core] ia64, sched/cputime: Move the " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 30/36] ia64: Convert vtime to use nsec units directly Frederic Weisbecker
2017-02-01 10:04   ` [tip:sched/core] " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 31/36] ia64: Remove unused cputime definitions Frederic Weisbecker
2017-02-01 10:05   ` [tip:sched/core] ia64, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 32/36] s390: Make arch_cpu_idle_time() to return nsecs Frederic Weisbecker
2017-02-01 10:05   ` [tip:sched/core] s390, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 33/36] powerpc: Remove unused cputime definitions Frederic Weisbecker
2017-02-01 10:06   ` [tip:sched/core] powerpc, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 34/36] s390: " Frederic Weisbecker
2017-02-01 10:06   ` [tip:sched/core] s390, sched/cputime: " tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 35/36] cputime: Remove unused nsec_to_cputime Frederic Weisbecker
2017-02-01 10:07   ` [tip:sched/core] sched/cputime: Remove unused nsec_to_cputime() tip-bot for Frederic Weisbecker
2017-01-31  3:09 ` [PATCH RESEND 36/36] cputime: Remove asm generic headers Frederic Weisbecker
2017-02-01 10:07   ` [tip:sched/core] sched/cputime: Remove generic asm headers tip-bot for Frederic Weisbecker
2017-02-06 13:49 ` [GIT PULL] cputime: Convert core use of cputime_t to nsecs Frederic Weisbecker
2017-02-07  8:08   ` Ingo Molnar
2017-02-07 14:06     ` Frederic Weisbecker
2017-02-07 18:41       ` Ingo Molnar
2017-02-21  5:08 ` hejianet
2017-02-22 14:30   ` Frederic Weisbecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1485832191-26889-20-git-send-email-fweisbec@gmail.com \
    --to=fweisbec@gmail.com \
    --cc=benh@kernel.crashing.org \
    --cc=fenghua.yu@intel.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=sgruszka@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=wanpeng.li@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).