All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vinod Koul <vkoul@kernel.org>
To: Joris Verhaegen <verhaegen@google.com>
Cc: Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	Cezary Rojewski <cezary.rojewski@intel.com>,
	Peter Ujfalusi <peter.ujfalusi@linux.intel.com>,
	Bard Liao <yung-chuan.liao@linux.intel.com>,
	Ranjani Sridharan <ranjani.sridharan@linux.intel.com>,
	Kai Vehmanen <kai.vehmanen@linux.intel.com>,
	Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>,
	Srinivas Kandagatla <srini@kernel.org>,
	Daniel Baluta <daniel.baluta@nxp.com>,
	Orson Zhai <orsonzhai@gmail.com>,
	Baolin Wang <baolin.wang@linux.alibaba.com>,
	Chunyan Zhang <zhang.lyra@gmail.com>,
	Kunihiko Hayashi <hayashi.kunihiko@socionext.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	kernel-team@android.com, linux-sound@vger.kernel.org,
	linux-kernel@vger.kernel.org, patches@opensource.cirrus.com,
	linux-arm-msm@vger.kernel.org,
	sound-open-firmware@alsa-project.org,
	linux-arm-kernel@lists.infradead.org,
	Miller Liang <millerliang@google.com>
Subject: Re: [PATCH v4 3/3] ALSA: compress_offload: Add SNDRV_COMPRESS_AVAIL64 ioctl
Date: Tue, 5 Aug 2025 10:20:10 +0530	[thread overview]
Message-ID: <aJGNgphPCTuE7FFD@vaman> (raw)
In-Reply-To: <20250801092720.1845282-4-verhaegen@google.com>

On 01-08-25, 10:27, Joris Verhaegen wrote:
> The previous patch introduced a 64-bit timestamp ioctl
> (SNDRV_COMPRESS_TSTAMP64). To provide a consistent API, this patch
> adds a corresponding 64-bit version of the SNDRV_COMPRESS_AVAIL ioctl.
> 
> A new struct snd_compr_avail64 is added to the UAPI, which includes
> the 64-bit timestamp. The existing ioctl implementation is refactored
> to handle both the 32-bit and 64-bit variants.
> 
> Reviewed-by: Miller Liang <millerliang@google.com>
> Tested-by: Joris Verhaegen <verhaegen@google.com>
> Signed-off-by: Joris Verhaegen <verhaegen@google.com>
> ---
>  include/uapi/sound/compress_offload.h | 11 +++++++
>  sound/core/compress_offload.c         | 45 +++++++++++++++++----------
>  2 files changed, 40 insertions(+), 16 deletions(-)
> 
> diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h
> index 70b8921601f9..26f756cc2e62 100644
> --- a/include/uapi/sound/compress_offload.h
> +++ b/include/uapi/sound/compress_offload.h
> @@ -84,6 +84,16 @@ struct snd_compr_avail {
>  	struct snd_compr_tstamp tstamp;
>  } __attribute__((packed, aligned(4)));
>  
> +/**
> + * struct snd_compr_avail64 - avail descriptor with tstamp in 64 bit format
> + * @avail: Number of bytes available in ring buffer for writing/reading
> + * @tstamp: timestamp information
> + */
> +struct snd_compr_avail64 {
> +	__u64 avail;
> +	struct snd_compr_tstamp64 tstamp;
> +} __attribute__((packed, aligned(4)));
> +
>  enum snd_compr_direction {
>  	SND_COMPRESS_PLAYBACK = 0,
>  	SND_COMPRESS_CAPTURE,
> @@ -231,6 +241,7 @@ struct snd_compr_task_status {
>  #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_AVAIL64		_IOR('C', 0x23, struct snd_compr_avail64)
>  #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 445220fdb6a0..4d3cf49c0c47 100644
> --- a/sound/core/compress_offload.c
> +++ b/sound/core/compress_offload.c
> @@ -203,13 +203,10 @@ static int snd_compr_update_tstamp(struct snd_compr_stream *stream,
>  }
>  
>  static size_t snd_compr_calc_avail(struct snd_compr_stream *stream,
> -		struct snd_compr_avail *avail)
> +				   struct snd_compr_avail64 *avail)
>  {
> -	struct snd_compr_tstamp64 tstamp64 = { 0 };
> -
>  	memset(avail, 0, sizeof(*avail));
> -	snd_compr_update_tstamp(stream, &tstamp64);
> -	snd_compr_tstamp32_from_64(&avail->tstamp, &tstamp64);
> +	snd_compr_update_tstamp(stream, &avail->tstamp);
>  	/* Still need to return avail even if tstamp can't be filled in */
>  
>  	if (stream->runtime->total_bytes_available == 0 &&
> @@ -233,32 +230,47 @@ static size_t snd_compr_calc_avail(struct snd_compr_stream *stream,
>  	}
>  
>  	avail->avail = stream->runtime->total_bytes_available -
> -			stream->runtime->total_bytes_transferred;
> +		       stream->runtime->total_bytes_transferred;

Lets not do formatting changes in current patch please

>  	if (stream->direction == SND_COMPRESS_PLAYBACK)
>  		avail->avail = stream->runtime->buffer_size - avail->avail;
>  
> -	pr_debug("ret avail as %llu\n", avail->avail);
> +	pr_debug("ret avail as %zu\n", (size_t)avail->avail);
>  	return avail->avail;
>  }
>  
>  static inline size_t snd_compr_get_avail(struct snd_compr_stream *stream)
>  {
> -	struct snd_compr_avail avail;
> +	struct snd_compr_avail64 avail;
>  
>  	return snd_compr_calc_avail(stream, &avail);
>  }
>  
> -static int
> -snd_compr_ioctl_avail(struct snd_compr_stream *stream, unsigned long arg)
> +static void snd_compr_avail32_from_64(struct snd_compr_avail *avail32,
> +				      const struct snd_compr_avail64 *avail64)
>  {
> -	struct snd_compr_avail ioctl_avail;
> +	avail32->avail = avail64->avail;
> +	snd_compr_tstamp32_from_64(&avail32->tstamp, &avail64->tstamp);
> +}
> +
> +static int snd_compr_ioctl_avail(struct snd_compr_stream *stream,
> +				 unsigned long arg, bool is_32bit)
> +{
> +	struct snd_compr_avail64 ioctl_avail64;
> +	struct snd_compr_avail ioctl_avail32;
>  	size_t avail;
> +	const void *copy_from = &ioctl_avail64;
> +	size_t copy_size = sizeof(ioctl_avail64);
>  
>  	if (stream->direction == SND_COMPRESS_ACCEL)
>  		return -EBADFD;
>  
> -	avail = snd_compr_calc_avail(stream, &ioctl_avail);
> -	ioctl_avail.avail = avail;
> +	avail = snd_compr_calc_avail(stream, &ioctl_avail64);
> +	ioctl_avail64.avail = avail;
> +	if (is_32bit) {
> +		snd_compr_avail32_from_64(&ioctl_avail32, &ioctl_avail64);
> +		copy_from = &ioctl_avail32;
> +		copy_size = sizeof(ioctl_avail32);
> +	}

Same comment as previous patch

>  
>  	switch (stream->runtime->state) {
>  	case SNDRV_PCM_STATE_OPEN:
> @@ -269,8 +281,7 @@ snd_compr_ioctl_avail(struct snd_compr_stream *stream, unsigned long arg)
>  		break;
>  	}
>  
> -	if (copy_to_user((__u64 __user *)arg,
> -				&ioctl_avail, sizeof(ioctl_avail)))
> +	if (copy_to_user((__u64 __user *)arg, copy_from, copy_size))
>  		return -EFAULT;
>  	return 0;
>  }
> @@ -1336,7 +1347,9 @@ static long snd_compr_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
>  	case SNDRV_COMPRESS_TSTAMP64:
>  		return snd_compr_tstamp(stream, arg, false);
>  	case SNDRV_COMPRESS_AVAIL:
> -		return snd_compr_ioctl_avail(stream, arg);
> +		return snd_compr_ioctl_avail(stream, arg, true);
> +	case SNDRV_COMPRESS_AVAIL64:
> +		return snd_compr_ioctl_avail(stream, arg, false);
>  	case SNDRV_COMPRESS_PAUSE:
>  		return snd_compr_pause(stream);
>  	case SNDRV_COMPRESS_RESUME:
> -- 
> 2.50.1.565.gc32cd1483b-goog

-- 
~Vinod


  reply	other threads:[~2025-08-05  4:55 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-01  9:27 [PATCH v4 0/3] ALSA: compress_offload: Add 64-bit safe timestamp API Joris Verhaegen
2025-08-01  9:27 ` [PATCH v4 1/3] ALSA: compress_offload: Add 64-bit safe timestamp infrastructure Joris Verhaegen
2025-08-01 12:05   ` Mark Brown
2025-08-01  9:27 ` [PATCH v4 2/3] ALSA: compress_offload: Add SNDRV_COMPRESS_TSTAMP64 ioctl Joris Verhaegen
2025-08-05  4:47   ` Vinod Koul
2025-08-05  5:59     ` Takashi Iwai
2025-08-18 14:05       ` Charles Keepax
2025-08-19  5:08         ` Vinod Koul
2025-08-21  7:18           ` Takashi Iwai
2025-09-05  9:17             ` George Verhaegen
2025-08-06 11:34     ` George Verhaegen
2025-08-01  9:27 ` [PATCH v4 3/3] ALSA: compress_offload: Add SNDRV_COMPRESS_AVAIL64 ioctl Joris Verhaegen
2025-08-05  4:50   ` Vinod Koul [this message]
2025-08-21  8:53     ` George Verhaegen
2025-08-01  9:59 ` [PATCH v4 0/3] ALSA: compress_offload: Add 64-bit safe timestamp API Charles Keepax

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=aJGNgphPCTuE7FFD@vaman \
    --to=vkoul@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=broonie@kernel.org \
    --cc=cezary.rojewski@intel.com \
    --cc=daniel.baluta@nxp.com \
    --cc=hayashi.kunihiko@socionext.com \
    --cc=kai.vehmanen@linux.intel.com \
    --cc=kernel-team@android.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=millerliang@google.com \
    --cc=orsonzhai@gmail.com \
    --cc=patches@opensource.cirrus.com \
    --cc=perex@perex.cz \
    --cc=peter.ujfalusi@linux.intel.com \
    --cc=pierre-louis.bossart@linux.dev \
    --cc=ranjani.sridharan@linux.intel.com \
    --cc=sound-open-firmware@alsa-project.org \
    --cc=srini@kernel.org \
    --cc=tiwai@suse.com \
    --cc=verhaegen@google.com \
    --cc=yung-chuan.liao@linux.intel.com \
    --cc=zhang.lyra@gmail.com \
    /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.