Store irq routing table pointer in the irqfd object,and use that to inject MSI directly without bouncing out toa kernel thread.

While we touch this structure, rearrange irqfd fields to make fastpathbetter packed for better cache utilization.

This also adds some comments about locking rules and rcu usage in code.

Some notes on the design:- Use pointer into the rt instead of copying an entry, to make it possible to use rcu, thus side-stepping locking complexities. We also save some memory this way.- Old workqueue code is still used for level irqs. I don't think we DTRT with level anyway, however, it seems easier to keep the code around as it has been thought through and debugged, and fix level later than rip out and re-instate it later.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>---OK, this seems to work fine for me. Tested with virtio-net in guestwith and without vhost-net. Pls review/apply if appropriate.