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
next prev 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.