All of lore.kernel.org
 help / color / mirror / Atom feed
From: 陈松 <chensong@kylinos.cn>
To: "florian.bezdeka--- via Xenomai" <xenomai@xenomai.org>
Subject: 回复: Re: [PATCH 1/3] y2038: cobalt/posix/clock: Adding clock_nanosleep64
Date: Tue, 20 Apr 2021 09:10:59 +0800	[thread overview]
Message-ID: <13mfhgf7syn-13mgre8musg@nsmail6.0> (raw)




   主 题:Re: [PATCH 1/3] y2038: cobalt/posix/clock: Adding clock_nanosleep64

   日 期:
   发件人:florian.bezdeka--- via Xenomai
   收件人:rpm@xenomai.orgxenomai@xenomai.orgchensong@tj.kylinos.cn


   On Wed, 2021-03-31 at 11:26 +0800, chensong wrote:
   > Add a syscall specific for clock_nanosleep with 64bit
   > time_t.
   >
   > Signed-off-by: chensong
   > ---
   >  include/cobalt/uapi/syscall.h   |  1 +
   >  kernel/cobalt/posix/clock.c     | 23 +++++++++++++++++++++++
   >  kernel/cobalt/posix/clock.h     |  5 +++++
   >  kernel/cobalt/posix/syscall32.c | 23 +++++++++++++++++++++++
   >  kernel/cobalt/posix/syscall32.h |  6 ++++++
   >  5 files changed, 58 insertions(+)
   >
   > diff --git a/include/cobalt/uapi/syscall.h
   b/include/cobalt/uapi/syscall.h
   > index 438af30..acb8260 100644
   > --- a/include/cobalt/uapi/syscall.h
   > +++ b/include/cobalt/uapi/syscall.h
   > @@ -125,6 +125,7 @@
   >  #define sc_cobalt_sem_timedwait64 102
   >  #define sc_cobalt_clock_gettime64 103
   >  #define sc_cobalt_clock_settime64 104
   > +#define sc_cobalt_clock_nanosleep64 105
   >
   >
   >  #define __NR_COBALT_SYSCALLS 128 /* Power of 2 */
   >
   > diff --git a/kernel/cobalt/posix/clock.c
   b/kernel/cobalt/posix/clock.c
   > index f0f9fb4..5be89ad 100644
   > --- a/kernel/cobalt/posix/clock.c
   > +++ b/kernel/cobalt/posix/clock.c
   > @@ -338,6 +338,29 @@ COBALT_SYSCALL(clock_nanosleep, primary,
   >   return ret;
   >  }
   >
   > +COBALT_SYSCALL(clock_nanosleep64, primary,
   > +       (clockid_t clock_id, int flags,
   > + const struct __kernel_timespec __user *u_rqt,
   > + struct __kernel_timespec __user *u_rmt))
   > +{
   > + struct timespec64 rqt, rmt, *rmtp = NULL;
   > + int ret;
   > +
   > + if (u_rmt)
   > + rmtp = &rmt;
   > +
   > + if (cobalt_get_timespec64(&rqt, u_rqt))
   > + return -EFAULT;
   > +
   > + ret = __cobalt_clock_nanosleep(clock_id, flags, &rqt, rmtp);
   > + if (ret == -EINTR && flags == 0 && rmtp) {
   > + if (cobalt_put_timespec64(rmtp, u_rmt))
   > + return -EFAULT;
   > + }
   > +
   > + return ret;
   > +}
   The compat syscall looks exactly the same. So I would vote for moving
   the code into a separate function (maybe called
   __cobalt_clock_nanosleep64) which holds the code above and calling it

   from both syscall handlers (this one + the compat one below).

   [song]thanks, it also applies to clock_settime64 and clock_gettime64, i
   will submit a new version regarding this case.
   > +
   >  int cobalt_clock_register(struct xnclock *clock, const cpumask_t
   *affinity,
   >    clockid_t *clk_id)
   >  {
   > diff --git a/kernel/cobalt/posix/clock.h
   b/kernel/cobalt/posix/clock.h
   > index fa07c56..f248578 100644
   > --- a/kernel/cobalt/posix/clock.h
   > +++ b/kernel/cobalt/posix/clock.h
   > @@ -134,6 +134,11 @@ COBALT_SYSCALL_DECL(clock_nanosleep,
   >       const struct __user_old_timespec __user *u_rqt,
   >       struct __user_old_timespec __user *u_rmt));
   >  +COBALT_SYSCALL_DECL(clock_nanosleep64,
   > +    (clockid_t clock_id, int flags,
   > +     const struct __kernel_timespec __user *u_rqt,
   > +     struct __kernel_timespec __user *u_rmt));
   > +
   >  int cobalt_clock_register(struct xnclock *clock,
   >    const cpumask_t *affinity,
   >    clockid_t *clk_id);
   > diff --git a/kernel/cobalt/posix/syscall32.c
   b/kernel/cobalt/posix/syscall32.c
   > index 1a1b830..eb83c57 100644
   > --- a/kernel/cobalt/posix/syscall32.c
   > +++ b/kernel/cobalt/posix/syscall32.c
   > @@ -250,6 +250,29 @@ COBALT_SYSCALL32emu(clock_nanosleep,
   nonrestartable,
   >   return ret;
   >  }
   >
   > +COBALT_SYSCALL32emu(clock_nanosleep64, nonrestartable,
   > +    (clockid_t clock_id, int flags,
   > +     const struct __kernel_timespec __user *u_rqt,
   > +     struct __kernel_timespec __user *u_rmt))
   > +{
   > + struct timespec64 rqt, rmt, *rmtp = NULL;
   > + int ret;
   > +
   > + if (u_rmt)
   > + rmtp = &rmt;
   > +
   > + ret = cobalt_get_timespec64(&rqt, u_rqt);
   > + if (ret)
   > + return ret;
   > +
   > + ret = __cobalt_clock_nanosleep(clock_id, flags, &rqt, rmtp);
   > + if (ret == -EINTR && flags == 0 && rmtp)
   > + ret = cobalt_put_timespec64(rmtp, u_rmt);
   > +
   > + return ret;
   > +}
   > +
   > +
   >  COBALT_SYSCALL32emu(mutex_timedlock, primary,
   >      (struct cobalt_mutex_shadow __user *u_mx,
   >       const struct old_timespec32 __user *u_ts))
   > diff --git a/kernel/cobalt/posix/syscall32.h
   b/kernel/cobalt/posix/syscall32.h
   > index 9095ebd..6c20da1 100644
   > --- a/kernel/cobalt/posix/syscall32.h
   > +++ b/kernel/cobalt/posix/syscall32.h
   > @@ -80,6 +80,12 @@ COBALT_SYSCALL32emu_DECL(clock_nanosleep,
   >    const struct old_timespec32 __user *u_rqt,
   >    struct old_timespec32 __user *u_rmt));
   > +COBALT_SYSCALL32emu_DECL(clock_nanosleep64,
   > + (clockid_t clock_id, int flags,
   > +  const struct __kernel_timespec __user *u_rqt,
   > +  struct __kernel_timespec __user *u_rmt));
   > +
   > +
   >  COBALT_SYSCALL32emu_DECL(mutex_timedlock,
   >   (struct cobalt_mutex_shadow __user *u_mx,
   >    const struct old_timespec32 __user *u_ts));







   ----

                 reply	other threads:[~2021-04-20  1:10 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=13mfhgf7syn-13mgre8musg@nsmail6.0 \
    --to=chensong@kylinos.cn \
    --cc=xenomai@xenomai.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 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.