Hi, gentle ping as I wish this to go in for v6.13 On Mon, Sep 30, 2024 at 10:32:56AM GMT, Jacopo Mondi wrote: > v5->v6: > - Make the driver depend on PM > - Simplify the probe() routine by using pm_runtime_ > - Remove suspend call from remove() > > v4->v5: > - Use appropriate locking constructs: > - spin_lock_irq() for pispbe_prepare_job() called from non irq context > - spin_lock_irqsave() for pispbe_schedule() called from irq context > - Remove hw_lock from ready_queue accesses in stop_streaming and > start_streaming > - Fix trivial indentation mistake in 4/4 > > v3->v4: > - Expand commit message in 2/4 to explain why removing validation in schedule() > is safe > - Drop ready_lock spinlock > - Use non _irqsave version of safe_guard(spinlock > - Support !CONFIG_PM in 4/4 by calling the enable/disable routines directly > and adjust pm_runtime usage as suggested by Laurent > > v2->v3: > - Mark pispbe_runtime_resume() as __maybe_unused > - Add fixes tags where appropriate > > v1->v2: > - Add two patches to address Laurent's comments separately > - use scoped_guard() when possible > - Add patch to fix runtime_pm imbalance > > Currently the 'pispbe_schedule()' function does two things: > > 1) Tries to assemble a job by inspecting all the video node queues > to make sure all the required buffers are available > 2) Submit the job to the hardware > > The pispbe_schedule() function is called at: > > - video device start_streaming() time > - video device qbuf() time > - irq handler > > As assembling a job requires inspecting all queues, it is a rather > time consuming operation which is better not run in IRQ context. > > To avoid executing the time consuming job creation in interrupt > context, split the job creation and job scheduling in two distinct > operations. When a well-formed job is created, append it to the > newly introduced 'pispbe->job_queue' where it will be dequeued from > by the scheduling routine. > > At start_streaming() and qbuf() time immediately try to schedule a job > if one has been created as the irq handler routine is only called when > a job has completed, and we can't solely rely on it for scheduling new > jobs. > > Signed-off-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx> > --- > Jacopo Mondi (4): > media: pisp_be: Drop reference to non-existing function > media: pisp_be: Remove config validation from schedule() > media: pisp_be: Split jobs creation and scheduling > media: pisp_be: Fix pm_runtime underrun in probe > > drivers/media/platform/raspberrypi/pisp_be/Kconfig | 1 + > .../media/platform/raspberrypi/pisp_be/pisp_be.c | 183 ++++++++++----------- > 2 files changed, 88 insertions(+), 96 deletions(-) > --- > base-commit: 81ee62e8d09ee3c7107d11c8bbfd64073ab601ad > change-id: 20240930-pispbe-mainline-split-jobs-handling-v6-15dc16e11e3a > > Best regards, > -- > Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx> > >