On Fri 2016-11-11 10:33:30, Petr Mladek wrote: > Then I tried to revert the conversion to the kthread worker > API (2nd patch from this patchset), see below. And it still > hangs during the suspend inside > > powerclamp_cpu_predown() > kthread_stop(*percpu_thread); > > > Note that both kthread_flush_worker() and kthread_stop() > waits until the kthread gets scheduled and do some job. > Also note that the kthread is bound to the given CPU. > > My guess is that the kthread cannot be scheduled at this stage. > I wonder if the CPU is already partially down or that tasks > are freezed so that "normal" tasks are not scheduled at > this point. I am still trying to understand the code > related to suspend, cpu hotplug, and scheduler.
And yes, the problem seems to be that the kthread is freezed so that it could not run. The suspend works when I disable: clamp_thread() // set_freezable(); // try_to_freeze(); In fact, we should not need these calls. They are needed only when we want to stop the kthread on exact location so that it does not produce I/O that would block/break suspend. But this is not the case of intel_powerclamp. I am going to do some more tests and will send a fix. It should be enough to remove the KTW_FREEZABLE flag from the kthread_create_worker_on_cpu() call. Best Regards, Petr