Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1464766

Re: [RFC PATCH 1/2] [media] vb2: defer sync buffers from vb2_buffer_done() with a workqueue

From Sakari Ailus <sakari.ailus@iki.fi>
Newsgroups linux.kernel
Subject Re: [RFC PATCH 1/2] [media] vb2: defer sync buffers from vb2_buffer_done() with a workqueue
Date 2016-08-17 22:00 +0200
Message-ID <s7fai-5wE-17@gated-at.bofh.it> (permalink)
References <s7dLb-4HE-1@gated-at.bofh.it> <s7dLb-4HE-15@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Hi Javier,

On Wed, Aug 17, 2016 at 02:28:56PM -0400, Javier Martinez Canillas wrote:
> The vb2_buffer_done() function can be called from interrupt context but it
> currently calls the vb2 memory allocator .finish operation to sync buffers
> and this can take a long time, so it's not suitable to be done there.
> 
> This patch defers part of the vb2_buffer_done() logic to a worker thread
> to avoid doing the time consuming operation in interrupt context.

I agree the interrupt handler is not the best place to perform the work in
vb2_buffer_done() (including cache flushing), but is a work queue an ideal
solution?

The work queue task is a regular kernel thread not subject to
sched_setscheduler(2) and alike, which user space programs can and do use to
change how the scheduler treats these processes. Requiring a work queue to
be run between the interrupt arriving from the hardware and the user space
process being able to dequeue the related buffer would hurt use cases where
strict time limits are crucial.

Neither I propose making the work queue to have real time priority either,
albeit I think might still be marginally better.

Additionally, the work queue brings another context switch per dequeued
buffer. This would also be undesirable on IoT and mobile systems that often
handle multiple buffer queues simultaneously.

Performing this task in the context of the process that actually dequeues
the buffer avoids both of these problem entirely as there are no other
processes involved.

-- 
Kind regards,

Sakari Ailus
e-mail: sakari.ailus@iki.fi	XMPP: sailus@retiisi.org.uk

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[RFC PATCH 0/2] [media] vb2: defer part of vb2_buffer_done() and move dma-buf unmap from DQBUF Javier Martinez Canillas <javier@osg.samsung.com> - 2016-08-17 20:30 +0200
  [RFC PATCH 1/2] [media] vb2: defer sync buffers from vb2_buffer_done() with a workqueue Javier Martinez Canillas <javier@osg.samsung.com> - 2016-08-17 20:30 +0200
    Re: [RFC PATCH 1/2] [media] vb2: defer sync buffers from  vb2_buffer_done() with a workqueue Sakari Ailus <sakari.ailus@iki.fi> - 2016-08-17 22:00 +0200
      Re: [RFC PATCH 1/2] [media] vb2: defer sync buffers from  vb2_buffer_done() with a workqueue Javier Martinez Canillas <javier@osg.samsung.com> - 2016-08-17 23:30 +0200
  [RFC PATCH 2/2] [media] vb2: move dma-buf unmap from __vb2_dqbuf() to vb2_done_work() Javier Martinez Canillas <javier@osg.samsung.com> - 2016-08-17 20:30 +0200

csiph-web