On Mon, 2011-01-03 at 14:49 +0100, Tejun Heo wrote:
Tejun,
I have a question about cmwq, but to ask it, I need to give the context.
The non-system out_work_queue in cx18 had two purposes:
1. To prevent a userspace video rendering application from sleeping in
read(), when it had emptied a cx18 driver DMA buffer and the cx18 driver
had to sleep to notify the CX2318 engine that the buffer was available
again.
Your change has no adverse effect on this.
2. To prevent work items being handled by keventd/n from being delayed
too long, as the deferred work in question can involve a bit of sleeping
due to contention, the workload of the CX23418's MPEG encoding engine,
and the number of CX23418 devices in the system.
Will all the sleeping that can happen, is the move to a system wq, under
cmwq, going to have adverse affects on processing other work items in
the system?
I get the feeling it won't be a problem with cmwq, but I haven't paid
enough attention to be sure.
Here are some gory details, if it helps:
A single CX23418 has *one* cx18 driver to CX23418 Capture Processing
Unit (epu2cpu_mb) mailbox though which the cx18 driver sends all normal
commands along with a notification interrupt to the CX23418.
The CX23418 will acknowledge all commands with ack back in the mailbox
and an interrupt for the cx18 driver. Sometimes the ack happens right
away. Sometimes the cx18 driver has to wait(), if the CX23418 is
busy.
The cx18 driver uses a mutex (epu2cpu_mb_lock) to protect cx18 driver
access to the one epu2cpu_mb mailbox. The mutex is grabbed and released
on a per epu2cpu_mb mailbox command basis
To tell the CX23418 about a usable empty buffer for DMA, one epu2cpu
mailbox command (CX18_CPU_DE_SET_MDL) must be performed for each usable
empty buffer.
A CX23418 can support multiple, simultaneous logical capture streams at
once. The streams for a DVB TS, analog video converted to MPEG, VBI
data, and the MPEG Index data are common to have active simultaneously.
The CX23418 can keep track of 63 empty buffers for each active stream
and the cx18 driver tries to ensure the CX23418 always has as close to
63 as possible available at any time.
The out_work_handler, when triggered for a capture stream type, will try
to perform, as needed, from 1 to 63 CX18_CPU_DE_SET_MDL mailbox commands
for that stream. At steady state, the number of CX18_CPU_DE_SET_MDL
mailbox commands executed one after the other in a batch will likely be
from 1 to 3.
It is not unusual for a non-commercial end user to have 2 or 3 CX23418
based capture cards in one machine. I am aware of at least one
commercial user that had 5 CX23418 based cards in a modest machine.
It is not unusual for scheduled TV recording software to start nearly
simultaneous DTV TS, MPEG, and VBI or MPEG Index streams on multiple
cards. So 3 CX23418 cards with 3 streams each. Let's nominally
estimate the timing of the CX18_CPU_DE_SET_MDL commands per stream at
the PAL frame rate of 25 Hz; or 1 CX18_CPU_DE_SET_MDL mailbox command
per stream per 40 milliseconds.
Regards,
Andy
--