[PATCH 2/2] media: nxp: imx8-isi: Prioritize pending buffers over discard buffers

Guoniu Zhou posted 2 patches 4 weeks ago
There is a newer version of this series
[PATCH 2/2] media: nxp: imx8-isi: Prioritize pending buffers over discard buffers
Posted by Guoniu Zhou 4 weeks ago
From: Guoniu Zhou <guoniu.zhou@nxp.com>

Change the buffer selection logic to use pending buffers first (up to the
number available), and only use discard buffers to fill remaining slots
when insufficient pending buffers are queued. This ensures user buffers
are utilized as soon as possible, improving efficiency and reducing the
number of discarded frames at stream start.

For example:
- 2 pending buffers: both slots use pending buffers
- 1 pending buffer: first slot uses pending, second uses discard
- 0 pending buffers: both slots use discard buffers

Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
---
 drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
index 2405baf21594cd18cf2b349234313c5e103b7802..53f4f74369f7855fe6b6f372294ee569f40a8ae6 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
@@ -786,13 +786,14 @@ static void mxc_isi_video_queue_first_buffers(struct mxc_isi_video *video)
 		: list_is_singular(&video->out_pending) ? 1
 		: 0;
 
+	/* Queue buffers: prioritize pending buffers, then discard buffers */
 	for (i = 0; i < 2; ++i) {
 		enum mxc_isi_buf_id buf_id = i == 0 ? MXC_ISI_BUF1
 					   : MXC_ISI_BUF2;
 		struct mxc_isi_buffer *buf;
 		struct list_head *list;
 
-		list = i < discard ? &video->out_discard : &video->out_pending;
+		list = (i < 2 - discard) ? &video->out_pending : &video->out_discard;
 		buf = list_first_entry(list, struct mxc_isi_buffer, list);
 
 		mxc_isi_channel_set_outbuf(video->pipe, buf->dma_addrs, buf_id);

-- 
2.34.1
Re: [PATCH 2/2] media: nxp: imx8-isi: Prioritize pending buffers over discard buffers
Posted by Frank Li 4 weeks ago
On Wed, Mar 11, 2026 at 04:02:59PM +0800, Guoniu Zhou wrote:
> From: Guoniu Zhou <guoniu.zhou@nxp.com>
>
> Change the buffer selection logic to use pending buffers first (up to the
> number available), and only use discard buffers to fill remaining slots
> when insufficient pending buffers are queued. This ensures user buffers

Nit: Ensure user ...

> are utilized as soon as possible, improving efficiency and reducing the
> number of discarded frames at stream start.
>
> For example:
> - 2 pending buffers: both slots use pending buffers
> - 1 pending buffer: first slot uses pending, second uses discard
> - 0 pending buffers: both slots use discard buffers
>
> Signed-off-by: Guoniu Zhou <guoniu.zhou@nxp.com>
> ---
>  drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
> index 2405baf21594cd18cf2b349234313c5e103b7802..53f4f74369f7855fe6b6f372294ee569f40a8ae6 100644
> --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
> +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c
> @@ -786,13 +786,14 @@ static void mxc_isi_video_queue_first_buffers(struct mxc_isi_video *video)
>  		: list_is_singular(&video->out_pending) ? 1
>  		: 0;
>
> +	/* Queue buffers: prioritize pending buffers, then discard buffers */
>  	for (i = 0; i < 2; ++i) {
>  		enum mxc_isi_buf_id buf_id = i == 0 ? MXC_ISI_BUF1
>  					   : MXC_ISI_BUF2;
>  		struct mxc_isi_buffer *buf;
>  		struct list_head *list;
>
> -		list = i < discard ? &video->out_discard : &video->out_pending;
> +		list = (i < 2 - discard) ? &video->out_pending : &video->out_discard;

Is (2 - discard) the number of pending buffers? put commit's example as
comments here.

Frank

>  		buf = list_first_entry(list, struct mxc_isi_buffer, list);
>
>  		mxc_isi_channel_set_outbuf(video->pipe, buf->dma_addrs, buf_id);
>
> --
> 2.34.1
>