Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1893519pxf; Sat, 13 Mar 2021 00:45:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJp9Ah0CiXU307hPt6IINk84XTDlVQdG3Mg7jeLax2cgnhCRnen7k7XoWe8nC5u2GMdFYA X-Received: by 2002:a17:906:ecfb:: with SMTP id qt27mr12764252ejb.245.1615625111382; Sat, 13 Mar 2021 00:45:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615625111; cv=none; d=google.com; s=arc-20160816; b=nSw0Yu4McFUYvEV6mbB8EuQfXwF9RZeqww3RAm01oNEfI+jBaiSEql4S14ke1bHYff K/8531eQPrPNJcpBP+BZbTOf8DVBsSdAFXSI+xuNGdu7FuxQ0Ser3weZEilTAvZbSD7f 6WNXliIJ4/2fR6aAYmkwkFuqJNnrhihH15tkdonzqc2Cx2UjR5vxIOPsvulaZtGl/7mA wQgmIlGo6UyqexVLEsQ7SXQdD89uP5bwmq+PaqkmUSSvKV+rcLMuFd4ZQhzoxiD68kP1 cf/AYWX5V6s3foKgq7MMGccJ8iKBO7U5IdUiy3nEOvpYfNwqHm3ZSdcVg6ec0FnxZyn1 pUBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=MkGrXLzAaxB8ol+ml4iaKKFdfoNKV9cpscHGAbSmf10=; b=qX+2OUFI60L1lR4nsJDPwqOiUWsz9wfgpKA6J4v8w9d2VOheqZ0tPrLgAlqq1PqvDb pYV8SbRiOpfz8M/q26xYCPHTS76NCS0Olufgs+jXJIYr3cwVBHaBDUJ+cOHeSupv3DUB TscP4ho0czCP5YYZ4TpQyIo/WAqyrQ54c1Rp+LzXKYwowGAOiApzA5bYbWUAqW7dON4G ZEGyLEYCrJFNLsQrNdCZ82PBZGydxFOrCBSS7xhdDHg3xAXFQAL5T5iMtCJTE1mbqemu G5QhSFkx7BE6LW3rx460GHvp0TQoIW/LcRhx/rKrK1aiXfAxg+hxedmLinlqSaQjN6LR LQgA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d5si6202102eja.499.2021.03.13.00.44.48; Sat, 13 Mar 2021 00:45:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233188AbhCMIj6 (ORCPT + 99 others); Sat, 13 Mar 2021 03:39:58 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:14327 "EHLO szxga07-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230441AbhCMIjg (ORCPT ); Sat, 13 Mar 2021 03:39:36 -0500 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4DyGJz6DxKz8wxp; Sat, 13 Mar 2021 16:37:39 +0800 (CST) Received: from DESKTOP-7FEPK9S.china.huawei.com (10.174.184.135) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.498.0; Sat, 13 Mar 2021 16:39:21 +0800 From: Shenming Lu To: Marc Zyngier , Eric Auger , "Will Deacon" , , , , CC: Alex Williamson , Cornelia Huck , Lorenzo Pieralisi , , , Subject: [PATCH v4 0/6] KVM: arm64: Add VLPI migration support on GICv4.1 Date: Sat, 13 Mar 2021 16:38:54 +0800 Message-ID: <20210313083900.234-1-lushenming@huawei.com> X-Mailer: git-send-email 2.27.0.windows.1 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.184.135] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, In GICv4.1, migration has been supported except for (directly-injected) VLPI. And GICv4.1 Spec explicitly gives a way to get the VLPI's pending state (which was crucially missing in GICv4.0). So we make VLPI migration capable on GICv4.1 in this series. In order to support VLPI migration, we need to save and restore all required configuration information and pending states of VLPIs. But in fact, the configuration information of VLPIs has already been saved (or will be reallocated on the dst host...) in vgic(kvm) migration. So we only have to migrate the pending states of VLPIs specially. Below is the related workflow in migration. On the save path: In migration completion: pause all vCPUs | call each VM state change handler: pause other devices (just keep from sending interrupts, and such as VFIO migration protocol has already realized it [1]) | flush ITS tables into guest RAM | flush RDIST pending tables (also flush VLPI pending states here) | ... On the resume path: load each device's state: restore ITS tables (include pending tables) from guest RAM | for other (PCI) devices (paused), if configured to have VLPIs, establish the forwarding paths of their VLPIs (and transfer the pending states from kvm's vgic to VPT here) We have tested this series in VFIO migration, and found some related issues in QEMU [2]. Links: [1] vfio: UAPI for migration interface for device state: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a8a24f3f6e38103b77cf399c38eb54e1219d00d6 [2] vfio: Some fixes and optimizations for VFIO migration: https://patchwork.ozlabs.org/project/qemu-devel/cover/20210310030233.1133-1-lushenming@huawei.com/ History: v3 -> v4 - Nit fixes. - Add a CPU cache invalidation right after unmapping the vPE. (Patch 1) - Drop the setting of PTZ altogether. (Patch 2) - Bail out if spot !vgic_initialized(). (in Patch 4) - Communicate the state change (clear pending_latch) via vgic_queue_irq_unlock. (in Patch 5) Thanks a lot for the suggestions from Marc! v2 -> v3 - Add the vgic initialized check to ensure that the allocation and enabling of the doorbells have already been done before unmapping the vPEs. - Check all get_vlpi_state related conditions in save_pending_tables in one place. - Nit fixes. v1 -> v2: - Get the VLPI state from the KVM side. - Nit fixes. Thanks, Shenming Marc Zyngier (1): irqchip/gic-v3-its: Add a cache invalidation right after vPE unmapping Shenming Lu (4): irqchip/gic-v3-its: Drop the setting of PTZ altogether KVM: arm64: GICv4.1: Add function to get VLPI state KVM: arm64: GICv4.1: Try to save VLPI state in save_pending_tables KVM: arm64: GICv4.1: Give a chance to save VLPI state Zenghui Yu (1): KVM: arm64: GICv4.1: Restore VLPI pending state to physical side .../virt/kvm/devices/arm-vgic-its.rst | 2 +- arch/arm64/kvm/vgic/vgic-its.c | 6 +- arch/arm64/kvm/vgic/vgic-v3.c | 66 +++++++++++++++++-- arch/arm64/kvm/vgic/vgic-v4.c | 37 +++++++++++ arch/arm64/kvm/vgic/vgic.h | 1 + drivers/irqchip/irq-gic-v3-its.c | 21 +++++- 6 files changed, 121 insertions(+), 12 deletions(-) -- 2.19.1