Hello,
The following series introduces EOI callbacks and switches a number of
subsystems to use them. The first one is vmsi and dpci, which are quite
straight forward to switch since they used to open code hooks in the EOI
handlers.
Finally HVM virtual timers are also switched to a different model where
EOI callbacks are used instead of checking at every return to guest
whether a timer interrupt is being injected. Note that such change also
fixes a bug in virtual periodic timers that prevented injecting to a vCPU
different than the one where the timer is assigned (and that would
currently match the i8259 target).
Those changes are paired together so that practical applications of
having EOI callbacks can be seen in action.
Note that further cleanup can be done, but I think the series is already
big enough and provides a clear benefit.
A couple of notes from the testing performed:
- PVH dom0.
- Windows guest, limited to 2% capacity to test delay for missed ticks
mode - time is consistent in the guest.
- Windows guest migration.
- PCI passthrough to a guest.
Thanks, Roger.
Roger Pau Monne (11):
x86/hvm: drop vcpu parameter from vlapic EOI callbacks
x86/hvm: drop domain parameter from vioapic/vpic EOI callbacks
x86/vlapic: introduce an EOI callback mechanism
x86/vmsi: use the newly introduced EOI callbacks
x86/vioapic: switch to use the EOI callback mechanism
x86/hvm: allowing registering EOI callbacks for GSIs
x86/dpci: move code
x86/dpci: switch to use a GSI EOI callback
x86/vpt: switch interrupt injection model
x86/vpt: remove vPT timers per-vCPU lists
x86/vpt: introduce a per-vPT lock
xen/arch/x86/domain.c | 4 +-
xen/arch/x86/emul-i8254.c | 1 +
xen/arch/x86/hvm/hpet.c | 8 +-
xen/arch/x86/hvm/hvm.c | 23 +-
xen/arch/x86/hvm/irq.c | 63 ++++
xen/arch/x86/hvm/rtc.c | 1 +
xen/arch/x86/hvm/svm/intr.c | 3 -
xen/arch/x86/hvm/vioapic.c | 149 ++++++----
xen/arch/x86/hvm/vlapic.c | 74 ++++-
xen/arch/x86/hvm/vmsi.c | 35 ++-
xen/arch/x86/hvm/vmx/intr.c | 59 ----
xen/arch/x86/hvm/vpic.c | 9 +-
xen/arch/x86/hvm/vpt.c | 476 +++++++++---------------------
xen/drivers/passthrough/x86/hvm.c | 219 ++++++++------
xen/include/asm-x86/hvm/io.h | 3 +-
xen/include/asm-x86/hvm/irq.h | 21 ++
xen/include/asm-x86/hvm/vcpu.h | 4 -
xen/include/asm-x86/hvm/vioapic.h | 2 +-
xen/include/asm-x86/hvm/vlapic.h | 18 +-
xen/include/asm-x86/hvm/vpt.h | 26 +-
20 files changed, 601 insertions(+), 597 deletions(-)
--
2.30.1