From: Guo Ren <ren_guo@c-sky.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
daniel.lezcano@linaro.org, jason@lakedaemon.net, arnd@arndb.de,
c-sky_gcc_upstream@c-sky.com, gnu-csky@mentor.com,
thomas.petazzoni@bootlin.com, wbx@uclibc-ng.org,
green.hu@gmail.com
Subject: Re: [PATCH V2 18/19] clocksource: add C-SKY clocksource drivers
Date: Wed, 4 Jul 2018 18:49:58 +0800 [thread overview]
Message-ID: <20180704104957.GB23536@guoren> (raw)
In-Reply-To: <alpine.DEB.2.21.1807031130050.1601@nanos.tec.linutronix.de>
On Tue, Jul 03, 2018 at 11:39:05AM +0200, Thomas Gleixner wrote:
> -EEMPTYCHANGELOG
Ok
> > +// SPDX-License-Identifier: GPL-2.0
> > +// Copyright (C) 2018 Hangzhou NationalChip Science & Technology Co.,Ltd.
>
> newline please
Ok
> > +#define BITS_CSKY_TIMER 56
> > +
> > +DECLARE_PER_CPU(struct timer_of, csky_to);
>
> static?
Ok.
>
> > +
> > +static int csky_timer_irq;
> > +static int csky_timer_rate;
> > +
> > +static inline u64 get_ccvr(void)
> > +{
> > + u32 lo, hi, t;
> > +
> > + do {
> > + hi = mfcr(PTIM_CCVR_HI);
> > + lo = mfcr(PTIM_CCVR_LO);
> > + t = mfcr(PTIM_CCVR_HI);
> > + } while(t != hi);
>
> No idea which frequency this timer ticks at, but if the 32 bit wrap does
> not come too fast, then you really should avoid that loop. That function is
> called very frequently.
0000006c <clksrc_read>:
hi = mfcr(PTIM_CCVR_HI);
6c: c1c26023 mfcr r3, cr<2, 14>
lo = mfcr(PTIM_CCVR_LO);
70: c1c36021 mfcr r1, cr<3, 14>
t = mfcr(PTIM_CCVR_HI);
74: c1c26022 mfcr r2, cr<2, 14>
} while(t != hi);
78: 648e cmpne r3, r2
7a: 0bf9 bt 0x6c // 6c <clksrc_read>
When two read cr<2, 14> is not equal, we'll retry. So only when
CCVR_LO is at 0xffffffff between the two read of CCVR_HI. That's very
very small probability event for "bt 0x6c".
Don't worry about the "do {...} whie(t != hi)", it's no performance issue.
> > +DEFINE_PER_CPU(struct timer_of, csky_to) = {
>
> static
Ok.
> > + .flags = TIMER_OF_CLOCK | TIMER_OF_IRQ,
> > +
> > + .clkevt = {
> > + .name = "C-SKY SMP Timer V1",
> > + .rating = 300,
> > + .features = CLOCK_EVT_FEAT_PERCPU | CLOCK_EVT_FEAT_ONESHOT,
> > + .set_state_shutdown = csky_timer_shutdown,
> > + .set_state_oneshot = csky_timer_oneshot,
> > + .set_state_oneshot_stopped = csky_timer_oneshot_stopped,
> > + .set_next_event = csky_timer_set_next_event,
> > + },
> > +
> > + .of_irq = {
> > + .handler = timer_interrupt,
> > + .flags = IRQF_TIMER,
> > + .percpu = 1,
>
> This is inconsistent. You made it half tabular and half not. Please use
> tabular style consistently.
Ok.
.clkevt = {
.name = "C-SKY SMP Timer V1",
.features = CLOCK_EVT_FEAT_PERCPU |
CLOCK_EVT_FEAT_ONESHOT,
.rating = 300,
.set_state_shutdown = csky_timer_shutdown,
.set_state_oneshot = csky_timer_oneshot,
.set_state_oneshot_stopped = csky_timer_oneshot_stopped,
.set_next_event = csky_timer_set_next_event,
},
.of_irq = {
.handler = timer_interrupt,
.flags = IRQF_TIMER,
.percpu = 1,
> > +/*** clock event for percpu ***/
>
> Please refrain from inventing new horrible comment styles.
Ok.
/* clock event for percpu */
> > +struct clocksource csky_clocksource = {
> > + .name = "csky_timer_v1_clksrc",
> > + .rating = 400,
> > + .mask = CLOCKSOURCE_MASK(BITS_CSKY_TIMER),
> > + .flags = CLOCK_SOURCE_IS_CONTINUOUS,
> > + .read = clksrc_read,
>
> tabular style please
Ok.
> > + ret = cpuhp_setup_state(CPUHP_AP_DUMMY_TIMER_STARTING,
> > + "clockevents/csky/timer:starting",
> > + csky_timer_starting_cpu,
> > + csky_timer_dying_cpu);
>
> Oh no. Just picking a random hotplug event is not how it works. Add your
> own please and make sure it's at the proper place.
like this?
include/linux/cpuhotplug.h:
CPUHP_AP_KVM_ARM_TIMER_STARTING,
+ CPUHP_AP_CSKY_TIMER_STARTING,
/* Must be the last timer callback */
CPUHP_AP_DUMMY_TIMER_STARTING,
> > + struct clock_event_device *ce = (struct clock_event_device *) dev;
>
> Pointless type cast.
Ok.
struct clock_event_device *ce = dev;
> > + .flags = IRQF_TIMER | IRQF_IRQPOLL,
> > + },
>
> See above
Ok, tabular
Guo Ren
next prev parent reply other threads:[~2018-07-04 10:49 UTC|newest]
Thread overview: 172+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-01 17:30 [PATCH V2 00/19] C-SKY(csky) Linux Kernel Port Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 01/19] csky: Build infrastructure Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 21:01 ` Randy Dunlap
2018-07-01 21:01 ` Randy Dunlap
2018-07-02 1:13 ` Guo Ren
2018-07-02 1:13 ` Guo Ren
2018-07-03 3:33 ` Rob Herring
2018-07-03 3:33 ` Rob Herring
2018-07-03 9:14 ` Guo Ren
2018-07-03 9:14 ` Guo Ren
2018-07-03 16:03 ` Arnd Bergmann
2018-07-03 16:03 ` Arnd Bergmann
2018-07-04 11:40 ` Guo Ren
2018-07-04 11:40 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 02/19] csky: defconfig Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-03 3:16 ` Rob Herring
2018-07-03 3:16 ` Rob Herring
2018-07-03 8:31 ` Guo Ren
2018-07-03 8:31 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 03/19] csky: Kernel booting Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 04/19] csky: Exception handling Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 05/19] csky: System Call Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-03 19:53 ` Arnd Bergmann
2018-07-03 19:53 ` Arnd Bergmann
2018-07-04 11:49 ` Guo Ren
2018-07-04 11:49 ` Guo Ren
2018-07-04 21:04 ` Arnd Bergmann
2018-07-04 21:04 ` Arnd Bergmann
2018-07-05 5:38 ` Guo Ren
2018-07-05 5:38 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 06/19] csky: Cache and TLB routines Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-05 17:40 ` Peter Zijlstra
2018-07-05 17:40 ` Peter Zijlstra
2018-07-07 11:51 ` Guo Ren
2018-07-07 11:51 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 07/19] csky: MMU and page table management Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-02 13:29 ` Christoph Hellwig
2018-07-02 13:29 ` Christoph Hellwig
2018-07-03 2:53 ` Guo Ren
2018-07-03 2:53 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 08/19] csky: Process management and Signal Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 09/19] csky: VDSO and rt_sigreturn Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 10/19] csky: IRQ handling Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 11/19] csky: Atomic operations Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-05 17:50 ` Peter Zijlstra
2018-07-05 17:50 ` Peter Zijlstra
2018-07-06 11:01 ` Guo Ren
2018-07-06 11:01 ` Guo Ren
2018-07-06 11:56 ` Peter Zijlstra
2018-07-06 11:56 ` Peter Zijlstra
2018-07-06 12:17 ` Peter Zijlstra
2018-07-06 12:17 ` Peter Zijlstra
2018-07-07 8:08 ` Guo Ren
2018-07-07 8:08 ` Guo Ren
2018-07-07 20:10 ` Andrea Parri
2018-07-07 20:10 ` Andrea Parri
2018-07-08 1:05 ` Guo Ren
2018-07-08 1:05 ` Guo Ren
2018-07-07 7:42 ` Guo Ren
2018-07-07 7:42 ` Guo Ren
2018-07-07 19:54 ` Andrea Parri
2018-07-07 19:54 ` Andrea Parri
2018-07-08 0:39 ` Guo Ren
2018-07-08 0:39 ` Guo Ren
2018-07-05 17:59 ` Peter Zijlstra
2018-07-05 17:59 ` Peter Zijlstra
2018-07-06 11:44 ` Guo Ren
2018-07-06 11:44 ` Guo Ren
2018-07-06 12:03 ` Peter Zijlstra
2018-07-06 12:03 ` Peter Zijlstra
2018-07-06 13:01 ` Peter Zijlstra
2018-07-06 13:01 ` Peter Zijlstra
2018-07-06 14:06 ` Guo Ren
2018-07-06 14:06 ` Guo Ren
2018-07-05 18:00 ` Peter Zijlstra
2018-07-05 18:00 ` Peter Zijlstra
2018-07-06 11:48 ` Guo Ren
2018-07-06 11:48 ` Guo Ren
2018-07-06 12:05 ` Peter Zijlstra
2018-07-06 12:05 ` Peter Zijlstra
2018-07-06 13:46 ` Guo Ren
2018-07-06 13:46 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 12/19] csky: ELF and module probe Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 13/19] csky: Library functions Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-03 20:04 ` Arnd Bergmann
2018-07-03 20:04 ` Arnd Bergmann
2018-07-04 10:51 ` Guo Ren
2018-07-04 10:51 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 14/19] csky: User access Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 15/19] csky: Debug and Ptrace GDB Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 16/19] csky: SMP support Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-05 18:05 ` Peter Zijlstra
2018-07-05 18:05 ` Peter Zijlstra
2018-07-06 6:07 ` Guo Ren
2018-07-06 6:07 ` Guo Ren
2018-07-06 9:39 ` Peter Zijlstra
2018-07-06 9:39 ` Peter Zijlstra
2018-07-06 13:22 ` Guo Ren
2018-07-06 13:22 ` Guo Ren
2018-07-06 5:24 ` Mark Rutland
2018-07-06 5:24 ` Mark Rutland
2018-07-06 11:32 ` Guo Ren
2018-07-06 11:32 ` Guo Ren
2018-07-06 11:43 ` Mark Rutland
2018-07-06 11:43 ` Mark Rutland
2018-07-06 12:26 ` Guo Ren
2018-07-06 12:26 ` Guo Ren
2018-07-06 16:21 ` Mark Rutland
2018-07-06 16:21 ` Mark Rutland
2018-07-07 6:16 ` Guo Ren
2018-07-07 6:16 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 17/19] csky: Misc headers Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 18/19] clocksource: add C-SKY clocksource drivers Guo Ren
2018-07-01 17:34 ` Guo Ren
2018-07-03 9:39 ` Thomas Gleixner
2018-07-03 9:39 ` Thomas Gleixner
2018-07-04 10:49 ` Guo Ren [this message]
2018-07-04 10:49 ` Guo Ren
2018-07-04 14:35 ` Thomas Gleixner
2018-07-04 14:35 ` Thomas Gleixner
2018-07-05 5:03 ` Guo Ren
2018-07-05 5:03 ` Guo Ren
2018-07-04 17:05 ` Daniel Lezcano
2018-07-04 17:05 ` Daniel Lezcano
2018-07-05 3:30 ` Guo Ren
2018-07-05 3:30 ` Guo Ren
2018-07-05 9:23 ` Daniel Lezcano
2018-07-05 9:23 ` Daniel Lezcano
2018-07-06 5:57 ` Guo Ren
2018-07-06 5:57 ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 19/19] irqchip: add C-SKY irqchip drivers Guo Ren
2018-07-01 17:30 ` Guo Ren
2018-07-03 3:27 ` Rob Herring
2018-07-03 3:27 ` Rob Herring
2018-07-03 7:38 ` Guo Ren
2018-07-03 7:38 ` Guo Ren
2018-07-03 9:28 ` Thomas Gleixner
2018-07-03 9:28 ` Thomas Gleixner
2018-07-04 5:08 ` Guo Ren
2018-07-04 5:08 ` Guo Ren
2018-07-04 6:43 ` Thomas Gleixner
2018-07-04 6:43 ` Thomas Gleixner
2018-07-04 11:58 ` Guo Ren
2018-07-04 11:58 ` Guo Ren
2018-07-11 9:51 ` [PATCH V2 00/19] C-SKY(csky) Linux Kernel Port David Howells
2018-07-11 9:51 ` David Howells
2018-07-12 12:51 ` Guo Ren
2018-07-12 12:51 ` Guo Ren
2018-07-12 16:04 ` Sandra Loosemore
2018-07-12 16:04 ` Sandra Loosemore
2018-07-13 1:30 ` Guo Ren
2018-07-13 1:30 ` Guo Ren
2018-07-13 10:23 ` David Howells
2018-07-13 10:23 ` David Howells
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=20180704104957.GB23536@guoren \
--to=ren_guo@c-sky.com \
--cc=arnd@arndb.de \
--cc=c-sky_gcc_upstream@c-sky.com \
--cc=daniel.lezcano@linaro.org \
--cc=gnu-csky@mentor.com \
--cc=green.hu@gmail.com \
--cc=jason@lakedaemon.net \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=thomas.petazzoni@bootlin.com \
--cc=wbx@uclibc-ng.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox