All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] MIPS: Fix r4k clockevents registration
@ 2016-07-21  6:27 Huacai Chen
  2016-07-21  6:27 ` [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled Huacai Chen
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Huacai Chen @ 2016-07-21  6:27 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: John Crispin, Steven J . Hill, linux-mips, Fuxin Zhang,
	Zhangjin Wu, Huacai Chen, stable, Heiher

CPUFreq need min_delta_ticks/max_delta_ticks to be initialized, and
this can be done by clockevents_config_and_register().

Cc: stable@vger.kernel.org
Signed-off-by: Heiher <r@hev.cc>
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
 arch/mips/kernel/cevt-r4k.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
index e4c21bb..804d2a2 100644
--- a/arch/mips/kernel/cevt-r4k.c
+++ b/arch/mips/kernel/cevt-r4k.c
@@ -276,12 +276,7 @@ int r4k_clockevent_init(void)
 				  CLOCK_EVT_FEAT_C3STOP |
 				  CLOCK_EVT_FEAT_PERCPU;
 
-	clockevent_set_clock(cd, mips_hpt_frequency);
-
-	/* Calculate the min / max delta */
-	cd->max_delta_ns	= clockevent_delta2ns(0x7fffffff, cd);
 	min_delta		= calculate_min_delta();
-	cd->min_delta_ns	= clockevent_delta2ns(min_delta, cd);
 
 	cd->rating		= 300;
 	cd->irq			= irq;
@@ -289,7 +284,7 @@ int r4k_clockevent_init(void)
 	cd->set_next_event	= mips_next_event;
 	cd->event_handler	= mips_event_handler;
 
-	clockevents_register_device(cd);
+	clockevents_config_and_register(cd, mips_hpt_frequency, min_delta, 0x7fffffff);
 
 	if (cp0_timer_irq_installed)
 		return 0;
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled
  2016-07-21  6:27 [PATCH 1/3] MIPS: Fix r4k clockevents registration Huacai Chen
@ 2016-07-21  6:27 ` Huacai Chen
  2016-07-22  2:27     ` Ralf Baechle
  2016-07-21  6:27 ` [PATCH 3/3] MIPS: hpet: Increase HPET_MIN_PROG_DELTA and decrease HPET_MIN_CYCLES Huacai Chen
  2016-07-22  3:25 ` [PATCH 1/3] MIPS: Fix r4k clockevents registration Ralf Baechle
  2 siblings, 1 reply; 7+ messages in thread
From: Huacai Chen @ 2016-07-21  6:27 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: John Crispin, Steven J . Hill, linux-mips, Fuxin Zhang,
	Zhangjin Wu, Huacai Chen, stable

Don't register r4k sched clock when CPUFREQ enabled because sched clock
need a constant frequency.

Cc: stable@vger.kernel.org
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
 arch/mips/kernel/csrc-r4k.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c
index 1f91056..5131b98 100644
--- a/arch/mips/kernel/csrc-r4k.c
+++ b/arch/mips/kernel/csrc-r4k.c
@@ -82,7 +82,9 @@ int __init init_r4k_clocksource(void)
 
 	clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
 
+#ifndef CONFIG_CPUFREQ
 	sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
+#endif
 
 	return 0;
 }
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] MIPS: hpet: Increase HPET_MIN_PROG_DELTA and decrease HPET_MIN_CYCLES
  2016-07-21  6:27 [PATCH 1/3] MIPS: Fix r4k clockevents registration Huacai Chen
  2016-07-21  6:27 ` [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled Huacai Chen
@ 2016-07-21  6:27 ` Huacai Chen
  2016-07-22  3:25 ` [PATCH 1/3] MIPS: Fix r4k clockevents registration Ralf Baechle
  2 siblings, 0 replies; 7+ messages in thread
From: Huacai Chen @ 2016-07-21  6:27 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: John Crispin, Steven J . Hill, linux-mips, Fuxin Zhang,
	Zhangjin Wu, Huacai Chen, stable

At first, we prefer to use mips clockevent device, so we decrease the
rating of hpet clockevent device.

For hpet, if HPET_MIN_PROG_DELTA (minimum delta of hpet programming) is
too small and HPET_MIN_CYCLES (threshold of -ETIME checking) is too
large, then hpet_next_event() can easily return -ETIME. After commit
c6eb3f70d44828 ("hrtimer: Get rid of hrtimer softirq") this will cause
a RCU stall.

So, HPET_MIN_PROG_DELTA must be sufficient that we don't re-trip the
-ETIME check -- if we do, we will return -ETIME, forward the next event
time, try to set it, return -ETIME again, and basically lock the system
up. Meanwhile, HPET_MIN_CYCLES doesn't need to be too large, 16 cycles
is enough.

This solution is similar to commit f9eccf24615672 ("clocksource/drivers
/vt8500: Increase the minimum delta").

By the way, this patch ensures hpet count/compare to be 32-bit long.

Cc: stable@vger.kernel.org
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
 arch/mips/loongson64/loongson-3/hpet.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/mips/loongson64/loongson-3/hpet.c b/arch/mips/loongson64/loongson-3/hpet.c
index 249039a..4788bea 100644
--- a/arch/mips/loongson64/loongson-3/hpet.c
+++ b/arch/mips/loongson64/loongson-3/hpet.c
@@ -13,8 +13,8 @@
 #define SMBUS_PCI_REG64		0x64
 #define SMBUS_PCI_REGB4		0xb4
 
-#define HPET_MIN_CYCLES		64
-#define HPET_MIN_PROG_DELTA	(HPET_MIN_CYCLES + (HPET_MIN_CYCLES >> 1))
+#define HPET_MIN_CYCLES		16
+#define HPET_MIN_PROG_DELTA	(HPET_MIN_CYCLES * 12)
 
 static DEFINE_SPINLOCK(hpet_lock);
 DEFINE_PER_CPU(struct clock_event_device, hpet_clockevent_device);
@@ -157,14 +157,14 @@ static int hpet_tick_resume(struct clock_event_device *evt)
 static int hpet_next_event(unsigned long delta,
 		struct clock_event_device *evt)
 {
-	unsigned int cnt;
-	int res;
+	u32 cnt;
+	s32 res;
 
 	cnt = hpet_read(HPET_COUNTER);
-	cnt += delta;
+	cnt += (u32) delta;
 	hpet_write(HPET_T0_CMP, cnt);
 
-	res = (int)(cnt - hpet_read(HPET_COUNTER));
+	res = (s32)(cnt - hpet_read(HPET_COUNTER));
 
 	return res < HPET_MIN_CYCLES ? -ETIME : 0;
 }
@@ -230,7 +230,7 @@ void __init setup_hpet_timer(void)
 
 	cd = &per_cpu(hpet_clockevent_device, cpu);
 	cd->name = "hpet";
-	cd->rating = 320;
+	cd->rating = 100;
 	cd->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
 	cd->set_state_shutdown = hpet_set_state_shutdown;
 	cd->set_state_periodic = hpet_set_state_periodic;
-- 
2.7.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled
  2016-07-21  6:27 ` [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled Huacai Chen
@ 2016-07-22  2:27     ` Ralf Baechle
  0 siblings, 0 replies; 7+ messages in thread
From: Ralf Baechle @ 2016-07-22  2:20 UTC (permalink / raw)
  To: Huacai Chen
  Cc: John Crispin, Steven J . Hill, linux-mips, Fuxin Zhang,
	Zhangjin Wu, stable

On Thu, Jul 21, 2016 at 02:27:50PM +0800, Huacai Chen wrote:

> Don't register r4k sched clock when CPUFREQ enabled because sched clock
> need a constant frequency.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
> ---
>  arch/mips/kernel/csrc-r4k.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c
> index 1f91056..5131b98 100644
> --- a/arch/mips/kernel/csrc-r4k.c
> +++ b/arch/mips/kernel/csrc-r4k.c
> @@ -82,7 +82,9 @@ int __init init_r4k_clocksource(void)
>  
>  	clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
>  
> +#ifndef CONFIG_CPUFREQ
>  	sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
> +#endif

There is no config symbol CONFIG_CPUFREQ and I think if the clock may
change, we shouldn't register it as csrc or cevt.

  Ralf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled
@ 2016-07-22  2:27     ` Ralf Baechle
  0 siblings, 0 replies; 7+ messages in thread
From: Ralf Baechle @ 2016-07-22  2:27 UTC (permalink / raw)
  To: Huacai Chen; +Cc: John Crispin, linux-mips, Fuxin Zhang, Zhangjin Wu, stable

On Thu, Jul 21, 2016 at 02:27:50PM +0800, Huacai Chen wrote:

> Don't register r4k sched clock when CPUFREQ enabled because sched clock
> need a constant frequency.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
> ---
>  arch/mips/kernel/csrc-r4k.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c
> index 1f91056..5131b98 100644
> --- a/arch/mips/kernel/csrc-r4k.c
> +++ b/arch/mips/kernel/csrc-r4k.c
> @@ -82,7 +82,9 @@ int __init init_r4k_clocksource(void)
>  
>  	clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
>  
> +#ifndef CONFIG_CPUFREQ
>  	sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
> +#endif

There is no config symbol CONFIG_CPUFREQ and I think if the clock may
change, we shouldn't register it as csrc or cevt.

  Ralf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] MIPS: Fix r4k clockevents registration
  2016-07-21  6:27 [PATCH 1/3] MIPS: Fix r4k clockevents registration Huacai Chen
  2016-07-21  6:27 ` [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled Huacai Chen
  2016-07-21  6:27 ` [PATCH 3/3] MIPS: hpet: Increase HPET_MIN_PROG_DELTA and decrease HPET_MIN_CYCLES Huacai Chen
@ 2016-07-22  3:25 ` Ralf Baechle
  2 siblings, 0 replies; 7+ messages in thread
From: Ralf Baechle @ 2016-07-22  3:25 UTC (permalink / raw)
  To: Huacai Chen
  Cc: John Crispin, linux-mips, Fuxin Zhang, Zhangjin Wu, stable,
	Heiher

Applied.

  Ralf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled
  2016-07-22  2:27     ` Ralf Baechle
  (?)
@ 2016-07-22  3:42     ` Huacai Chen
  -1 siblings, 0 replies; 7+ messages in thread
From: Huacai Chen @ 2016-07-22  3:42 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: John Crispin, Linux MIPS Mailing List, Fuxin Zhang, Zhangjin Wu,
	stable

Oh, CONFIG_CPUFREQ should be CONFIG_CPU_FREQ. cevt-r4k can be used
because CPUFreq will call clockevents_update_freq() after frequency
changes, and csrc-r4k is need at boot time (then be replaced by other
csrc).

Huacai

On Fri, Jul 22, 2016 at 10:27 AM, Ralf Baechle <ralf@linux-mips.org> wrote:
> On Thu, Jul 21, 2016 at 02:27:50PM +0800, Huacai Chen wrote:
>
>> Don't register r4k sched clock when CPUFREQ enabled because sched clock
>> need a constant frequency.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Huacai Chen <chenhc@lemote.com>
>> ---
>>  arch/mips/kernel/csrc-r4k.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c
>> index 1f91056..5131b98 100644
>> --- a/arch/mips/kernel/csrc-r4k.c
>> +++ b/arch/mips/kernel/csrc-r4k.c
>> @@ -82,7 +82,9 @@ int __init init_r4k_clocksource(void)
>>
>>       clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
>>
>> +#ifndef CONFIG_CPUFREQ
>>       sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
>> +#endif
>
> There is no config symbol CONFIG_CPUFREQ and I think if the clock may
> change, we shouldn't register it as csrc or cevt.
>
>   Ralf
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-07-22  3:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-21  6:27 [PATCH 1/3] MIPS: Fix r4k clockevents registration Huacai Chen
2016-07-21  6:27 ` [PATCH 2/3] MIPS: Don't register r4k sched clock when CPUFREQ enabled Huacai Chen
2016-07-22  2:20   ` Ralf Baechle
2016-07-22  2:27     ` Ralf Baechle
2016-07-22  3:42     ` Huacai Chen
2016-07-21  6:27 ` [PATCH 3/3] MIPS: hpet: Increase HPET_MIN_PROG_DELTA and decrease HPET_MIN_CYCLES Huacai Chen
2016-07-22  3:25 ` [PATCH 1/3] MIPS: Fix r4k clockevents registration Ralf Baechle

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.