Hi, could you CC me on ueagle-atm.c patches. >From what I remind we sleep in the workqueue, that's why we couldn't use the system one (freeze keyboard...). But may be the code changed. Matthieu Tejun Heo a écrit : > With cmwq, there's no reason to use separate workqueues. Drop > uea_softc->work_q and use system_wq instead. The used work item is > sync flushed on driver detach. > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > Cc: Stanislaw Gruszka <stf_xl@xxxxx> > Cc: linux-usb@xxxxxxxxxxxxxxx > --- > Only compile tested. Please feel free to take it into the subsystem > tree or simply ack - I'll route it through the wq tree. > > Thanks. > > drivers/usb/atm/ueagle-atm.c | 19 +++++-------------- > 1 files changed, 5 insertions(+), 14 deletions(-) > > diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c > index 44447f5..55c1d3b 100644 > --- a/drivers/usb/atm/ueagle-atm.c > +++ b/drivers/usb/atm/ueagle-atm.c > @@ -168,7 +168,6 @@ struct uea_softc { > union cmv_dsc cmv_dsc; > > struct work_struct task; > - struct workqueue_struct *work_q; > u16 pageno; > u16 ovl; > > @@ -1879,7 +1878,7 @@ static int uea_start_reset(struct uea_softc *sc) > /* start loading DSP */ > sc->pageno = 0; > sc->ovl = 0; > - queue_work(sc->work_q, &sc->task); > + schedule_work(&sc->task); > > /* wait for modem ready CMV */ > ret = wait_cmv_ack(sc); > @@ -2091,14 +2090,14 @@ static void uea_schedule_load_page_e1(struct uea_softc *sc, > { > sc->pageno = intr->e1_bSwapPageNo; > sc->ovl = intr->e1_bOvl >> 4 | intr->e1_bOvl << 4; > - queue_work(sc->work_q, &sc->task); > + schedule_work(&sc->task); > } > > static void uea_schedule_load_page_e4(struct uea_softc *sc, > struct intr_pkt *intr) > { > sc->pageno = intr->e4_bSwapPageNo; > - queue_work(sc->work_q, &sc->task); > + schedule_work(&sc->task); > } > > /* > @@ -2170,13 +2169,6 @@ static int uea_boot(struct uea_softc *sc) > > init_waitqueue_head(&sc->sync_q); > > - sc->work_q = create_workqueue("ueagle-dsp"); > - if (!sc->work_q) { > - uea_err(INS_TO_USBDEV(sc), "cannot allocate workqueue\n"); > - uea_leaves(INS_TO_USBDEV(sc)); > - return -ENOMEM; > - } > - > if (UEA_CHIP_VERSION(sc) == ADI930) > load_XILINX_firmware(sc); > > @@ -2222,7 +2214,6 @@ err1: > sc->urb_int = NULL; > kfree(intr); > err0: > - destroy_workqueue(sc->work_q); > uea_leaves(INS_TO_USBDEV(sc)); > return -ENOMEM; > } > @@ -2243,8 +2234,8 @@ static void uea_stop(struct uea_softc *sc) > kfree(sc->urb_int->transfer_buffer); > usb_free_urb(sc->urb_int); > > - /* stop any pending boot process, when no one can schedule work */ > - destroy_workqueue(sc->work_q); > + /* flush the work item, when no one can schedule it */ > + flush_work_sync(&sc->task); > > if (sc->dsp_firm) > release_firmware(sc->dsp_firm); -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html