Hi On Mon, Oct 14, 2024 at 08:55:00AM +0200, Jacopo Mondi wrote: > Hi, > gentle ping as I wish this to go in for v6.13 gentle ping as I wish this to go in for v6.14 > > 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> > > > > >