Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: James Hogan <james.hogan@imgtec.com>
To: "Maciej W. Rozycki" <macro@imgtec.com>
Cc: Aleksandar Markovic <aleksandar.markovic@rt-rk.com>,
	<linux-mips@linux-mips.org>,
	Goran Ferenc <goran.ferenc@imgtec.com>,
	Miodrag Dinic <miodrag.dinic@imgtec.com>,
	Aleksandar Markovic <aleksandar.markovic@imgtec.com>,
	Douglas Leung <douglas.leung@imgtec.com>,
	<linux-kernel@vger.kernel.org>,
	Paul Burton <paul.burton@imgtec.com>,
	Petar Jovanovic <petar.jovanovic@imgtec.com>,
	Raghu Gandham <raghu.gandham@imgtec.com>,
	Ralf Baechle <ralf@linux-mips.org>
Subject: Re: [PATCH v2 2/4] MIPS: VDSO: Add implementation of clock_gettime() fallback
Date: Thu, 6 Jul 2017 10:05:53 +0100	[thread overview]
Message-ID: <20170706090553.GO31455@jhogan-linux.le.imgtec.org> (raw)
In-Reply-To: <alpine.DEB.2.00.1707060055470.3339@tp.orcam.me.uk>

[-- Attachment #1: Type: text/plain, Size: 2229 bytes --]

On Thu, Jul 06, 2017 at 01:00:34AM +0100, Maciej W. Rozycki wrote:
> On Wed, 28 Jun 2017, Aleksandar Markovic wrote:
> 
> > diff --git a/arch/mips/vdso/gettimeofday.c b/arch/mips/vdso/gettimeofday.c
> > index fd7d433..5f63375 100644
> > --- a/arch/mips/vdso/gettimeofday.c
> > +++ b/arch/mips/vdso/gettimeofday.c
> > @@ -20,6 +20,24 @@
> >  #include <asm/unistd.h>
> >  #include <asm/vdso.h>
> >  
> > +static __always_inline long clock_gettime_fallback(clockid_t _clkid,
> > +					   struct timespec *_ts)
> > +{
> > +	register struct timespec *ts asm("a1") = _ts;
> > +	register clockid_t clkid asm("a0") = _clkid;
> > +	register long ret asm("v0");
> > +	register long nr asm("v0") = __NR_clock_gettime;
> > +	register long error asm("a3");
> > +
> > +	asm volatile(
> > +	"       syscall\n"
> > +	: "=r" (ret), "=r" (error)
> > +	: "r" (clkid), "r" (ts), "r" (nr)
> > +	: "memory");
> > +
> > +	return error ? -ret : ret;
> > +}
> 
>  Hmm, are you sure it is safe nowadays WRT the syscall restart convention 
> to leave out the instruction explicitly loading the syscall number that 
> would normally immediately precede SYSCALL

It should be fine. syscall restart only rewinds one (32-bit)
instruction, and it preserves the syscall number in pt_regs::regs[0]
(see handle_signal() / do_signal() and this code in e.g. scall32-o32.S:)

sw      t1, PT_R0(sp)           # save it for syscall restarting

> (and would have to forcibly use the 32-bit encoding in the microMIPS
> case)?

I don't believe there is a 16-bit SYSCALL encoding in microMIPS, at
least I can't see one in the 5.04 manual.

However, the clobber list is incomplete.
The following registers are written as outputs:
	$2 (v0), $7 (a3)
The following registers are used as arguments and should be preserved:
	$4-$6 (a0-a2), [$8-$9 (a4-a5)] (n32 / n64 only)
And the following other registers are preserved:
	$16-$23, $28-$31
So assuming you already have $2 and $7 as outputs, the clobber list
should be:
	"$1", "$3", ["$8", "$9",] "$10", "$11", "$12", "$13", "$14",
	"$15", "$24", "$25", "hi", "lo", "memory"

(only o32 needs to mark $8-$9 clobbered, but no harm doing so on n32/n64
too)

Cheers
James

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: James Hogan <james.hogan@imgtec.com>
To: "Maciej W. Rozycki" <macro@imgtec.com>
Cc: Aleksandar Markovic <aleksandar.markovic@rt-rk.com>,
	linux-mips@linux-mips.org, Goran Ferenc <goran.ferenc@imgtec.com>,
	Miodrag Dinic <miodrag.dinic@imgtec.com>,
	Aleksandar Markovic <aleksandar.markovic@imgtec.com>,
	Douglas Leung <douglas.leung@imgtec.com>,
	linux-kernel@vger.kernel.org,
	Paul Burton <paul.burton@imgtec.com>,
	Petar Jovanovic <petar.jovanovic@imgtec.com>,
	Raghu Gandham <raghu.gandham@imgtec.com>,
	Ralf Baechle <ralf@linux-mips.org>
Subject: Re: [PATCH v2 2/4] MIPS: VDSO: Add implementation of clock_gettime() fallback
Date: Thu, 6 Jul 2017 10:05:53 +0100	[thread overview]
Message-ID: <20170706090553.GO31455@jhogan-linux.le.imgtec.org> (raw)
Message-ID: <20170706090553.nSjw44ldhMryR2iTwuw1OA0HN6QcfVrETBoddkakoKU@z> (raw)
In-Reply-To: <alpine.DEB.2.00.1707060055470.3339@tp.orcam.me.uk>

[-- Attachment #1: Type: text/plain, Size: 2229 bytes --]

On Thu, Jul 06, 2017 at 01:00:34AM +0100, Maciej W. Rozycki wrote:
> On Wed, 28 Jun 2017, Aleksandar Markovic wrote:
> 
> > diff --git a/arch/mips/vdso/gettimeofday.c b/arch/mips/vdso/gettimeofday.c
> > index fd7d433..5f63375 100644
> > --- a/arch/mips/vdso/gettimeofday.c
> > +++ b/arch/mips/vdso/gettimeofday.c
> > @@ -20,6 +20,24 @@
> >  #include <asm/unistd.h>
> >  #include <asm/vdso.h>
> >  
> > +static __always_inline long clock_gettime_fallback(clockid_t _clkid,
> > +					   struct timespec *_ts)
> > +{
> > +	register struct timespec *ts asm("a1") = _ts;
> > +	register clockid_t clkid asm("a0") = _clkid;
> > +	register long ret asm("v0");
> > +	register long nr asm("v0") = __NR_clock_gettime;
> > +	register long error asm("a3");
> > +
> > +	asm volatile(
> > +	"       syscall\n"
> > +	: "=r" (ret), "=r" (error)
> > +	: "r" (clkid), "r" (ts), "r" (nr)
> > +	: "memory");
> > +
> > +	return error ? -ret : ret;
> > +}
> 
>  Hmm, are you sure it is safe nowadays WRT the syscall restart convention 
> to leave out the instruction explicitly loading the syscall number that 
> would normally immediately precede SYSCALL

It should be fine. syscall restart only rewinds one (32-bit)
instruction, and it preserves the syscall number in pt_regs::regs[0]
(see handle_signal() / do_signal() and this code in e.g. scall32-o32.S:)

sw      t1, PT_R0(sp)           # save it for syscall restarting

> (and would have to forcibly use the 32-bit encoding in the microMIPS
> case)?

I don't believe there is a 16-bit SYSCALL encoding in microMIPS, at
least I can't see one in the 5.04 manual.

However, the clobber list is incomplete.
The following registers are written as outputs:
	$2 (v0), $7 (a3)
The following registers are used as arguments and should be preserved:
	$4-$6 (a0-a2), [$8-$9 (a4-a5)] (n32 / n64 only)
And the following other registers are preserved:
	$16-$23, $28-$31
So assuming you already have $2 and $7 as outputs, the clobber list
should be:
	"$1", "$3", ["$8", "$9",] "$10", "$11", "$12", "$13", "$14",
	"$15", "$24", "$25", "hi", "lo", "memory"

(only o32 needs to mark $8-$9 clobbered, but no harm doing so on n32/n64
too)

Cheers
James

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2017-07-06  9:06 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-28 15:55 [PATCH v2 0/4] MIPS: Fix several VDSO-related issues Aleksandar Markovic
2017-06-28 15:55 ` [PATCH v2 1/4] MIPS: VDSO: Fix conversions in do_monotonic()/do_monotonic_coarse() Aleksandar Markovic
2017-06-28 15:55 ` [PATCH v2 2/4] MIPS: VDSO: Add implementation of clock_gettime() fallback Aleksandar Markovic
2017-07-06  0:00   ` Maciej W. Rozycki
2017-07-06  0:00     ` Maciej W. Rozycki
2017-07-06  9:05     ` James Hogan [this message]
2017-07-06  9:05       ` James Hogan
2017-07-06 13:12       ` Maciej W. Rozycki
2017-07-06 13:12         ` Maciej W. Rozycki
2017-07-06 14:09         ` James Hogan
2017-07-06 14:09           ` James Hogan
2017-06-28 15:55 ` [PATCH v2 3/4] MIPS: VDSO: Add implementation of gettimeofday() fallback Aleksandar Markovic
2017-06-28 15:55 ` [PATCH v2 4/4] MIPS: VDSO: Fix a mismatch between comment and preprocessor constant Aleksandar Markovic

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=20170706090553.GO31455@jhogan-linux.le.imgtec.org \
    --to=james.hogan@imgtec.com \
    --cc=aleksandar.markovic@imgtec.com \
    --cc=aleksandar.markovic@rt-rk.com \
    --cc=douglas.leung@imgtec.com \
    --cc=goran.ferenc@imgtec.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=macro@imgtec.com \
    --cc=miodrag.dinic@imgtec.com \
    --cc=paul.burton@imgtec.com \
    --cc=petar.jovanovic@imgtec.com \
    --cc=raghu.gandham@imgtec.com \
    --cc=ralf@linux-mips.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