Hi,

On 07/04/2018 10:04 AM, Hans Verkuil wrote:
> On 18/06/18 06:38, Ezequiel Garcia wrote:
>> As per the documentation, job_abort is not required
>> to wait until the current job finishes. It is redundant
>> to do so, as the core will perform the wait operation.

Could you elaborate how the core ensures DMA operation is not in progress
after VIDIOC_STREAMOFF, VIDIOC_DQBUF with this patch applied?

>> Remove the wait infrastructure completely.
> 
> Sylwester, can you review this?

Thanks for forwarding Hans!

>> Cc: Kyungmin Park <kyungmin.p...@samsung.com>
>> Cc: Kamil Debski <ka...@wypas.org>
>> Cc: Andrzej Hajda <a.ha...@samsung.com>
>> Signed-off-by: Ezequiel Garcia <ezequ...@collabora.com>
>> ---
>>   drivers/media/platform/s5p-g2d/g2d.c | 11 -----------
>>   drivers/media/platform/s5p-g2d/g2d.h |  1 -
>>   2 files changed, 12 deletions(-)
>>
>> diff --git a/drivers/media/platform/s5p-g2d/g2d.c 
>> b/drivers/media/platform/s5p-g2d/g2d.c
>> index 66aa8cf1d048..e98708883413 100644
>> --- a/drivers/media/platform/s5p-g2d/g2d.c
>> +++ b/drivers/media/platform/s5p-g2d/g2d.c
>> @@ -483,15 +483,6 @@ static int vidioc_s_crop(struct file *file, void *prv, 
>> const struct v4l2_crop *c
>>   
>>   static void job_abort(void *prv)
>>   {
>> -    struct g2d_ctx *ctx = prv;
>> -    struct g2d_dev *dev = ctx->dev;
>> -
>> -    if (dev->curr == NULL) /* No job currently running */
>> -            return;
>> -
>> -    wait_event_timeout(dev->irq_queue,
>> -                       dev->curr == NULL,
>> -                       msecs_to_jiffies(G2D_TIMEOUT));

I think after this patch there will be a potential race condition possible,
we could have the hardware DMA and CPU writing to same buffer with sequence 
like:
...
QBUF
STREAMON
STREAMOFF
DQBUF 
CPU accessing the buffer  <--  at this point G2D DMA could still be writing
to an already dequeued buffer. Image processing can take few miliseconds, it 
should
be fairly easy to trigger such a condition.

Not saying about DMA being still in progress after device file handle is closed,
but that's something that deserves a separate patch. It seems there is a bug in 
the driver as there is no call to v4l2_m2m_ctx_release()in the device fops 
release() 
callback.

I think we could remove the s5p-g2d driver altogether as the functionality is 
covered
by the exynos DRM IPP driver (drivers/gpu/drm/exynos).

>>   }
>>   
>>   static void device_run(void *prv)
>> @@ -563,7 +554,6 @@ static irqreturn_t g2d_isr(int irq, void *prv)
>>      v4l2_m2m_job_finish(dev->m2m_dev, ctx->fh.m2m_ctx);
>>   
>>      dev->curr = NULL;
>> -    wake_up(&dev->irq_queue);
>>      return IRQ_HANDLED;
>>   }

--
Regards,
Sylwester

Reply via email to