On Tue, 05 Aug 2025 06:47:59 +0200, Vinod Koul wrote: > > On 01-08-25, 10:27, Joris Verhaegen wrote: > > The previous patch introduced the internal infrastructure for handling > > 64-bit timestamps. This patch exposes this capability to user-space. > > > > Define the new ioctl command SNDRV_COMPRESS_TSTAMP64, which allows > > applications to fetch the overflow-safe struct snd_compr_tstamp64. > > > > The ioctl dispatch table is updated to handle the new command by > > calling a new snd_compr_tstamp64 handler, while the legacy path is > > renamed to snd_compr_tstamp32 for clarity. > > > > This patch bumps the SNDRV_COMPRESS_VERSION to 0.4.0. > > > > Reviewed-by: Miller Liang <millerliang@xxxxxxxxxx> > > Tested-by: Joris Verhaegen <verhaegen@xxxxxxxxxx> > > Signed-off-by: Joris Verhaegen <verhaegen@xxxxxxxxxx> > > --- > > include/uapi/sound/compress_offload.h | 5 +++-- > > sound/core/compress_offload.c | 19 +++++++++++++------ > > 2 files changed, 16 insertions(+), 8 deletions(-) > > > > diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h > > index abd0ea3f86ee..70b8921601f9 100644 > > --- a/include/uapi/sound/compress_offload.h > > +++ b/include/uapi/sound/compress_offload.h > > @@ -13,8 +13,7 @@ > > #include <sound/asound.h> > > #include <sound/compress_params.h> > > > > - > > -#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 3, 0) > > +#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 4, 0) > > /** > > * struct snd_compressed_buffer - compressed buffer > > * @fragment_size: size of buffer fragment in bytes > > @@ -208,6 +207,7 @@ struct snd_compr_task_status { > > * Note: only codec params can be changed runtime and stream params cant be > > * SNDRV_COMPRESS_GET_PARAMS: Query codec params > > * SNDRV_COMPRESS_TSTAMP: get the current timestamp value > > + * SNDRV_COMPRESS_TSTAMP64: get the current timestamp value in 64 bit format > > * SNDRV_COMPRESS_AVAIL: get the current buffer avail value. > > * This also queries the tstamp properties > > * SNDRV_COMPRESS_PAUSE: Pause the running stream > > @@ -230,6 +230,7 @@ struct snd_compr_task_status { > > struct snd_compr_metadata) > > #define SNDRV_COMPRESS_TSTAMP _IOR('C', 0x20, struct snd_compr_tstamp) > > #define SNDRV_COMPRESS_AVAIL _IOR('C', 0x21, struct snd_compr_avail) > > +#define SNDRV_COMPRESS_TSTAMP64 _IOR('C', 0x22, struct snd_compr_tstamp64) > > #define SNDRV_COMPRESS_PAUSE _IO('C', 0x30) > > #define SNDRV_COMPRESS_RESUME _IO('C', 0x31) > > #define SNDRV_COMPRESS_START _IO('C', 0x32) > > diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c > > index d3164aa07158..445220fdb6a0 100644 > > --- a/sound/core/compress_offload.c > > +++ b/sound/core/compress_offload.c > > @@ -736,18 +736,23 @@ snd_compr_set_metadata(struct snd_compr_stream *stream, unsigned long arg) > > return retval; > > } > > > > -static inline int > > -snd_compr_tstamp(struct snd_compr_stream *stream, unsigned long arg) > > +static inline int snd_compr_tstamp(struct snd_compr_stream *stream, > > + unsigned long arg, bool is_32bit) > > { > > struct snd_compr_tstamp64 tstamp64 = { 0 }; > > struct snd_compr_tstamp tstamp32 = { 0 }; > > + const void *copy_from = &tstamp64; > > + size_t copy_size = sizeof(tstamp64); > > int ret; > > > > ret = snd_compr_update_tstamp(stream, &tstamp64); > > if (ret == 0) { > > - snd_compr_tstamp32_from_64(&tstamp32, &tstamp64); > > - ret = copy_to_user((struct snd_compr_tstamp __user *)arg, > > - &tstamp32, sizeof(tstamp32)) ? > > + if (is_32bit) { > > + snd_compr_tstamp32_from_64(&tstamp32, &tstamp64); > > + copy_from = &tstamp32; > > + copy_size = sizeof(tstamp32); > > + } > > Most of the applications and people would be 32bit right now and we > expect this to progressively change, but then this imposes a penalty as > default path is 64 bit, since we expect this ioctl to be called very > frequently, should we do this optimization for 64bit here? Through a quick glance over the patch, I don't think you'll hit the significant performance loss. It's merely a few bytes of extra copies before copy_to_user(), after all. But, of course, it'd be more convincing if anyone can test and give the actual numbers. thanks, Takashi