From: tip-bot for Don Zickus <dzickus@redhat.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
a.p.zijlstra@chello.nl, gorcunov@gmail.com, fweisbec@gmail.com,
tglx@linutronix.de, dzickus@redhat.com, mingo@elte.hu
Subject: [tip:perf/nmi] lockup_detector: Convert per_cpu to __get_cpu_var for readability
Date: Wed, 19 May 2010 17:06:43 GMT [thread overview]
Message-ID: <tip-26e09c6eee14f4827b55137ba0eedc4e77cd50ab@git.kernel.org> (raw)
In-Reply-To: <1274133966-18415-2-git-send-email-dzickus@redhat.com>
Commit-ID: 26e09c6eee14f4827b55137ba0eedc4e77cd50ab
Gitweb: http://git.kernel.org/tip/26e09c6eee14f4827b55137ba0eedc4e77cd50ab
Author: Don Zickus <dzickus@redhat.com>
AuthorDate: Mon, 17 May 2010 18:06:04 -0400
Committer: Frederic Weisbecker <fweisbec@gmail.com>
CommitDate: Wed, 19 May 2010 11:32:14 +0200
lockup_detector: Convert per_cpu to __get_cpu_var for readability
Just a bunch of conversions as suggested by Frederic W.
__get_cpu_var() provides preemption disabled checks.
Plus it gives more readability as it makes it obvious
we are dealing locally now with these vars.
Signed-off-by: Don Zickus <dzickus@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
LKML-Reference: <1274133966-18415-2-git-send-email-dzickus@redhat.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
kernel/watchdog.c | 35 +++++++++++++++++------------------
1 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index e53622c..91b0b26 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -115,7 +115,7 @@ static unsigned long get_sample_period(void)
/* Commands for resetting the watchdog */
static void __touch_watchdog(void)
{
- int this_cpu = raw_smp_processor_id();
+ int this_cpu = smp_processor_id();
__get_cpu_var(watchdog_touch_ts) = get_timestamp(this_cpu);
}
@@ -157,21 +157,21 @@ void touch_softlockup_watchdog_sync(void)
#ifdef CONFIG_HARDLOCKUP_DETECTOR
/* watchdog detector functions */
-static int is_hardlockup(int cpu)
+static int is_hardlockup(void)
{
- unsigned long hrint = per_cpu(hrtimer_interrupts, cpu);
+ unsigned long hrint = __get_cpu_var(hrtimer_interrupts);
- if (per_cpu(hrtimer_interrupts_saved, cpu) == hrint)
+ if (__get_cpu_var(hrtimer_interrupts_saved) == hrint)
return 1;
- per_cpu(hrtimer_interrupts_saved, cpu) = hrint;
+ __get_cpu_var(hrtimer_interrupts_saved) = hrint;
return 0;
}
#endif
-static int is_softlockup(unsigned long touch_ts, int cpu)
+static int is_softlockup(unsigned long touch_ts)
{
- unsigned long now = get_timestamp(cpu);
+ unsigned long now = get_timestamp(smp_processor_id());
/* Warn about unreasonable delays: */
if (time_after(now, touch_ts + softlockup_thresh))
@@ -206,8 +206,6 @@ void watchdog_overflow_callback(struct perf_event *event, int nmi,
struct perf_sample_data *data,
struct pt_regs *regs)
{
- int this_cpu = smp_processor_id();
-
if (__get_cpu_var(watchdog_nmi_touch) == true) {
__get_cpu_var(watchdog_nmi_touch) = false;
return;
@@ -219,7 +217,9 @@ void watchdog_overflow_callback(struct perf_event *event, int nmi,
* fired multiple times before we overflow'd. If it hasn't
* then this is a good indication the cpu is stuck
*/
- if (is_hardlockup(this_cpu)) {
+ if (is_hardlockup()) {
+ int this_cpu = smp_processor_id();
+
/* only print hardlockups once */
if (__get_cpu_var(hard_watchdog_warn) == true)
return;
@@ -247,7 +247,6 @@ static inline void watchdog_interrupt_count(void) { return; }
/* watchdog kicker functions */
static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
{
- int this_cpu = smp_processor_id();
unsigned long touch_ts = __get_cpu_var(watchdog_touch_ts);
struct pt_regs *regs = get_irq_regs();
int duration;
@@ -262,12 +261,12 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
hrtimer_forward_now(hrtimer, ns_to_ktime(get_sample_period()));
if (touch_ts == 0) {
- if (unlikely(per_cpu(softlockup_touch_sync, this_cpu))) {
+ if (unlikely(__get_cpu_var(softlockup_touch_sync))) {
/*
* If the time stamp was touched atomically
* make sure the scheduler tick is up to date.
*/
- per_cpu(softlockup_touch_sync, this_cpu) = false;
+ __get_cpu_var(softlockup_touch_sync) = false;
sched_clock_tick();
}
__touch_watchdog();
@@ -280,14 +279,14 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
* indicate it is getting cpu time. If it hasn't then
* this is a good indication some task is hogging the cpu
*/
- duration = is_softlockup(touch_ts, this_cpu);
+ duration = is_softlockup(touch_ts);
if (unlikely(duration)) {
/* only warn once */
if (__get_cpu_var(soft_watchdog_warn) == true)
return HRTIMER_RESTART;
printk(KERN_ERR "BUG: soft lockup - CPU#%d stuck for %us! [%s:%d]\n",
- this_cpu, duration,
+ smp_processor_id(), duration,
current->comm, task_pid_nr(current));
print_modules();
print_irqtrace_events(current);
@@ -309,10 +308,10 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
/*
* The watchdog thread - touches the timestamp.
*/
-static int watchdog(void *__bind_cpu)
+static int watchdog(void *unused)
{
struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 };
- struct hrtimer *hrtimer = &per_cpu(watchdog_hrtimer, (unsigned long)__bind_cpu);
+ struct hrtimer *hrtimer = &__raw_get_cpu_var(watchdog_hrtimer);
sched_setscheduler(current, SCHED_FIFO, ¶m);
@@ -328,7 +327,7 @@ static int watchdog(void *__bind_cpu)
/*
* Run briefly once per second to reset the softlockup timestamp.
* If this gets delayed for more than 60 seconds then the
- * debug-printout triggers in softlockup_tick().
+ * debug-printout triggers in watchdog_timer_fn().
*/
while (!kthread_should_stop()) {
__touch_watchdog();
next prev parent reply other threads:[~2010-05-19 17:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-17 22:06 [PATCH 0/3] lockup detector fixes Don Zickus
2010-05-17 22:06 ` [PATCH 1/3] lockup_detector: convert per_cpu to __get_cpu_var for readability Don Zickus
2010-05-19 8:47 ` Frederic Weisbecker
2010-05-19 17:06 ` tip-bot for Don Zickus [this message]
2010-05-17 22:06 ` [PATCH 2/3] [watchdog] separate hardlockup/softlockup enable paths Don Zickus
2010-05-19 8:46 ` Frederic Weisbecker
2010-05-17 22:06 ` [PATCH 3/3] [watchdog] re-introduce support for nmi_watchdog, nosoftlockup Don Zickus
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=tip-26e09c6eee14f4827b55137ba0eedc4e77cd50ab@git.kernel.org \
--to=dzickus@redhat.com \
--cc=a.p.zijlstra@chello.nl \
--cc=fweisbec@gmail.com \
--cc=gorcunov@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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.