All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 0/6] vgic emulation and GICD_ITARGETSR
@ 2014-07-03 16:52 Stefano Stabellini
  2014-07-03 16:53 ` [PATCH v7 1/6] xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs Stefano Stabellini
                   ` (5 more replies)
  0 siblings, 6 replies; 15+ messages in thread
From: Stefano Stabellini @ 2014-07-03 16:52 UTC (permalink / raw)
  To: xen-devel; +Cc: Julien Grall, Ian Campbell, Stefano Stabellini

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(-)

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-07-10 17:47 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-03 16:52 [PATCH v7 0/6] vgic emulation and GICD_ITARGETSR Stefano Stabellini
2014-07-03 16:53 ` [PATCH v7 1/6] xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs Stefano Stabellini
2014-07-03 16:53 ` [PATCH v7 2/6] xen/arm: move setting GIC_IRQ_GUEST_QUEUED earlier Stefano Stabellini
2014-07-04 10:23   ` Julien Grall
2014-07-09 15:38   ` Ian Campbell
2014-07-03 16:53 ` [PATCH v7 3/6] xen/arm: inflight irqs during migration Stefano Stabellini
2014-07-04 10:26   ` Julien Grall
2014-07-03 16:53 ` [PATCH v7 4/6] xen/arm: support irq delivery to vcpu > 0 Stefano Stabellini
2014-07-04 10:28   ` Julien Grall
2014-07-09 15:41   ` Ian Campbell
2014-07-03 16:53 ` [PATCH v7 5/6] xen/arm: physical irq follow virtual irq Stefano Stabellini
2014-07-04 10:51   ` Julien Grall
2014-07-10 15:59     ` Ian Campbell
2014-07-10 17:47     ` Stefano Stabellini
2014-07-03 16:53 ` [PATCH v7 6/6] xen: introduce sched_move_irqs Stefano Stabellini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.