RE: [PATCH] media: platform: rzg2l-cru: rzg2l-video: Move request_irq() to rzg2l_cru_video_register()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

Thanks for the feedback.

As discussed in the thread, it make sense to request the IRQ at probe time
I will send next version based on this.

Cheers,
Biju

> -----Original Message-----
> From: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> Sent: Sunday, April 21, 2024 2:47 PM
> Subject: Re: [PATCH] media: platform: rzg2l-cru: rzg2l-video: Move request_irq() to
> rzg2l_cru_video_register()
> 
> On Thu, Apr 18, 2024 at 11:06:27AM +0200, Geert Uytterhoeven wrote:
> > Hi Biju,
> >
> > On Mon, Feb 19, 2024 at 7:05 PM Biju Das <biju.das.jz@xxxxxxxxxxxxxx> wrote:
> > > Move request_irq() to rzg2l_cru_video_register(), in order to avoid
> > > requesting IRQ during device start which happens frequently.
> > >
> > > Suggested-by: Laurent Pinchart
> > > <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx>
> > > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
> >
> > Thanks for your patch!
> >
> > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> >
> > > @@ -1011,6 +1000,7 @@ void rzg2l_cru_video_unregister(struct
> > > rzg2l_cru_dev *cru)  {
> > >         media_device_unregister(&cru->mdev);
> > >         video_unregister_device(&cru->vdev);
> > > +       free_irq(cru->image_conv_irq, cru);
> > >  }
> > >
> > >  int rzg2l_cru_video_register(struct rzg2l_cru_dev *cru) @@ -1018,6
> > > +1008,13 @@ int rzg2l_cru_video_register(struct rzg2l_cru_dev *cru)
> > >         struct video_device *vdev = &cru->vdev;
> > >         int ret;
> > >
> > > +       ret = request_irq(cru->image_conv_irq, rzg2l_cru_irq,
> > > +                         IRQF_SHARED, KBUILD_MODNAME, cru);
> > > +       if (ret) {
> > > +               dev_err(cru->dev, "failed to request irq\n");
> > > +               return ret;
> > > +       }
> > > +
> > >         if (video_is_registered(&cru->vdev)) {
> >
> > How can this happen? Perhaps rzg2l_cru_video_register() can be called
> > multiple times through the rzg2l_cru_group_notify_complete() notifier?
> 
> The notifier completion handler shouldn't be called multiple times, no.
> There's however a possibility (I think) that a subdev could disappear of the device is unbound from
> its driver. If the device is later rebound, the notifier completion handler could be called again.
> 
> The issue is that rzg2l_cru_video_unregister() is called from .remove().
> I think a better fix would be to request the IRQ at probe time (or did we discuss that previously
> and concluded it could cause issues ?). I would also argue that the video devices should be
> registered at probe time, not in the notifier completion handler.
> 
> > If that is true, the request_irq() should be moved after this block,
> > just before the call to video_register_device() below.
> >
> > >                 struct media_entity *entity;
> > >
> > > @@ -1032,14 +1029,18 @@ int rzg2l_cru_video_register(struct rzg2l_cru_dev *cru)
> > >         ret = video_register_device(vdev, VFL_TYPE_VIDEO, -1);
> > >         if (ret) {
> > >                 dev_err(cru->dev, "Failed to register video device\n");
> > > -               return ret;
> > > +               goto err_request_irq;
> > >         }
> > >
> > >         ret = media_device_register(&cru->mdev);
> > > -       if (ret) {
> > > -               video_unregister_device(&cru->vdev);
> > > -               return ret;
> > > -       }
> > > +       if (ret)
> > > +               goto err_video_unregister;
> > >
> > >         return 0;
> > > +
> > > +err_video_unregister:
> > > +       video_unregister_device(&cru->vdev);
> > > +err_request_irq:
> > > +       free_irq(cru->image_conv_irq, cru);
> > > +       return ret;
> > >  }
> 
> --
> Regards,
> 
> Laurent Pinchart




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux