Messages in this thread | | | Subject | Re: [RFC PATCH v9 6/9] media: tegra: Add Tegra210 Video input driver | From | Sowjanya Komatineni <> | Date | Thu, 23 Apr 2020 18:08:27 -0700 |
| |
On 4/23/20 5:51 PM, Sowjanya Komatineni wrote: > > On 4/23/20 5:42 PM, Dmitry Osipenko wrote: >> External email: Use caution opening links or attachments >> >> >> 24.04.2020 02:50, Sowjanya Komatineni пишет: >>> On 4/23/20 4:25 PM, Dmitry Osipenko wrote: >>>> External email: Use caution opening links or attachments >>>> >>>> >>>> 24.04.2020 02:20, Sowjanya Komatineni пишет: >>>>> On 4/23/20 4:19 PM, Sowjanya Komatineni wrote: >>>>>> On 4/23/20 4:16 PM, Dmitry Osipenko wrote: >>>>>>> External email: Use caution opening links or attachments >>>>>>> >>>>>>> >>>>>>> 22.04.2020 09:18, Sowjanya Komatineni пишет: >>>>>>>> +static int chan_capture_kthread_start(void *data) >>>>>>>> +{ >>>>>>>> + struct tegra_vi_channel *chan = data; >>>>>>>> + struct tegra_channel_buffer *buf; >>>>>>>> + int err = 0; >>>>>>>> + >>>>>>>> + set_freezable(); >>>>>>>> + >>>>>>>> + while (1) { >>>>>>>> + try_to_freeze(); >>>>>>>> + >>>>>>>> + wait_event_interruptible(chan->start_wait, >>>>>>>> + !list_empty(&chan->capture) || >>>>>>>> + kthread_should_stop()); >>>>>>>> + >>>>>>>> + if (kthread_should_stop()) >>>>>>>> + break; >>>>>>>> + >>>>>>>> + /* >>>>>>>> + * Source is not streaming if error is non-zero. >>>>>>>> + * So, do not dequeue buffers on capture error. >>>>>>>> + */ >>>>>>>> + if (err) >>>>>>>> + continue; >>>>>>> This will result in an endless loop, I suppose it wasn't the >>>>>>> intention. >>>>>> no it will not. on error we report vb2_queue_error which will do >>>>>> streaming stop request. >>>>>> >>>>>> So thread will be stopped on streaming stop request thru kthread >>>>>> stop >>>>>> signal >>>>> To be clear on error it reports vb2 queue error and waits for stop >>>>> streaming to happen >>>> If thread should exit on error, then it should do it on the actual >>>> error. Otherwise it looks very error-prone. >>> When v4l2 drivers indicate fatal error through vb2_queue_error, queue >>> error flag is set and wakes up all processes waiting on queue along >>> with polling reporting EPOLLERR and also reporting error for queuing >>> and dequeuing buffers. Stream stop will surely happen which stops the >>> thread. >> This doesn't explain what is the point of continuing to loop instead of >> exiting immediately on error. > > We are using 2 threads and when capture start error happens, we can > stop capture_start thread immediately but capture_finish thread will > still run for any outstanding buffers. > > So, as it makes no diff stopping both threads during stream stop which > will definitely happen on error and when we don't dequeue buffers > Also there will be an issue if we break on error immediately during stop_streaming -> kthread_stop()
As stop streaming can happen any time, we do kthread_stop and in case of error if we stop thread and on stop streaming kthread_stop might crash as kthread_stop can only be called on running thread
| |