> > one thing to look at for work queues that never get work is to see> > if they are appropriate for the async function call interface> > (the only requirement for that is that they need to cope with> > calling inline in exceptional cases)> > > > > Hi Arjan,> > There is one thing that make it hard to replace workqueues in such> cases, there is not guarantee the function will run in user context> because of this condition:> > if (!async_enabled || !entry || atomic_read(&entry_count) > MAX_WORK)> > I wanted to replace kpsmoused with an async function but I want to> schedule a slow work that can't be done from irq...

if there is enough value in having a variant that is guaranteed toalways run from a thread we could add that. Likely that needs that the caller passes in a bit of memory, but that's not too big a deal.If there is only 1 in the entire kernel it might not be worth it,but if it's a common pattern then for sure...