All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/19] vITS save/restore
@ 2017-03-06 11:34 ` Eric Auger
  0 siblings, 0 replies; 132+ messages in thread
From: Eric Auger @ 2017-03-06 11:34 UTC (permalink / raw)
  To: eric.auger.pro, eric.auger, marc.zyngier, christoffer.dall,
	vijayak, Vijaya.Kumar, peter.maydell, linux-arm-kernel, drjones,
	kvmarm, kvm
  Cc: andre.przywara, pbonzini, dgilbert, quintela, Prasun.Kapoor

This series specifies and implements an API aimed at saving and restoring
the state of the in-kernel emulated ITS device.

The ITS is programmed through registers and tables. Those latter
are allocated by the guest. Their base address is programmed in
registers or table entries before the ITS is enabled.

The ITS is free to use some of them to flush its internal caches. This
is likely to be used when entering low power state.

Therefore, for save/restore use case, it looks natural to use this
guest RAM allocated space to save the table related data. However,
currently, The ITS in-kernel emulated device does not use all of those
tables and for those it uses, it does not always sync them with its
cached data. Additional sync must happen for:
- the collection table
- the device table
- the per-device translation tables
- the LPI pending tables.

The LPI configation table and the command queues do not need extra
syncs.

An alternative to flushing the tables into guest RAM could have been
to flush them into a separate user-space buffer. However the drawback
of this alternative is that the virtualizer would allocate dedicated
buffers to store the data that should normally be laid out in guest
RAM. It would also be obliged to re-compute their size from
register/table content.

So saving the tables in guest RAM better fit the ITS programming
model and optimizes the memory usage. The drawback of this solution
is it brings additional challenges at user-space level to make sure
the guest RAM is frozen after table sync.

Best Regards

Eric

Git: complete series available at
https://github.com/eauger/linux/tree/v4.11-rc1-its-mig-v3

* Testing:
- on Cavium ThunderX using a virtio-net-pci guest,
  virsh save/restore commands and virt-manager live migration.
  Tested with 1 and 2 stage device table.

History:

v2 -> v3:
- fix restore ITS ITT_addr bit masking

v1 -> v2:
- rebased on Vijaya's v11
- all entries now are 8 byte large
- devid/eventid indexing for device table and ITT
- support 2 stage device table
- common infra to read indexed tables
- add cpu <-> le64 conversions
- itte renamed into ite
- do not care anymore about pending table 1st KB
  (not needed at the moment for coarse mapping)

RFC v1
- creation


Eric Auger (19):
  KVM: arm/arm64: Add vITS save/restore API documentation
  KVM: arm/arm64: rename itte into ite
  arm/arm64: vgic: turn vgic_find_mmio_region into public
  KVM: arm64: ITS: KVM_DEV_ARM_VGIC_GRP_ITS_REGS group
  KVM: arm64: ITS: Implement vgic_its_has_attr_regs and attr_regs_access
  KVM: arm64: ITS: Implement vgic_mmio_uaccess_write_its_creadr
  KVM: arm64: ITS: Report the ITE size in GITS_TYPER
  KVM: arm64: ITS: Interpret MAPD Size field and check related errors
  KVM: arm64: ITS: Interpret MAPD ITT_addr field
  KVM: arm64: ITS: Check the device id matches TYPER DEVBITS range
  KVM: arm64: ITS: KVM_DEV_ARM_VGIC_GRP_ITS_TABLES group
  KVM: arm64: ITS: vgic_its_alloc_ite/device
  KVM: arm64: ITS: Sort the device and ITE lists
  KVM: arm64: ITS: Add infrastructure for table lookup
  KVM: arm64: ITS: Collection table save/restore
  KVM: arm64: ITS: vgic_its_check_id returns the entry's GPA
  KVM: arm64: ITS: ITT flush and restore
  KVM: arm64: ITS: Device table save/restore
  KVM: arm64: ITS: Pending table save/restore

 Documentation/virtual/kvm/devices/arm-vgic-its.txt |   78 ++
 arch/arm/include/uapi/asm/kvm.h                    |    2 +
 arch/arm64/include/uapi/asm/kvm.h                  |    2 +
 include/linux/irqchip/arm-gic-v3.h                 |    3 +
 virt/kvm/arm/vgic/vgic-its.c                       | 1031 ++++++++++++++++++--
 virt/kvm/arm/vgic/vgic-mmio.c                      |    3 +-
 virt/kvm/arm/vgic/vgic-mmio.h                      |   14 +-
 7 files changed, 1022 insertions(+), 111 deletions(-)

-- 
2.5.5

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

end of thread, other threads:[~2017-03-24 11:28 UTC | newest]

Thread overview: 132+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-06 11:34 [PATCH v3 00/19] vITS save/restore Eric Auger
2017-03-06 11:34 ` Eric Auger
2017-03-06 11:34 ` [PATCH v3 01/19] KVM: arm/arm64: Add vITS save/restore API documentation Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-13 13:08   ` Peter Maydell
2017-03-13 13:08     ` Peter Maydell
2017-03-13 14:42     ` Auger Eric
2017-03-13 14:42       ` Auger Eric
2017-03-13 17:38       ` Peter Maydell
2017-03-13 17:38         ` Peter Maydell
2017-03-16 15:25         ` Auger Eric
2017-03-16 15:25           ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 02/19] KVM: arm/arm64: rename itte into ite Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-06 11:34 ` [PATCH v3 03/19] arm/arm64: vgic: turn vgic_find_mmio_region into public Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-17 14:38   ` Andre Przywara
2017-03-17 14:38     ` Andre Przywara
2017-03-21 17:38     ` Auger Eric
2017-03-21 17:38       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 04/19] KVM: arm64: ITS: KVM_DEV_ARM_VGIC_GRP_ITS_REGS group Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-20 18:12   ` Andre Przywara
2017-03-20 18:12     ` Andre Przywara
2017-03-06 11:34 ` [PATCH v3 05/19] KVM: arm64: ITS: Implement vgic_its_has_attr_regs and attr_regs_access Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-20 18:13   ` Andre Przywara
2017-03-20 18:13     ` Andre Przywara
2017-03-22 14:15     ` Auger Eric
2017-03-22 14:15       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 06/19] KVM: arm64: ITS: Implement vgic_mmio_uaccess_write_its_creadr Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-20 18:14   ` Andre Przywara
2017-03-20 18:14     ` Andre Przywara
2017-03-24 10:38     ` Auger Eric
2017-03-24 10:38       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 07/19] KVM: arm64: ITS: Report the ITE size in GITS_TYPER Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-17 14:39   ` Andre Przywara
2017-03-17 14:39     ` Andre Przywara
2017-03-21 17:38     ` Auger Eric
2017-03-21 17:38       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 08/19] KVM: arm64: ITS: Interpret MAPD Size field and check related errors Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-17 15:03   ` Andre Przywara
2017-03-17 15:03     ` Andre Przywara
2017-03-21 17:40     ` Auger Eric
2017-03-21 17:40       ` Auger Eric
2017-03-21 17:57       ` Andre Przywara
2017-03-21 17:57         ` Andre Przywara
2017-03-06 11:34 ` [PATCH v3 09/19] KVM: arm64: ITS: Interpret MAPD ITT_addr field Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-17 15:19   ` Andre Przywara
2017-03-17 15:19     ` Andre Przywara
2017-03-21 17:41     ` Auger Eric
2017-03-21 17:41       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 10/19] KVM: arm64: ITS: Check the device id matches TYPER DEVBITS range Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-17 15:41   ` Andre Przywara
2017-03-17 15:41     ` Andre Przywara
2017-03-21 17:42     ` Auger Eric
2017-03-21 17:42       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 11/19] KVM: arm64: ITS: KVM_DEV_ARM_VGIC_GRP_ITS_TABLES group Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-20 18:14   ` Andre Przywara
2017-03-20 18:14     ` Andre Przywara
2017-03-22 14:29     ` Auger Eric
2017-03-22 14:29       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 12/19] KVM: arm64: ITS: vgic_its_alloc_ite/device Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-17 17:01   ` Andre Przywara
2017-03-17 17:01     ` Andre Przywara
2017-03-21 17:42     ` Auger Eric
2017-03-21 17:42       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 13/19] KVM: arm64: ITS: Sort the device and ITE lists Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-20 18:14   ` Andre Przywara
2017-03-20 18:14     ` Andre Przywara
2017-03-06 11:34 ` [PATCH v3 14/19] KVM: arm64: ITS: Add infrastructure for table lookup Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-21 18:12   ` Andre Przywara
2017-03-21 18:12     ` Andre Przywara
2017-03-22 14:40     ` Auger Eric
2017-03-22 14:40       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 15/19] KVM: arm64: ITS: Collection table save/restore Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-21 18:13   ` Andre Przywara
2017-03-21 18:13     ` Andre Przywara
2017-03-22 14:12     ` Auger Eric
2017-03-22 14:12       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 16/19] KVM: arm64: ITS: vgic_its_check_id returns the entry's GPA Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-21 18:12   ` Andre Przywara
2017-03-21 18:12     ` Andre Przywara
2017-03-22 14:11     ` Auger Eric
2017-03-22 14:11       ` Auger Eric
2017-03-22 14:22     ` Auger Eric
2017-03-22 14:22       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 17/19] KVM: arm64: ITS: ITT flush and restore Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-21 18:13   ` Andre Przywara
2017-03-21 18:13     ` Andre Przywara
2017-03-22 14:17     ` Auger Eric
2017-03-22 14:17       ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 18/19] KVM: arm64: ITS: Device table save/restore Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-22 14:39   ` Andre Przywara
2017-03-22 14:39     ` Andre Przywara
2017-03-24 10:38     ` Auger Eric
2017-03-24 10:38       ` Auger Eric
2017-03-24 10:45       ` Auger Eric
2017-03-24 10:45         ` Auger Eric
2017-03-24 11:12         ` Andre Przywara
2017-03-24 11:12           ` Andre Przywara
2017-03-24 11:27           ` Auger Eric
2017-03-24 11:27             ` Auger Eric
2017-03-24 11:14       ` Andre Przywara
2017-03-24 11:14         ` Andre Przywara
2017-03-24 11:28         ` Auger Eric
2017-03-24 11:28           ` Auger Eric
2017-03-06 11:34 ` [PATCH v3 19/19] KVM: arm64: ITS: Pending " Eric Auger
2017-03-06 11:34   ` Eric Auger
2017-03-20 18:21   ` Andre Przywara
2017-03-20 18:21     ` Andre Przywara
2017-03-22 15:12     ` Auger Eric
2017-03-22 15:12       ` Auger Eric
2017-03-22 16:22       ` André Przywara
2017-03-22 16:22         ` André Przywara
2017-03-22 14:39   ` Andre Przywara
2017-03-22 14:39     ` Andre Przywara
2017-03-24 11:20     ` Auger Eric
2017-03-24 11:20       ` Auger Eric

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.