[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 0/6] vgic emulation and GICD_ITARGETSR
Hi all, this patch series improves vgic emulation in relation to GICD_ITARGETSR, and implements irq delivery to vcpus other than vcpu0. vgic_enable_irqs and vgic_disable_irqs currently ignore the itarget settings and just enable/disable irqs on the current vcpu. Fix their behaviour to enable/disable irqs on the vcpu set by itarget, that is vcpu0 for irq >= 32 initially. Introduce a new vgic function called vgic_get_target_vcpu to retrieve the right target vcpu (looking at itargets) and use it from do_IRQ. Change the physical irq affinity to make physical irqs follow virtual cpus migration. The main changes in v7 are: - introduce a vcpu_migrate_from field in pending_irq to keep track of the old vcpu so that we can kick it when we receive a new interrupt if it appears to still be inflight - delay setting the physical irq affinity until after clearing the GIC_IRQ_GUEST_MIGRATING flag The full list of changes follow. Changes in v7: - add ASSERT to _vgic_get_target_vcpu; - add comment to vgic_distr_mmio_write; - move the _VPF_down check before setting GIC_IRQ_GUEST_QUEUED; - fix comments; - rename trl to target; - introduce vcpu_migrate_from; - do not kick new vcpu on MIGRATING, kick the old vcpu instead; - separate moving GIC_IRQ_GUEST_QUEUED earlier into a different patch; - use gic_number_lines in assert; - remove checks at the top of gic_irq_set_affinity, add assert instead; - move irq_set_affinity to irq.c; - delay setting the affinity of the physical irq when the virq is MIGRATING until the virq is EOIed by the guest; - do not set the affinity of MIGRATING irqs from arch_move_irqs. Changes in v6: - rebased on f7e46156a1c006a6eb5489e0227d39229eec316d; - add ASSERT to _vgic_get_target_vcpu; - add BUG_ON to vgic_distr_mmio_write; - add in-code comment to _vgic_get_target_vcpu; - move additional check on itargets writing from the second patch to the first patch; - sizeof(itargets) instead of 8*sizeof(itargets[0]); - remove the unneeded cast of &target for find_first_bit; - remove unnecessary casts to (const unsigned long *) to the arguments of find_first_bit and find_next_bit; - deal with migrating an irq that is inflight and still lr_pending; - replace the dsb with smb_wmb and smb_rmb, use them to ensure the order of accesses to GIC_IRQ_GUEST_QUEUED and GIC_IRQ_GUEST_MIGRATING; - add in-code comments to vgic_vcpu_inject_spi and do_IRQ; - assert that the guest irq is an SPI in vgic_vcpu_inject_spi; - use vgic_get_target_vcpu instead of _vgic_get_target_vcpu in arch_move_irqs; - introduce sched_move_irqs. Changes in v5: - add "rename vgic_irq_rank to vgic_rank_offset"; - add "introduce vgic_rank_irq"; - improve in-code comments; - use vgic_rank_irq; - use bit masks to write-ignore GICD_ITARGETSR; - introduce an version of vgic_get_target_vcpu that doesn't take the rank lock; - keep the rank lock while enabling/disabling irqs; - use find_first_bit instead of find_next_bit; - pass unsigned long to find_next_bit for alignment on aarch64; - call vgic_get_target_vcpu instead of gic_add_to_lr_pending to add the irq in the right inflight queue; - add barrier and bit tests to make sure that vgic_migrate_irq and gic_update_one_lr can run simultaneously on different cpus without issues; - rework the loop to identify the new vcpu when ITARGETSR is written; - use find_first_bit instead of find_next_bit; - prettify vgic_move_irqs; - rename vgic_move_irqs to arch_move_irqs; - introduce helper function irq_set_affinity. Stefano Stabellini (6): xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs xen/arm: move setting GIC_IRQ_GUEST_QUEUED earlier xen/arm: inflight irqs during migration xen/arm: support irq delivery to vcpu > 0 xen/arm: physical irq follow virtual irq xen: introduce sched_move_irqs xen/arch/arm/gic-v2.c | 17 +++- xen/arch/arm/gic.c | 32 ++++++- xen/arch/arm/irq.c | 11 ++- xen/arch/arm/vgic.c | 209 ++++++++++++++++++++++++++++++++++++++---- xen/common/schedule.c | 12 ++- xen/include/asm-arm/domain.h | 7 ++ xen/include/asm-arm/gic.h | 3 + xen/include/asm-arm/irq.h | 2 + xen/include/asm-arm/vgic.h | 1 + xen/include/asm-x86/irq.h | 2 + 10 files changed, 266 insertions(+), 30 deletions(-) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |