One idea I had to make it even clearer was to have a shutdown list
of irqfds per-kvm, together with the items list, and make work_struct for
shutdown global, not per-irqfd. We can then unconditionally do
list_move + schedule_work to shut down an irqfd, and it's safe to do
even if it is already on the shutdown list - it just gets moved to tail.
Hmm..I'm not sure that churn really buys us anything, tho. Technically
the "active" bit is redundant with list_del_init()+list_empty() that I
employed in previous versions. However, I made it explicit with the
active bit to be more self-documenting. IMO, the latest code is pretty
clear, and the change you are proposing is moving towards a slightly
trickier variant like I originally had. I'd say "lets leave this as is".