On Mon, Jan 23, 2017 at 12:03:29PM -0500, Tejun Heo wrote: > Hello, > > On Fri, Jan 20, 2017 at 03:26:06PM +0000, Mel Gorman wrote: > > > This translates to queue_work_on(), which has the comment of "We queue > > > the work to a specific CPU, the caller must ensure it can't go away.", > > > so is this safe? lru_add_drain_all() uses get_online_cpus() around this. > > > > > > > get_online_cpus() would be required. > > This part of workqueue usage has always been a bit clunky and I should > imrpove it but you don't necessarily have to pin the cpus from > queueing to execution. You can queue without checking whether the CPU > is online and instead synchronize the actual work item execution > against cpu offline callback so that if the work item gets executed > after offline callback is finished, it becomes a noop. >
What is the actual mechanism that does that? It's not something that schedule_on_each_cpu does and one would expect that the core workqueue implementation would get this sort of detail correct. Or is this a proposal on how it should be done? -- Mel Gorman SUSE Labs