Hi, Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> writes: [..] > okay, I found the one place where changing smp_wmb() to smp_mb() solves > the problem > > @@ -395,7 +395,7 @@ static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep) > /* Caller must hold fsg->lock */ > static void wakeup_thread(struct fsg_common *common) > { > - smp_wmb(); /* ensure the write of bh->state is complete */ > + smp_mb(); /* ensure the write of bh->state is complete */ > /* Tell the main thread that something has happened */ > common->thread_wakeup_needed = 1; > if (common->thread_task) turns out this helps, but it doesn't seem to be enough. I could still see a hang followed by a bus reset. I'll wait for your replies now. cheers -- balbi
Attachment:
signature.asc
Description: PGP signature