linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Finn Thain <fthain@telegraphics.com.au>
To: Arnd Bergmann <arnd@arndb.de>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	Tony Luck <tony.luck@intel.com>,
	Fenghua Yu <fenghua.yu@intel.com>,
	Greg Ungerer <gerg@linux-m68k.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Philip Blundell <philb@gnu.org>,
	Joshua Thompson <funaho@jurai.org>, Sam Creasey <sammy@sammy.net>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Helge Deller <deller@gmx.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	John Stultz <john.stultz@linaro.org>,
	Stephen Boyd <sboyd@kernel.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	linux-ia64@vger.kernel.org,
	Parisc List <linux-parisc@vger.kernel.org>,
	linux-m68k <linux-m68k@lists.linux-m68k.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [RFC 13/13] m68k: mac: convert to generic clockevent
Date: Thu, 15 Oct 2020 12:18:57 +1100 (AEDT)	[thread overview]
Message-ID: <alpine.LNX.2.23.453.2010150937430.16@nippy.intranet> (raw)
In-Reply-To: <CAK8P3a3rM7gJjdTtcKzr6yi15n6xs-yhEpmSOf3QHfahQwxqkw@mail.gmail.com>

On Sat, 10 Oct 2020, Arnd Bergmann wrote:

> > Perhaps patch 13 does not belong in this series (?).
> >
> > All m68k platforms will need conversion before the TODO can be removed 
> > from Documentation/features/time/clockevents/arch-support.txt.
> 
> Yes, correct. I marked this patch as RFC instead of PATCH, as I'm just 
> trying to find out where it should be headed. I would hope the other 
> patches can just get merged.
> 

I wonder whether we can improve support for your proposed configuration 
i.e. a system with no oneshot clockevent device.

The 16 platforms you identified are not all in that category but I suspect 
that there are others which are (though they don't appear in this series 
because they already use GENERIC_CLOCKEVENTS).

One useful optimization would be some way to elide oneshot clockevent 
support (perhaps with the help of Link Time Optimization).

> > On m68k, HZ is fixed at 100. Without addressing that, would there be 
> > any benefit from adopting GENERIC_CLOCKEVENTS as per this RFC patch?
> 
> I don't think so, I mainly did it to see if there is a problem with 
> mixing the two modes, and I couldn't find any. The behavior seems 
> unchanged before and after my patch, the main difference being a few 
> extra kilobytes in kernel .text for the generic clockevents code.
> 

I think that is a good reason to convert all m68k platforms at once and to 
elide some of the dead code.

> > On Thu, 8 Oct 2020, Arnd Bergmann wrote:
> >
> > > Now that the infrastructure allows kernels to have both legacy timer 
> > > ticks and clockevent drivers in the same image, start by moving one 
> > > platform to generic clockevents.
> > >
> > > As qemu only supports the q800 platform among the classic m68k, use 
> > > that as an example.
> > >
> >
> > Correct VIA emulation is suprisingly difficult, so this kind of work 
> > should be tested on real hardware.
> >
> > I say that because when I did the clocksource conversion for m68k I 
> > ran into a bug in QEMU (since fixed) and also because I once worked on 
> > some of the bugs in the emulated VIA device used in MAME/MESS.
> 
> Good point, though I would be surprised if anything went wrong with this 
> patch on real hardware but not in emulation, as all the register-level 
> interactions with the timer are the same.
> 

On the subject of register accesses, via1[ACR] is shared with ADB drivers, 
so this patch probably has to protect those accesses with 
local_irq_save/restore or local_irq_disable/enable. (I can't be sure of 
the contexts in which .set_state_shutdown and .set_state_periodic methods 
are called.)

> Adding oneshot mode is a completely different matter though, that 
> clearly needs to be tested on real hardware.
> 

Right, and many emulators trade-off timing accuracy for performance which 
makes them unsuitable for testing invasive changes of that sort.

> > > I also tried adding oneshot mode, which was successful but broke the 
> > > clocksource. It's probably not hard to make it work properly, but 
> > > this is where I've stopped.
> > >
> >
> > I'm not so sure that one timer is able to support both a clocksource 
> > driver and a clockevent driver. In some cases we may have to drop the 
> > clocksource driver (i.e. fall back on the jiffies clocksource).
> >
> > Anyway, even on Macs with only one VIA chip we still have two timers. 
> > So I think we should try to use Timer 1 as a freerunning clocksource 
> > and Timer 2 as a oneshot clock event. This may result in better 
> > accuracy and simpler code. This may require some experimentation 
> > though.
> 
> Ah, good. This is partly what I had been hoping for, as my patch can be 
> used as a starting point for that if you want to give it a go.
> 

After looking at the chip documentation I don't think it's viable to use 
the hardware timers in the way I proposed. A VIA register access requires 
at least one full VIA clock cycle (about 1.3 us) which means register 
accesses themselves cause timing delays. They also make clocksource reads 
expensive.

I think this rules out oneshot clockevent devices because if the system 
offered such a device it would preferentially get used as a tick device.

So I think your approach (periodic clockevent device driven by the 
existing periodic tick interrupt) is best for this platform due to 
simplicity (not much code) and performance (good accuracy, no additional 
overhead).

I suspect the same approach would work equally well on other platforms too 
(even though they are probably be capable of oneshot clockevent devices).

>      Arnd
> 

  reply	other threads:[~2020-10-15  1:19 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-08 15:46 [PATCH 00/13] Clean up legacy clock tick users Arnd Bergmann
2020-10-08 15:46 ` [PATCH 01/13] timekeeping: add CONFIG_LEGACY_TIMER_TICK Arnd Bergmann
2020-10-09 22:18   ` Finn Thain
2020-10-10 20:31     ` Arnd Bergmann
2020-10-12 13:14   ` Geert Uytterhoeven
2020-10-08 15:46 ` [PATCH 02/13] ia64: convert to legacy_timer_tick Arnd Bergmann
2020-10-08 15:46 ` [PATCH 03/13] ARM: rpc: use legacy_timer_tick Arnd Bergmann
2020-10-08 15:46 ` [PATCH 04/13] parisc: " Arnd Bergmann
2020-10-08 15:46 ` [PATCH 05/13] m68k: coldfire: use legacy_timer_tick() Arnd Bergmann
2020-10-09 12:53   ` Greg Ungerer
2020-10-09 13:23     ` Arnd Bergmann
2020-10-08 15:46 ` [PATCH 06/13] m68k: split heartbeat out of timer function Arnd Bergmann
2020-10-12 13:14   ` Geert Uytterhoeven
2020-10-08 15:46 ` [PATCH 07/13] m68k: sun3/sun3c: use legacy_timer_tick Arnd Bergmann
2020-10-12 13:15   ` Geert Uytterhoeven
2020-10-08 15:46 ` [PATCH 08/13] m68k: m68328: use legacy_timer_tick() Arnd Bergmann
2020-10-12 13:15   ` Geert Uytterhoeven
2020-10-12 15:30     ` Arnd Bergmann
2020-10-12 20:33       ` Geert Uytterhoeven
2020-10-08 15:46 ` [PATCH 09/13] m68k: change remaining timers to legacy_timer_tick Arnd Bergmann
2020-10-12 13:15   ` Geert Uytterhoeven
2020-10-08 15:46 ` [PATCH 10/13] m68k: remove timer_interrupt() function Arnd Bergmann
2020-10-12 13:15   ` Geert Uytterhoeven
2020-10-08 15:46 ` [PATCH 11/13] timekeeping: remove xtime_update Arnd Bergmann
2020-10-12 13:15   ` Geert Uytterhoeven
2020-10-12 13:37     ` Arnd Bergmann
2020-10-12 20:44       ` Thomas Gleixner
2020-10-08 15:46 ` [PATCH 12/13] timekeeping: default GENERIC_CLOCKEVENTS to enabled Arnd Bergmann
2020-10-12 13:15   ` Geert Uytterhoeven
2020-10-08 15:46 ` [RFC 13/13] m68k: mac: convert to generic clockevent Arnd Bergmann
2020-10-09 22:21   ` Finn Thain
2020-10-10 18:52     ` Arnd Bergmann
2020-10-15  1:18       ` Finn Thain [this message]
     [not found]         ` <CAK8P3a2ymv79j1edtJ983-VgjtxvT_6co7V0VRnHzcneW+0ZtA@mail.gmail.com>
2020-10-18  0:54           ` Finn Thain
     [not found]         ` <CAK8P3a3i6cum_9xGgsbxjXXvbRsP8Po5qLZ0Agb3c4gZTKC9GQ@mail.gmail.com>
2020-10-23  9:24           ` Geert Uytterhoeven
2020-10-25 12:45             ` Geert Uytterhoeven
2020-11-06  2:52             ` Finn Thain
2020-11-16 23:27               ` Sam Creasey
2020-10-30  0:41           ` Finn Thain
2020-10-30 13:12             ` Greg Ungerer
2020-11-06  3:12               ` Finn Thain
2020-10-12 22:18 ` [PATCH 00/13] Clean up legacy clock tick users Linus Walleij

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=alpine.LNX.2.23.453.2010150937430.16@nippy.intranet \
    --to=fthain@telegraphics.com.au \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=arnd@arndb.de \
    --cc=daniel.lezcano@linaro.org \
    --cc=deller@gmx.de \
    --cc=fenghua.yu@intel.com \
    --cc=funaho@jurai.org \
    --cc=geert@linux-m68k.org \
    --cc=gerg@linux-m68k.org \
    --cc=john.stultz@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=philb@gnu.org \
    --cc=sammy@sammy.net \
    --cc=sboyd@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    /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;
as well as URLs for NNTP newsgroup(s).