On 06/03/20 15:30, David Hildenbrand wrote: >> Assuming we're only talking about CPU ioctls (seems like a good >> approximation) maybe you could use start_exclusive/end_exclusive? The >> current_cpu->in_exclusive_context assignments can be made conditional on >> "if (current_cpu)". >> >> However that means you have to drop the BQL, see >> process_queued_cpu_work. It may be a problem. >> > Yeah, start_exclusive() is expected to be called without the BQL, > otherwise the other CPUs would not be able to make progress and can > eventually be "caught". > > It's essentially the same reason why I can't use high-level > pause_all_vcpus()/resume_all_vcpus(). Will drop the BQL which is very > bad for resizing code. But any other synchronization primitive that you do which blocks all vCPUs will have the same issue, otherwise you get a deadlock. Paolo