linux-parisc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Deepa Dinamani <deepa.kernel@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
	David Miller <davem@davemloft.net>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Networking <netdev@vger.kernel.org>,
	y2038 Mailman List <y2038@lists.linaro.org>,
	"James E.J. Bottomley" <jejb@parisc-linux.org>,
	Ralf Baechle <ralf@linux-mips.org>,
	Richard Henderson <rth@twiddle.net>,
	linux-alpha@vger.kernel.org,
	"open list:RALINK MIPS ARCHITECTURE" <linux-mips@linux-mips.org>,
	Parisc List <linux-parisc@vger.kernel.org>,
	linux-rdma <linux-rdma@vger.kernel.org>,
	sparclinux <sparclinux@vger.kernel.org>
Subject: Re: [PATCH v2 6/8] socket: Add SO_TIMESTAMP[NS]_NEW
Date: Tue, 18 Dec 2018 13:27:48 -0800	[thread overview]
Message-ID: <CABeXuvru4uY01DJW-rOCsG3hs6hLmDRuUCGSSPHrNDcAEm7y5Q@mail.gmail.com> (raw)
In-Reply-To: <CAK8P3a0PFQCqo2Ofce7uJeWAgssMbh8u1CNWeAmUk9LzQRn35g@mail.gmail.com>

On Tue, Dec 18, 2018 at 8:33 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> On Sat, Dec 15, 2018 at 7:52 PM Willem de Bruijn
> <willemdebruijn.kernel@gmail.com> wrote:
> >
> > > 3 reasons for not doing this:
> > >
> > > 1. We do not want to break userspace. If we move this to
> > > linux/socket.h all the userspace programs now have to include
> > > linux/socket.h or get this definition through a new libc.
> > > 2. All the socket options are together in the file asm/socket.h. It
> > > doesn't seem good for maintainability to move just a few bits
> > > elsewhere.
> > > 3. There are only 4 arches (after the series is applied) that have
> > > their own asm/socket.h. And, this is because there seems to be
> > > significant differences to asm-generic/socket.h that don't seem
> > > logically obvious to group and eliminate some of the defines.
> >
> > Agreed. All good reasons to leave as is.
> >
> > > Also for the other comment. The reason the conditionals were not
> > > consistent is because they were not consistent to begin with.
> >
> > The only difference I see is an inversion of the test. Nesting order
> > is the same:
> >
> >         int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP);
> >         ...
> >         if (need_software_tstamp) {
> >                 if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) {
> >                 } else {
> >                 }
> >         }
> >
> > vs
> >
> >                 if (sock_flag(sk, SOCK_RCVTSTAMP)) {
> >                         if (sock_flag(sk, SOCK_RCVTSTAMPNS)) {
> >                         } else {
> >                         }
> >                 }
> >
> > I suggest just adding something like
> >
> >         if (need_software_tstamp) {
> > +              if (sock_uses_new_tstamp(sk) {
> > +                   __sock_recv_timestamp_new(msg, sk,
> > ktime_to_timespec64(skb->tstamp));
> > +              } else if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) {
> > -               if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) {
> >                 } else {
> >                 }
> >
> > and
> >
> >                 if (sock_flag(sk, SOCK_RCVTSTAMP)) {
> > +                      if (sock_uses_new_tstamp(sk) {
> > +                           __sock_recv_timestamp_new(msg, sk, ts);
> > +                      else if (sock_flag(sk, SOCK_RCVTSTAMPNS)) {
> > -                       if (sock_flag(sk, SOCK_RCVTSTAMPNS)) {
> >                         } else {
> >                         }
>
> Generally speaking, I think we want the new time handling
> to be written as the default case rather than have it hidden away
> in a separate function. If we didn't have the sparc64 quirk with its
> unusual timeval definition, we'd only need a special flag for the
> old 32-bit format, but that doesn't work as long we have to support
> two different 64-bit formats for 64-bit timeval on sparc64
> (32 or 64 bit microseconds).
>
> > Note also (2) tentative helper function sock_uses_new_tstamp(const
> > struct sock *sk) instead of testing sock_flag(sk, SOCK_TSTAMP_NEW)
> > directly. Since the .._NEW variants are equivalent to .._OLD on 64-bit,
> > I wonder if we can just compile out the branch. Something like
> >
> >     static inline bool sock_uses_new_tstamp(const struct sock *sk) {
> >             return (sizeof(time_t) != sizeof(__kernel_long_t)) &&
> >                        sock_flag(sk, SOCK_TSTAMP_NEW);
> >     }
>
> I think that would break compat handling: when we have a 32-bit
> user space process, the difference between old and new timestamps
> is meaningful even on 64-bit kernels, but the distinction is only made all
> the way down in put_cmsg_compat().

As I mentioned previously, I have refrained from adding these
optimizations for now.
The old timestamps are as is and the new timestamps are not yet being
used anywhere as we have not switched any of the architectures to use
y2038 syscalls and data structures yet.
So even if these optimizations are needed these can be added as
separate patches.
Let me know if this is acceptable for everyone and I can post the update.

-Deepa

  reply	other threads:[~2018-12-18 21:28 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-11 20:25 [PATCH v2 0/8] net: y2038-safe socket timestamps Deepa Dinamani
2018-12-11 20:25 ` [PATCH v2 2/8] sockopt: Rename SO_TIMESTAMP* to SO_TIMESTAMP*_OLD Deepa Dinamani
2018-12-11 20:25 ` [PATCH v2 6/8] socket: Add SO_TIMESTAMP[NS]_NEW Deepa Dinamani
2018-12-12 15:22   ` Willem de Bruijn
2018-12-12 15:35     ` Willem de Bruijn
2018-12-15  1:07     ` Deepa Dinamani
2018-12-15 15:11       ` Willem de Bruijn
2018-12-15 16:50         ` Deepa Dinamani
2018-12-15 18:51           ` Willem de Bruijn
2018-12-15 20:56             ` Deepa Dinamani
2018-12-18 16:33             ` Arnd Bergmann
2018-12-18 21:27               ` Deepa Dinamani [this message]
2018-12-14 23:24 ` [PATCH v2 0/8] net: y2038-safe socket timestamps David Miller

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=CABeXuvru4uY01DJW-rOCsG3hs6hLmDRuUCGSSPHrNDcAEm7y5Q@mail.gmail.com \
    --to=deepa.kernel@gmail.com \
    --cc=arnd@arndb.de \
    --cc=davem@davemloft.net \
    --cc=jejb@parisc-linux.org \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=ralf@linux-mips.org \
    --cc=rth@twiddle.net \
    --cc=sparclinux@vger.kernel.org \
    --cc=willemdebruijn.kernel@gmail.com \
    --cc=y2038@lists.linaro.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;
as well as URLs for NNTP newsgroup(s).