From: Sergei Shtylyov <sshtylyov@ru•mvista.com>
To: Tony Breeds <tony@bakeyournoodle•com>
Cc: linuxppc-dev@ozlabs•org, Thomas Gleixner <tglx@linutronix•de>,
Paul Mackerras <paulus@samba•org>,
Realtime Kernel <linux-rt-users@vger•kernel.org>
Subject: Re: [PATCH v2 3/4] Implement clockevents driver for powerpc
Date: Mon, 15 Oct 2007 21:40:38 +0400 [thread overview]
Message-ID: <4713A616.3090103@ru.mvista.com> (raw)
In-Reply-To: <20070921032603.0D3EA32C887@thor>
Hello.
Tony Breeds wrote:
> Signed-off-by: Tony Breeds <tony@bakeyournoodle•com>
I don't see my own signoff or at least a reference to my prior work in
this patch or even at -rt patch -- despite this code ha clearly borrowed from
it. And I'm not sure why this crippled version (lacking 40x/ Book E specific
clockevents implementation) is preferred over mine, unless this implementation
was only aimed at PPC64 machines...
> Index: working/arch/powerpc/Kconfig
> ===================================================================
> --- working.orig/arch/powerpc/Kconfig
> +++ working/arch/powerpc/Kconfig
> @@ -30,6 +30,9 @@ config GENERIC_TIME
> config GENERIC_TIME_VSYSCALL
> def_bool y
>
> +config GENERIC_CLOCKEVENTS
> + def_bool y
> +
> config GENERIC_HARDIRQS
> bool
> default y
Also, have the deterministic CPU accounting incompatibility with
clockevents been dealt with?
> Index: working/arch/powerpc/kernel/time.c
> ===================================================================
> --- working.orig/arch/powerpc/kernel/time.c
> +++ working/arch/powerpc/kernel/time.c
[...]
> @@ -519,10 +541,12 @@ void __init iSeries_time_init_early(void
> void timer_interrupt(struct pt_regs * regs)
> {
> struct pt_regs *old_regs;
> - int next_dec;
> int cpu = smp_processor_id();
> - unsigned long ticks;
> - u64 tb_next_jiffy;
> + struct clock_event_device *evt = &per_cpu(decrementers, cpu);
> +
> + /* Ensure a positive value is written to the decrementer, or else
> + * some CPUs will continuue to take decrementer exceptions */
> + set_dec(DECREMENTER_MAX);
BookE and 40x CPUs don't need this.
> #ifdef CONFIG_PPC32
> if (atomic_read(&ppc_n_lost_interrupts) != 0)
> @@ -532,7 +556,6 @@ void timer_interrupt(struct pt_regs * re
> old_regs = set_irq_regs(regs);
> irq_enter();
>
> - profile_tick(CPU_PROFILING);
> calculate_steal_time();
>
> #ifdef CONFIG_PPC_ISERIES
> @@ -540,44 +563,20 @@ void timer_interrupt(struct pt_regs * re
> get_lppaca()->int_dword.fields.decr_int = 0;
> #endif
>
> - while ((ticks = tb_ticks_since(per_cpu(last_jiffy, cpu)))
> - >= tb_ticks_per_jiffy) {
> - /* Update last_jiffy */
> - per_cpu(last_jiffy, cpu) += tb_ticks_per_jiffy;
> - /* Handle RTCL overflow on 601 */
> - if (__USE_RTC() && per_cpu(last_jiffy, cpu) >= 1000000000)
> - per_cpu(last_jiffy, cpu) -= 1000000000;
I don't see where the patch removes those variables themselves...
[...]
> - write_seqlock(&xtime_lock);
> - tb_next_jiffy = tb_last_jiffy + tb_ticks_per_jiffy;
> - if (__USE_RTC() && tb_next_jiffy >= 1000000000)
> - tb_next_jiffy -= 1000000000;
> - if (per_cpu(last_jiffy, cpu) >= tb_next_jiffy) {
> - tb_last_jiffy = tb_next_jiffy;
> - do_timer(1);
> - }
> - write_sequnlock(&xtime_lock);
> - }
Again, where those variables are removed?
> -
> - next_dec = tb_ticks_per_jiffy - ticks;
> - set_dec(next_dec);
> + if (evt->event_handler)
> + evt->event_handler(evt);
> + else
> + evt->set_next_event(DECREMENTER_MAX, evt);
We have already set it to DECREMENTER_MAX at the start of the function.
Please remove the 'else' part...
> @@ -797,6 +796,53 @@ void __init clocksource_init(void)
> clock->name, clock->mult, clock->shift);
> }
>
> +static int decrementer_set_next_event(unsigned long evt,
> + struct clock_event_device *dev)
> +{
> + set_dec(evt);
I'd use (evt - 1) since the interrupt gets generated at 0xffffffff count,
not 0 (on classic CPUs). With you removing of the code that compensated for
the errors, they will accumulate. And no, this wouldn't be enough anyway,
since on 40x and Book E you'll need to set it for evt anyway, since the
interrupt happens at 0 count...
NAK the patch. And I really don't understand why you're throwing alway
already tested/working code...
> + return 0;
> +}
> +
> +static void decrementer_set_mode(enum clock_event_mode mode,
> + struct clock_event_device *dev)
> +{
> + if (mode != CLOCK_EVT_MODE_ONESHOT)
> + decrementer_set_next_event(DECREMENTER_MAX, dev);
> +}
> +
> +static void register_decrementer_clockevent(int cpu)
> +{
> + struct clock_event_device *dec = &per_cpu(decrementers, cpu);
> +
> + *dec = decrementer_clockevent;
> + dec->cpumask = cpumask_of_cpu(cpu);
> +
> + printk(KERN_ERR "clockevent: %s mult[%lx] shift[%d] cpu[%d]\n",
This is a mistake indeed. :-P
WBR, Sergei
next prev parent reply other threads:[~2007-10-15 17:40 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-21 3:26 [PATCH v2 1/4] Implement {read,update}_persistent_clock Tony Breeds
2007-09-21 3:26 ` [PATCH v2 2/4] Implement generic time of day clocksource for powerpc machines Tony Breeds
2007-09-21 4:05 ` Daniel Walker
2007-09-21 4:59 ` Paul Mackerras
2007-09-21 6:43 ` David Gibson
2007-09-21 4:52 ` Stephen Rothwell
2007-09-21 21:35 ` Tony Breeds
2007-09-21 21:35 ` [PATCH v3 " Tony Breeds
2007-10-03 0:48 ` Paul Mackerras
2007-10-03 4:00 ` Thomas Gleixner
2007-09-21 3:26 ` [PATCH v2 4/4] Enable tickless idle and high res timers for powerpc Tony Breeds
2007-09-21 3:26 ` [PATCH v2 3/4] Implement clockevents driver " Tony Breeds
2007-10-15 17:40 ` Sergei Shtylyov [this message]
2007-10-15 18:33 ` Sergei Shtylyov
2007-10-15 23:44 ` Paul Mackerras
2007-10-17 14:29 ` Sergei Shtylyov
2007-10-18 0:51 ` Paul Mackerras
2007-10-18 15:11 ` Sergei Shtylyov
2007-10-19 1:53 ` Paul Mackerras
2007-10-19 12:11 ` Sergei Shtylyov
2007-10-19 12:36 ` Paul Mackerras
2007-10-19 13:35 ` Sergei Shtylyov
2007-10-24 12:07 ` Sergei Shtylyov
2007-10-24 23:55 ` Paul Mackerras
2007-10-17 14:34 ` Sergei Shtylyov
2007-10-18 0:36 ` Paul Mackerras
2007-10-18 14:48 ` Sergei Shtylyov
2007-10-19 0:14 ` Paul Mackerras
2007-10-19 9:22 ` Gabriel Paubert
2007-10-19 11:22 ` Paul Mackerras
2007-10-19 11:49 ` Sergei Shtylyov
2007-10-19 12:24 ` Paul Mackerras
2007-09-26 19:04 ` [PATCH v2 1/4] Implement {read,update}_persistent_clock Steven Rostedt
2007-09-26 19:39 ` Sergei Shtylyov
2007-09-26 19:44 ` Steven Rostedt
2007-09-26 19:58 ` Thomas Gleixner
2007-10-15 18:05 ` Sergei Shtylyov
2007-10-15 23:46 ` Paul Mackerras
2007-10-16 1:19 ` Benjamin Herrenschmidt
2007-10-17 12:45 ` Sergei Shtylyov
2007-09-27 1:59 ` Benjamin Herrenschmidt
2007-10-15 18:07 ` Sergei Shtylyov
2007-10-15 23:02 ` Benjamin Herrenschmidt
2007-10-17 15:34 ` Sergei Shtylyov
2007-10-18 14:18 ` Sergei Shtylyov
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=4713A616.3090103@ru.mvista.com \
--to=sshtylyov@ru$(echo .)mvista.com \
--cc=linux-rt-users@vger$(echo .)kernel.org \
--cc=linuxppc-dev@ozlabs$(echo .)org \
--cc=paulus@samba$(echo .)org \
--cc=tglx@linutronix$(echo .)de \
--cc=tony@bakeyournoodle$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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