Messages in this thread Patch in this message | | | Date | Wed, 19 Oct 2011 20:07:41 +0200 | From | Robert Richter <> | Subject | Re: [PATCH 4/5] oprofile: Remove exit function for timer mode |
| |
See below for Some more comments after testing and reviewing the code. Will send a new version with these comments incorporated.
-Robert
On 17.10.11 10:27:04, Robert Richter wrote: > +static struct notifier_block __cpuinitdata nmi_timer_cpu_nb = {
The __cpuinitdata attribute causes a section mismatch, will fix it.
> + .notifier_call = nmi_timer_cpu_notifier > +};
> +static int nmi_timer_setup(void) > +{ > + int cpu, err; > + > + /* clock cycles per tick: */ > + nmi_timer_attr.sample_period = (u64)cpu_khz * TICK_NSEC / NSEC_PER_MSEC;
This is broken on 32 bit.
Will replace it with:
/* clock cycles per tick: */ period = (u64)cpu_khz * 1000; do_div(period, HZ); nmi_timer_attr.sample_period = period;
> + pr_info("sample_period: %lld, cpu_khz: %d, nsec/tick: %ld\n", > + nmi_timer_attr.sample_period, cpu_khz, TICK_NSEC);
I will remove this pr_info().
> + > + get_online_cpus(); > + err = register_cpu_notifier(&nmi_timer_cpu_nb); > + if (err) > + goto out;
> diff --git a/drivers/oprofile/oprof.c b/drivers/oprofile/oprof.c > index f7cd069..af9cbea 100644 > --- a/drivers/oprofile/oprof.c > +++ b/drivers/oprofile/oprof.c > @@ -248,15 +248,21 @@ static int __init oprofile_init(void) > /* always init architecture to setup backtrace support */ > err = oprofile_arch_init(&oprofile_ops); > > - timer_mode = err || timer; /* fall back to timer mode on errors */ > + timer_mode = err || timer; > if (timer_mode) { > if (!err) > oprofile_arch_exit(); > - err = oprofile_timer_init(&oprofile_ops); > - if (err) > - return err; > + /* no nmi timer mode if oprofile.timer is set: */ > + if (!timer) > + err = op_nmi_timer_init(&oprofile_ops);
As nmi timer is initialized here, we can remove it in arch/x86. This eases setup functions for x86.
> + /* fall back to timer mode on errors: */ > + if (err || timer) > + err = oprofile_timer_init(&oprofile_ops); > } > > + if (err) > + return err; > + > err = oprofilefs_register(); > if (!err) > return 0;
-- Advanced Micro Devices, Inc. Operating System Research Center
| |