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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html