From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752906AbdI0N2u (ORCPT ); Wed, 27 Sep 2017 09:28:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35290 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752264AbdI0N2t (ORCPT ); Wed, 27 Sep 2017 09:28:49 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F2B884E4F3 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=eric.auger@redhat.com From: Eric Auger 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 v2 00/10] vITS Migration fixes and reset Date: Wed, 27 Sep 2017 15:28:30 +0200 Message-Id: <1506518920-18571-1-git-send-email-eric.auger@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 27 Sep 2017 13:28:49 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Currently, the in-kernel emulated ITS is not reset. After a reset/reboot, the ITS register values and caches are left unchanged. Registers may point to some tables in guest memory which do not exist anymore. If an ITS state backup is initiated before the guest re-writes the registers, the save fails because inconsistencies are detected. Also restore of data saved as such moment is failing. Patches [1-6] attempt to fix the migration issues without implementing the reset. As such they may be candidate for stable: - do not fail restore if device or ITT tables only contain invalid entries - allow clearing GITS_CREADR/CWRITER whatever CBASER queue size - limit the cases where we return -EINVAL in table save() - never attempt to use GITS_BASER and GITS_CBASER if they are not valid. - systematically do both device and collection save/restore even if one fails. Patches [7-10] 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.Valid is cleared. Best Regards Eric Git: complete series available at https://github.com/eauger/linux/tree/v4.14-rc2-its-reset-v2 * 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: v1 -> v2: - added KVM: arm/arm64: vgic-its: Always attempt to save/restore device and collection tables PATCH v1 - series including 2 modified patches of Wanghaibin Eric Auger (8): 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: Always attempt to save/restore device and collection tables 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 | 222 +++++++++++++-------- 4 files changed, 158 insertions(+), 82 deletions(-) -- 2.5.5