All of lore.kernel.org
 help / color / mirror / Atom feed
From: Piotr Hosowicz <piotr@hosowicz.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Jens Axboe <jens.axboe@oracle.com>,
	Divyesh Shah <dpshah@google.com>, Ingo Molnar <mingo@elte.hu>,
	LKML <linux-kernel@vger.kernel.org>,
	Piotr Hosowicz <piotr@hosowicz.com>
Subject: Re: [PATCH] sched_clock: Provide local_clock() and improve documentation
Date: Fri, 28 May 2010 16:15:36 +0200	[thread overview]
Message-ID: <4BFFD008.4070909@example.com> (raw)
In-Reply-To: <1275052414.1645.52.camel@laptop>

On 28.05.2010 15:13, Peter Zijlstra wrote:
> On Thu, 2010-05-27 at 11:33 -0700, Andrew Morton wrote:
>
>> Cool, thanks.  You didn't Cc a mailing list :(
>
> Oops, must have managed to wreck the CC list somewhere, restored LKML.
>
> How does the below look?

Earlier someone (you? I didn't write down) has published such a patch:

f4b87dee9

Index: linux-2.6/arch/parisc/kernel/ftrace.c
===================================================================
--- linux-2.6.orig/arch/parisc/kernel/ftrace.c
+++ linux-2.6/arch/parisc/kernel/ftrace.c
@@ -82,7 +82,7 @@ unsigned long ftrace_return_to_handler(u
  	unsigned long ret;

  	pop_return_trace(&trace, &ret);
-	trace.rettime = cpu_clock(raw_smp_processor_id());
+	trace.rettime = local_clock();
  	ftrace_graph_return(&trace);

  	if (unlikely(!ret)) {
@@ -126,7 +126,7 @@ void prepare_ftrace_return(unsigned long
  		return;
  	}

-	calltime = cpu_clock(raw_smp_processor_id());
+	calltime = local_clock();

  	if (push_return_trace(old, calltime,
  				self_addr, &trace.depth) == -EBUSY) {
Index: linux-2.6/include/linux/blkdev.h
===================================================================
--- linux-2.6.orig/include/linux/blkdev.h
+++ linux-2.6/include/linux/blkdev.h
@@ -1213,12 +1213,12 @@ int kblockd_schedule_work(struct request
  #ifdef CONFIG_BLK_CGROUP
  static inline void set_start_time_ns(struct request *req)
  {
-	req->start_time_ns = sched_clock();
+	req->start_time_ns = local_clock();
  }

  static inline void set_io_start_time_ns(struct request *req)
  {
-	req->io_start_time_ns = sched_clock();
+	req->io_start_time_ns = local_clock();
  }

  static inline uint64_t rq_start_time_ns(struct request *req)
Index: linux-2.6/include/linux/sched.h
===================================================================
--- linux-2.6.orig/include/linux/sched.h
+++ linux-2.6/include/linux/sched.h
@@ -1822,6 +1822,7 @@ extern void sched_clock_idle_wakeup_even
   * clock constructed from sched_clock():
   */
  extern unsigned long long cpu_clock(int cpu);
+extern unsigned long long local_clock(void);

  extern unsigned long long
  task_sched_runtime(struct task_struct *task);
Index: linux-2.6/kernel/lockdep.c
===================================================================
--- linux-2.6.orig/kernel/lockdep.c
+++ linux-2.6/kernel/lockdep.c
@@ -146,7 +146,7 @@ static DEFINE_PER_CPU(struct lock_class_

  static inline u64 lockstat_clock(void)
  {
-	return cpu_clock(smp_processor_id());
+	return local_clock();
  }

  static int lock_point(unsigned long points[], unsigned long ip)
Index: linux-2.6/kernel/perf_event.c
===================================================================
--- linux-2.6.orig/kernel/perf_event.c
+++ linux-2.6/kernel/perf_event.c
@@ -214,7 +214,7 @@ static void perf_unpin_context(struct pe

  static inline u64 perf_clock(void)
  {
-	return cpu_clock(raw_smp_processor_id());
+	return local_clock();
  }

  /*
Index: linux-2.6/kernel/rcutorture.c
===================================================================
--- linux-2.6.orig/kernel/rcutorture.c
+++ linux-2.6/kernel/rcutorture.c
@@ -239,8 +239,7 @@ static unsigned long
  rcu_random(struct rcu_random_state *rrsp)
  {
  	if (--rrsp->rrs_count < 0) {
-		rrsp->rrs_state +=
-			(unsigned long)cpu_clock(raw_smp_processor_id());
+		rrsp->rrs_state += (unsigned long)local_clock();
  		rrsp->rrs_count = RCU_RANDOM_REFRESH;
  	}
  	rrsp->rrs_state = rrsp->rrs_state * RCU_RANDOM_MULT + RCU_RANDOM_ADD;
Index: linux-2.6/kernel/sched.c
===================================================================
--- linux-2.6.orig/kernel/sched.c
+++ linux-2.6/kernel/sched.c
@@ -1670,7 +1670,7 @@ static void update_shares(struct sched_d
  	if (root_task_group_empty())
  		return;

-	now = cpu_clock(raw_smp_processor_id());
+	now = local_clock();
  	elapsed = now - sd->last_update;

  	if (elapsed >= (s64)(u64)sysctl_sched_shares_ratelimit) {
Index: linux-2.6/kernel/sched_clock.c
===================================================================
--- linux-2.6.orig/kernel/sched_clock.c
+++ linux-2.6/kernel/sched_clock.c
@@ -249,6 +249,18 @@ unsigned long long cpu_clock(int cpu)
  	return clock;
  }

+unsigned long long local_clock(void)
+{
+	unsigned long long clock;
+	unsigned long flags;
+
+	local_irq_save(flags);
+	clock = sched_clock_cpu(smp_processor_id());
+	local_irq_restore(flags);
+
+	return clock;
+}
+
  #else /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */

  void sched_clock_init(void)
@@ -264,12 +276,17 @@ u64 sched_clock_cpu(int cpu)
  	return sched_clock();
  }

-
  unsigned long long cpu_clock(int cpu)
  {
  	return sched_clock_cpu(cpu);
  }

+unsigned long long local_clock(void)
+{
+	return sched_clock_cpu(0);
+}
+
  #endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */

  EXPORT_SYMBOL_GPL(cpu_clock);
+EXPORT_SYMBOL_GPL(local_clock);
Index: linux-2.6/kernel/trace/trace_clock.c
===================================================================
--- linux-2.6.orig/kernel/trace/trace_clock.c
+++ linux-2.6/kernel/trace/trace_clock.c
@@ -56,7 +56,7 @@ u64 notrace trace_clock_local(void)
   */
  u64 notrace trace_clock(void)
  {
-	return cpu_clock(raw_smp_processor_id());
+	return local_clock();
  }

Should I apply it first and then your today's patch or only the today's 
patch?

Regards,

Piotr Hosowicz


-- 
Szef TVN24 do dziennikarzy: Kochani, przez dwa lata waliliśmy w obóz
rządzący. Tak dalej byc nie może. Jesteśmy telewizją niezależną i to
zobowiązuje. Teraz będziemy kopać w opozycję.
NP: Mark Knopfler - Hard Shoulder
NB: 2.6.34-20100527-2020-gitt-revtd

  parent reply	other threads:[~2010-05-28 14:15 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-24  3:03 BUG: using smp_processor_id() in preemptible [00000000] code: icedove-bin/5449 Piotr Hosowicz
2010-05-24 17:22 ` Piotr Hosowicz
2010-05-25  8:50 ` Peter Zijlstra
2010-05-25  9:42   ` Piotr Hosowicz
2010-05-25  9:45     ` Peter Zijlstra
2010-05-25  9:43   ` Ingo Molnar
2010-05-25  9:47     ` Peter Zijlstra
2010-05-25  9:51       ` Peter Zijlstra
2010-05-25  9:57     ` Piotr Hosowicz
2010-05-25 10:00       ` Peter Zijlstra
2010-05-25 10:05         ` Piotr Hosowicz
2010-05-25 10:29           ` Piotr Hosowicz
2010-05-25 14:13             ` Piotr Hosowicz
2010-05-25 14:34               ` Piotr Hosowicz
2010-05-25 14:36                 ` Peter Zijlstra
2010-05-25 14:48                   ` Piotr Hosowicz
2010-05-25 16:15                     ` Peter Zijlstra
2010-05-25 16:47                       ` Piotr Hosowicz
2010-05-26  2:06                         ` Piotr Hosowicz
2010-05-26  2:51                           ` Piotr Hosowicz
2010-05-25 18:07   ` Divyesh Shah
2010-05-25 18:15     ` Piotr Hosowicz
2010-05-25 21:35     ` Peter Zijlstra
2010-05-26 23:02   ` Andrew Morton
2010-05-27  6:46     ` Peter Zijlstra
2010-05-27  6:51       ` Andrew Morton
     [not found]         ` <1274945751.27810.3765.camel@twins>
     [not found]           ` <20100527113340.d4afb8fc.akpm@linux-foundation.org>
2010-05-28 13:13             ` [PATCH] sched_clock: Provide local_clock() and improve documentation Peter Zijlstra
2010-05-28 13:42               ` Johannes Stezenbach
2010-05-28 15:08                 ` Peter Zijlstra
2010-05-28 14:15               ` Piotr Hosowicz [this message]
2010-05-28 14:22                 ` Piotr Hosowicz
2010-05-28 18:11               ` Chad Talbott
2010-05-28 18:22                 ` Peter Zijlstra
2010-06-09 10:13               ` [tip:sched/core] sched_clock: Add local_clock() API " tip-bot for Peter Zijlstra
2010-06-01  6:41   ` BUG: using smp_processor_id() in preemptible [00000000] code: icedove-bin/5449 Ingo Molnar
2010-06-01  6:47     ` Jens Axboe
2010-06-01  6:55       ` Ingo Molnar
2010-06-01  7:53         ` Jens Axboe
2010-06-12  1:54           ` Divyesh Shah
2010-06-12  9:42             ` Peter Zijlstra
2010-06-02 11:16         ` blkiocg_update_io_add_stats(): INFO: trying to register non-static key Ingo Molnar
2010-06-02 13:04           ` Jens Axboe
2010-06-11  1:33             ` Divyesh Shah
2010-06-11  7:15             ` Peter Zijlstra
2010-06-11  8:34               ` Jens Axboe

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=4BFFD008.4070909@example.com \
    --to=piotr@hosowicz.com \
    --cc=akpm@linux-foundation.org \
    --cc=dpshah@google.com \
    --cc=jens.axboe@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.