public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
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

  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