From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
marc.zyngier@arm.com, cdall@linaro.org, peter.maydell@linaro.org,
andre.przywara@arm.com, wanghaibin.wang@huawei.com
Cc: wu.wubin@huawei.com
Subject: [PATCH 0/9] vITS Migration fixes and reset
Date: Mon, 25 Sep 2017 15:34:29 +0200 [thread overview]
Message-ID: <1506346478-1631-1-git-send-email-eric.auger@redhat.com> (raw)
This series fixes various bugs observed when saving/restoring the
ITS state before the guest writes the ITS registers (on first boot or
after reset/reboot).
This is a follow up of Wanghaibin's series [1] plus additional
patches following additional code review. It also proposes one
ITS reset implementation. I dared to include 2 Wanghaibin patches,
taking into account the discussions held on the ML but obviously
they can live separately.
On guest reset or when shutdown -r is initiated from guest, the ITS
caches are not saved into guest RAM. However currently the ITS is not
resettable, meaning the ITS will contain previously set values in
its registers. If we initiate a state backup before the guest
re-writes the ITS registers, we use the old register values to restore
the ITS tables. And since they may have never been written they
may contain invalid entries. This leads to inconsistencies detected
by the save/restore code and causes save/restore failure.
Patches [1-5] should be cc'ed stable I think:
- KVM: arm/arm64: vgic-its: fix return value for restore (Wanghaibin)
happens on restore whenever the device or ITT tables contain
only invalid data
- Always allow clearing GITS_CREADR/CWRITER
On first boot, if GITS_CBASER queue size is 0 and if we save at
this moment, restore fails on CREAD write.
- if GITS_BASER<n> point to invalid tables we currently return -EINVAL
on state save. QEMU aborts on this error whereas it forgives -EFAULT
as we considered we should not abort on guest bad programming.
- Then we should never attempt to use GITS_BASER<n> and GITS_CBASER
if they are not valid. Patches 4 and 5 fix that.
Patches [6-9] implement a new ITS reset IOCTL
- maybe patch "free caches when GITS_BASER Valid bit is cleared" can
be omitted if we consider the caches should not be cleared when
GITS_BASER<n>.Valid is cleared.
Best Regards
Eric
Git: complete series available at
https://github.com/eauger/linux/tree/v4.14-rc2-its-reset-v1
* Testing:
- on Cavium using a virtio-net-pci guest and various sequences of
guest shutdown -r now, virsh reset, virsh suspend/resume,
virsh reboot, virsh save.restore, virsh shutdown
References:
[1] [RFC PATCH 0/3] fix migrate failed when vm is in booting
https://www.spinics.net/lists/kvm-arm/msg27121.html
History:
PATCH v1
- series including 2 modified patches of Wanghaibin
Eric Auger (7):
KVM: arm/arm64: vgic-its: Always allow clearing GITS_CREADR/CWRITER
KVM: arm/arm64: vgic-its: Improve error reporting on device table save
KVM: arm/arm64: vgic-its: Check GITS_BASER Valid bit before saving
tables
KVM: arm/arm64: vgic-its: Check GITS_CBASER validity before processing
commands
KVM: arm/arm64: vgic-its: free caches when GITS_BASER Valid bit is
cleared
KVM: arm/arm64: Document KVM_DEV_ARM_ITS_CTRL_RESET
KVM: arm/arm64: vgic-its: Implement KVM_DEV_ARM_ITS_CTRL_RESET
wanghaibin (2):
KVM: arm/arm64: vgic-its: fix return value for restore
KVM: arm/arm64: vgic-its: new helper functions to free the caches
Documentation/virtual/kvm/devices/arm-vgic-its.txt | 16 ++
arch/arm/include/uapi/asm/kvm.h | 1 +
arch/arm64/include/uapi/asm/kvm.h | 1 +
virt/kvm/arm/vgic/vgic-its.c | 211 +++++++++++++--------
4 files changed, 155 insertions(+), 74 deletions(-)
--
2.5.5
next reply other threads:[~2017-09-25 13:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-25 13:34 Eric Auger [this message]
2017-09-25 13:34 ` [PATCH 1/9] KVM: arm/arm64: vgic-its: fix return value for restore Eric Auger
2017-09-25 13:34 ` [PATCH 2/9] KVM: arm/arm64: vgic-its: Always allow clearing GITS_CREADR/CWRITER Eric Auger
2017-09-25 13:34 ` [PATCH 3/9] KVM: arm/arm64: vgic-its: Improve error reporting on device table save Eric Auger
2017-09-25 13:34 ` [PATCH 4/9] KVM: arm/arm64: vgic-its: Check GITS_BASER Valid bit before saving tables Eric Auger
2017-09-25 13:34 ` [PATCH 5/9] KVM: arm/arm64: vgic-its: Check GITS_CBASER validity before processing commands Eric Auger
2017-09-25 13:34 ` [PATCH 6/9] KVM: arm/arm64: vgic-its: new helper functions to free the caches Eric Auger
2017-09-25 13:34 ` [PATCH 7/9] KVM: arm/arm64: vgic-its: free caches when GITS_BASER Valid bit is cleared Eric Auger
2017-10-16 9:26 ` Christoffer Dall
2017-10-16 9:44 ` Auger Eric
2017-10-16 9:59 ` Christoffer Dall
2017-10-16 9:47 ` Peter Maydell
2017-10-16 10:01 ` Christoffer Dall
2017-09-25 13:34 ` [PATCH 8/9] KVM: arm/arm64: Document KVM_DEV_ARM_ITS_CTRL_RESET Eric Auger
2017-09-25 13:34 ` [PATCH 9/9] KVM: arm/arm64: vgic-its: Implement KVM_DEV_ARM_ITS_CTRL_RESET Eric Auger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1506346478-1631-1-git-send-email-eric.auger@redhat.com \
--to=eric.auger@redhat.com \
--cc=andre.przywara@arm.com \
--cc=cdall@linaro.org \
--cc=eric.auger.pro@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=peter.maydell@linaro.org \
--cc=wanghaibin.wang@huawei.com \
--cc=wu.wubin@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome