On Sun, Nov 25, 2018 at 5:52 AM Deepa Dinamani <deepa.ker...@gmail.com> wrote: > On Sat, Nov 24, 2018 at 11:38 AM Willem de Bruijn > <willemdebruijn.ker...@gmail.com> wrote: > > On Sat, Nov 24, 2018 at 4:00 AM Deepa Dinamani <deepa.ker...@gmail.com> > > wrote: > > > > > > The new type is meant to be used as a y2038 safe structure > > > to be used as part of cmsg data. > > > Presently the SO_TIMESTAMP socket option uses struct timeval > > > for timestamps. This is not y2038 safe. > > > Subsequent patches in the series add new y2038 safe socket > > > option to be used in the place of SO_TIMESTAMP_OLD. > > > struct sock_timeval will be used as the timestamp format > > > at that time. > > > > > > struct sock_timeval also maintains the same layout across > > > 32 bit and 64 bit ABIs. > > > > > > Signed-off-by: Deepa Dinamani <deepa.ker...@gmail.com> > > > --- > > > include/uapi/linux/time.h | 5 +++++ > > > 1 file changed, 5 insertions(+) > > > > > > diff --git a/include/uapi/linux/time.h b/include/uapi/linux/time.h > > > index 04d5587f30d3..106f9398c285 100644 > > > --- a/include/uapi/linux/time.h > > > +++ b/include/uapi/linux/time.h > > > @@ -70,6 +70,11 @@ struct __kernel_old_timeval { > > > }; > > > #endif > > > > > > +struct sock_timeval { > > > + long long tv_sec; > > > + long long tv_usec; > > > > should these use fixed-width type __u64? > > We have avoided using __u64/__s64 types for time types in uapi. > I think we did this for portability reasons. > Although this new type might not be required to be interpreted in > libc, I would prefer for this to be long long. > If there is a strong preference then I can change it.
I think we want signed types to keep it closer to what we have today with 'timeval'. as long as linux/types.h is included first (it is). Between __s64 or long long, I don't think it makes a difference, so let's just go with Willem's suggestion. We already rely on 'long long' being exactly 64 bit wide in 'struct __kernel_timespec' as well. We could however debate whether 'sock_timeval' should be visible to user space in linux/tme.h like this, or if it should be put in a namespace like '__kernel_sock_timeval' to ensure it won't conflict with user space headers defining a type of the same name. Arnd