All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil@xs4all.nl>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-samsung-soc@vger.kernel.org,
	Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
	y2038@lists.linaro.org, linux-api@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [PATCH 6/7] [RFC] [media]: v4l2: introduce v4l2_timeval
Date: Wed, 16 Sep 2015 10:12:00 +0200	[thread overview]
Message-ID: <55F92450.8010802@xs4all.nl> (raw)
In-Reply-To: <7758607.pJFdek7ljg@wuerfel>

On 09/16/2015 09:56 AM, Arnd Bergmann wrote:
> On Wednesday 16 September 2015 08:51:14 Hans Verkuil wrote:
> 
>>> a) Similar to my first attempt, define a new struct v4l2_timeval, but
>>>    only use it when building with a y2038-aware libc, so we don't break
>>>    existing environments:
>>>
>>> 	/* some compile-time conditional that we first need to agree on with libc */
>>> 	#if __BITS_PER_TIME_T > __BITS_PER_LONG
>>> 	struct v4l2_timeval { long tv_sec; long tv_usec; }
>>> 	#else
>>> 	#define v4l2_timeval timeval
>>> 	#endif
>>>
>>>    This means that any user space that currently assumes the timestamp
>>>    member to be a 'struct timeval' has to be changed to access the members
>>>    individually, or get a build error.
>>>    The __BITS_PER_TIME_T trick has to be used in a couple of other subsystems
>>>    too, as some of them have no other way to identify an interface
>>
>> I don't like this as this means some applications will compile on 64 bit or
>> with a non-y2038-aware libc, but fail on a 32-bit with y2038-aware libc. This
>> will be confusing and it may take a long time before the application developer
>> discovers this.
> 
> Right.
> 
>>> b) Keep the header file unchanged, but deal with both formats of v4l2_buffer
>>>    in the kernel. Fortunately, all ioctls that pass a v4l2_buffer have
>>>    properly defined command codes, and it does not get passed using a
>>>    read/write style interface. This means we move the v4l2_buffer32
>>>    handling from v4l2-compat-ioctl32.c to v4l2-ioctl.c and add an in-kernel
>>>    v4l2_buffer64 that matches the 64-bit variant of v4l2_buffer.
>>>    This way, user space can use either definition of time_t, and the
>>>    kernel will just handle them natively.
>>>    This is going to be the most common way to handle y2038 compatibility
>>>    in device drivers, and it has the additional advantage of simplifying
>>>    the compat path.
>>
>> This would work.
> 
> Ok. So the only downside I can think of for this is that it uses a slightly
> less efficient format with additional padding in it. The kernel side will
> be a little ugly as I'm trying to avoid defining a generic timeval64
> structure (the generic syscalls should not need one), but I'll try to
> implement it first to see how it ends up.
> 
>>> c) As you describe above, introduce a new v4l2_buffer replacement with
>>>    a different layout that does not reference timeval. For this case, I
>>>    would recommend using a single 64-bit nanosecond timestamp that can
>>>    be generated using ktime_get_ns().
>>>    However, to avoid ambiguity with the user space definition of struct
>>>    timeval, we still have to hide the existing 'struct v4l2_buffer' from
>>>    y2038-aware user space by enclosing it in '#if __BITS_PER_TIME_T > 
>>>    __BITS_PER_LONG' or similar.
>>
>> Right, and if we do that we still have the problem I describe under a). So we
>> would need to implement b) regardless.
>>
>> In other words, choosing c) doesn't depend on y2038 and it should be decided
>> on its own merits.
>>
>> I've proposed this as a topic to the media workshop we'll have during the Linux
>> Kernel Summit.
> 
> Thanks, good idea. I'll be at the kernel summit, but don't plan to attend
> the media workshop otherwise. If you let me know about the schedule, I can
> come to this session (or ping me on IRC or hangout when it starts).

Are you also attending the ELCE in Dublin? We could have a quick talk there.
I think the discussion whether to switch to a new v4l2_buffer struct isn't really
dependent on anything y2038.

Regards,

	Hans
_______________________________________________
Y2038 mailing list
Y2038@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/y2038

WARNING: multiple messages have this Message-ID (diff)
From: Hans Verkuil <hverkuil@xs4all.nl>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	y2038@lists.linaro.org,
	Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
	linux-api@vger.kernel.org, linux-samsung-soc@vger.kernel.org
Subject: Re: [PATCH 6/7] [RFC] [media]: v4l2: introduce v4l2_timeval
Date: Wed, 16 Sep 2015 10:12:00 +0200	[thread overview]
Message-ID: <55F92450.8010802@xs4all.nl> (raw)
In-Reply-To: <7758607.pJFdek7ljg@wuerfel>

On 09/16/2015 09:56 AM, Arnd Bergmann wrote:
> On Wednesday 16 September 2015 08:51:14 Hans Verkuil wrote:
> 
>>> a) Similar to my first attempt, define a new struct v4l2_timeval, but
>>>    only use it when building with a y2038-aware libc, so we don't break
>>>    existing environments:
>>>
>>> 	/* some compile-time conditional that we first need to agree on with libc */
>>> 	#if __BITS_PER_TIME_T > __BITS_PER_LONG
>>> 	struct v4l2_timeval { long tv_sec; long tv_usec; }
>>> 	#else
>>> 	#define v4l2_timeval timeval
>>> 	#endif
>>>
>>>    This means that any user space that currently assumes the timestamp
>>>    member to be a 'struct timeval' has to be changed to access the members
>>>    individually, or get a build error.
>>>    The __BITS_PER_TIME_T trick has to be used in a couple of other subsystems
>>>    too, as some of them have no other way to identify an interface
>>
>> I don't like this as this means some applications will compile on 64 bit or
>> with a non-y2038-aware libc, but fail on a 32-bit with y2038-aware libc. This
>> will be confusing and it may take a long time before the application developer
>> discovers this.
> 
> Right.
> 
>>> b) Keep the header file unchanged, but deal with both formats of v4l2_buffer
>>>    in the kernel. Fortunately, all ioctls that pass a v4l2_buffer have
>>>    properly defined command codes, and it does not get passed using a
>>>    read/write style interface. This means we move the v4l2_buffer32
>>>    handling from v4l2-compat-ioctl32.c to v4l2-ioctl.c and add an in-kernel
>>>    v4l2_buffer64 that matches the 64-bit variant of v4l2_buffer.
>>>    This way, user space can use either definition of time_t, and the
>>>    kernel will just handle them natively.
>>>    This is going to be the most common way to handle y2038 compatibility
>>>    in device drivers, and it has the additional advantage of simplifying
>>>    the compat path.
>>
>> This would work.
> 
> Ok. So the only downside I can think of for this is that it uses a slightly
> less efficient format with additional padding in it. The kernel side will
> be a little ugly as I'm trying to avoid defining a generic timeval64
> structure (the generic syscalls should not need one), but I'll try to
> implement it first to see how it ends up.
> 
>>> c) As you describe above, introduce a new v4l2_buffer replacement with
>>>    a different layout that does not reference timeval. For this case, I
>>>    would recommend using a single 64-bit nanosecond timestamp that can
>>>    be generated using ktime_get_ns().
>>>    However, to avoid ambiguity with the user space definition of struct
>>>    timeval, we still have to hide the existing 'struct v4l2_buffer' from
>>>    y2038-aware user space by enclosing it in '#if __BITS_PER_TIME_T > 
>>>    __BITS_PER_LONG' or similar.
>>
>> Right, and if we do that we still have the problem I describe under a). So we
>> would need to implement b) regardless.
>>
>> In other words, choosing c) doesn't depend on y2038 and it should be decided
>> on its own merits.
>>
>> I've proposed this as a topic to the media workshop we'll have during the Linux
>> Kernel Summit.
> 
> Thanks, good idea. I'll be at the kernel summit, but don't plan to attend
> the media workshop otherwise. If you let me know about the schedule, I can
> come to this session (or ping me on IRC or hangout when it starts).

Are you also attending the ELCE in Dublin? We could have a quick talk there.
I think the discussion whether to switch to a new v4l2_buffer struct isn't really
dependent on anything y2038.

Regards,

	Hans

  reply	other threads:[~2015-09-16  8:12 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15 15:49 [PATCH 0/7] [media] y2038 conversion for subsystem Arnd Bergmann
2015-09-15 15:49 ` Arnd Bergmann
2015-09-15 15:49 ` [PATCH 1/7] [media] dvb: use ktime_t for internal timeout Arnd Bergmann
2015-09-15 15:49   ` Arnd Bergmann
2015-09-15 17:55   ` Andreas Oberritter
2015-09-15 17:55     ` Andreas Oberritter
     [not found]     ` <55F85B97.8000700-p6skyjIMMCQb1SvskN2V4Q@public.gmane.org>
2015-09-15 20:30       ` [Y2038] " Arnd Bergmann
2015-09-15 20:30         ` Arnd Bergmann
2015-09-15 15:49 ` [PATCH 2/7] [media] dvb: remove unused systime() function Arnd Bergmann
2015-09-15 15:49   ` Arnd Bergmann
2015-09-15 15:49 ` [PATCH 3/7] [media] dvb: don't use 'time_t' in event ioctl Arnd Bergmann
2015-09-15 15:49   ` Arnd Bergmann
2017-08-28 15:32   ` [3/7,media] " Eugene Syromiatnikov
2017-08-30 20:25     ` Arnd Bergmann
2017-08-31 13:10       ` Eugene Syromiatnikov
2015-09-15 15:49 ` [PATCH 4/7] [media] exynos4-is: use monotonic timestamps as advertized Arnd Bergmann
     [not found]   ` <1442332148-488079-5-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2015-09-16  8:55     ` Sylwester Nawrocki
2015-09-16  8:55       ` Sylwester Nawrocki
2015-09-15 15:49 ` [PATCH 5/7] [media] use v4l2_get_timestamp where possible Arnd Bergmann
2015-09-15 15:49   ` Arnd Bergmann
     [not found]   ` <1442332148-488079-6-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2015-09-16  8:57     ` Sylwester Nawrocki
2015-09-16  8:57       ` Sylwester Nawrocki
2015-09-15 15:49 ` [PATCH 6/7] [RFC] [media]: v4l2: introduce v4l2_timeval Arnd Bergmann
2015-09-15 15:49   ` Arnd Bergmann
     [not found]   ` <1442332148-488079-7-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2015-09-15 16:27     ` Hans Verkuil
2015-09-15 16:27       ` Hans Verkuil
2015-09-15 20:26       ` Arnd Bergmann
2015-09-15 20:26         ` Arnd Bergmann
2015-09-16  6:51         ` Hans Verkuil
     [not found]           ` <55F91162.8030002-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2015-09-16  7:56             ` Arnd Bergmann
2015-09-16  7:56               ` Arnd Bergmann
2015-09-16  8:12               ` Hans Verkuil [this message]
2015-09-16  8:12                 ` Hans Verkuil
     [not found]                 ` <55F92450.8010802-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2015-09-16  8:40                   ` Arnd Bergmann
2015-09-16  8:40                     ` Arnd Bergmann
2015-09-15 15:49 ` [PATCH 7/7] [RFC] [media] introduce v4l2_timespec type for timestamps Arnd Bergmann
2015-09-15 15:49   ` Arnd Bergmann
2015-09-15 16:32   ` Hans Verkuil
2015-09-15 20:27     ` Arnd Bergmann
2015-09-15 20:27       ` [Y2038] " Arnd Bergmann

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=55F92450.8010802@xs4all.nl \
    --to=hverkuil@xs4all.nl \
    --cc=arnd@arndb.de \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=mchehab@osg.samsung.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 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.