Re: [PATCH] media: nuvoton: npcm-video: Fix sleeping in atomic context

From: Hans Verkuil
Date: Tue Oct 03 2023 - 09:23:18 EST


On 10/3/23 09:55, Marvin Lin wrote:
> Fix sleeping in atomic context warnings reported by the Smatch static
> analysis tool. Use GFP_ATOMIC instead of GFP_KERNEL in atomic context.
>
> Fixes: 70721089985c ("media: nuvoton: Add driver for NPCM video capture and encoding engine")
> Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Signed-off-by: Marvin Lin <milkfafa@xxxxxxxxx>
> ---
> drivers/media/platform/nuvoton/npcm-video.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/nuvoton/npcm-video.c b/drivers/media/platform/nuvoton/npcm-video.c
> index ac8d73b794d3..5d160978f7b3 100644
> --- a/drivers/media/platform/nuvoton/npcm-video.c
> +++ b/drivers/media/platform/nuvoton/npcm-video.c
> @@ -412,7 +412,7 @@ static unsigned int npcm_video_add_rect(struct npcm_video *video,
> struct rect_list *list = NULL;
> struct v4l2_rect *r;
>
> - list = kzalloc(sizeof(*list), GFP_KERNEL);
> + list = kzalloc(sizeof(*list), GFP_ATOMIC);
> if (!list)
> return 0;
>
> @@ -467,7 +467,7 @@ static struct rect_list *npcm_video_new_rect(struct npcm_video *video,
> struct rect_list *list = NULL;
> struct v4l2_rect *r;
>
> - list = kzalloc(sizeof(*list), GFP_KERNEL);
> + list = kzalloc(sizeof(*list), GFP_ATOMIC);
> if (!list)
> return NULL;
>

I'm not really sure this is the right approach.

Looking closer at the code I notice that npcm_video_irq is a threaded
interrupt handler, so wouldn't it be easier to change the video->lock
spinlock to a mutex?

Regards,

Hans