On 2014年08月16日 01:17, Mauro Carvalho Chehab wrote:
..........
>> +++ b/drivers/media/pci/pt3/pt3.c
..........
>> +static int pt3_fetch_thread(void *data)
>> +{
>> +    struct pt3_adapter *adap = data;
>> +
>> +#define PT3_FETCH_DELAY (10 * 1000)
>> +#define PT3_INITIAL_DISCARD_BUFS 4
>> +
>> +    pt3_init_dmabuf(adap);
>> +    adap->num_discard = PT3_INITIAL_DISCARD_BUFS;
>> +
>> +    dev_dbg(adap->dvb_adap.device,
>> +            "PT3: [%s] started.\n", adap->thread->comm);
>> +    while (!kthread_should_stop()) {
>> +            pt3_proc_dma(adap);
>> +            usleep_range(PT3_FETCH_DELAY, PT3_FETCH_DELAY + 2000);
>> +    }
>> +    dev_dbg(adap->dvb_adap.device,
>> +            "PT3: [%s] exited.\n", adap->thread->comm);
>> +    adap->thread = NULL;
>> +    return 0;
>> +}
> 
> Why do you need a thread here? Having a thread requires some special
> care, as you need to delete it before suspend, restore at resume
> (if active) and be sure that it was killed at device removal.
> 
> I'm not seeing any of those things on this driver.

PT3 is a dumb device that lacks interrupt,
so the driver has to poll the DMA buffers regularly to know if
a DMA has finished.

I forgot to clean up the thread in remove() and will add it in the v2.
As with suspend/resume, I can add a check of freezing() like in
dvb_frontend.c::dvb_frontend_thread(), but if I remember right,
I had read before that someone pointed out that
the suspend/resume of DVB is not supported by DVB core,
and not many of other drivers seem to support it either,
so I thought I could omit this feature and rely on module re-probing.
Should I implement power management ops and set them to .driver.pm?
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to