From patchwork Tue Jul 5 15:11:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vijay Kilari X-Patchwork-Id: 9214571 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A19746048F for ; Tue, 5 Jul 2016 15:14:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 90F552624C for ; Tue, 5 Jul 2016 15:14:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 858A226252; Tue, 5 Jul 2016 15:14:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_WEB,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DC86E2624C for ; Tue, 5 Jul 2016 15:14:38 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bKS1N-0007MW-Pk; Tue, 05 Jul 2016 15:12:21 +0000 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bKS1K-0007LW-BW for linux-arm-kernel@lists.infradead.org; Tue, 05 Jul 2016 15:12:18 +0000 Received: by mail-pf0-x244.google.com with SMTP id 66so19294024pfy.1 for ; Tue, 05 Jul 2016 08:11:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=w74HI9rmcZwaj5EQLJ9s3Dp6+0Yn6O/fy+/W8x2q72Q=; b=Mg2YIoIp8MhTHhRGF1hhlURetU364lSv96P35ucphZg9dBdKeD3usgkGOAM8ghpH4r DPi/2JfqPiWWeRzFZrY7AqtlyfWnqP2n6uMMcuGAVSubv2c9CK+yDhXCgjdPr5ccjgQu DxY2GXyqGOpyjnGduqPRXnjbH01Lg8dzxdA2o/xQEkGT7DnOAFIhd8BaoZ5ZBcBE0zDM 1x0lZuIpoL0luqKKdiAalHKr6yxdj3a2oHDVyWTLHcAmd0ksd0e6/PeeAX8T0WkJJdc9 fyJ7vk15Zguwy/rWai+jAvChDIZvdOgUGKU3amqB7F2cDxmX0RxjccvD+cYJD8fmLiAU Z1YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=w74HI9rmcZwaj5EQLJ9s3Dp6+0Yn6O/fy+/W8x2q72Q=; b=S2kJ2BtMcGf4z16nYXuBqAIOUrmteSsW/h0sGbl8jKAiYKgpVXsfFdcwhWAfmxrCbW GjCpgFSzjF2tMhuSDCKoKsX5f020DbzwkgWNXZklw4pFadyFvWFy8FIfI/7iUazW3YFE 2vKMUuknXy58UoZulCNNgkP+jNe17fv9QNXOSVOYU3Reu1kGDIBRPSQfj0e1VqZX+iQg rj3w6crG/12IU0qCXg8kah4q7D9IWjCMSys9SeIU8tP3j62JjIUaCCUg8VRWx1Ly9K30 JuLqR0wQLynjTlOpROZc3p4s/jSeNMWL7hrM375sB8SXygxM7yeZeAqnG4YsPmsGKFCe enMw== X-Gm-Message-State: ALyK8tJd7eRA6byav/mTh53Ikw8lH6QyEfXPLdrxtGBWhVW3hYcx+J/8eGwraC2UGiO1/A== X-Received: by 10.98.13.81 with SMTP id v78mr33557844pfi.91.1467731517043; Tue, 05 Jul 2016 08:11:57 -0700 (PDT) Received: from localhost.localdomain ([111.93.218.67]) by smtp.gmail.com with ESMTPSA id g63sm5823611pfb.7.2016.07.05.08.11.53 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 05 Jul 2016 08:11:56 -0700 (PDT) From: vijay.kilari@gmail.com To: marc.zyngier@arm.com, christoffer.dall@linaro.org Subject: [RFC PATCH v1] arm/arm64: vgic-new: Create dist and redist iodevs earlier Date: Tue, 5 Jul 2016 20:41:31 +0530 Message-Id: <1467731491-6458-1-git-send-email-vijay.kilari@gmail.com> X-Mailer: git-send-email 1.7.9.5 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160705_081218_428966_2EF9D293 X-CRM114-Status: GOOD ( 13.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Vijaya Kumar K , Prasun.Kapoor@cavium.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, Vijaya Kumar K MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Vijaya Kumar K The dist and redist regions are created and registered in vgic_register_dist_iodevs() and vgic_v3_init_redist_iodev() calls for distributor and redistributor respectively when vgic_v3_map_resources() is called. This mapping of resources is done when vcpu run ioctl is called. Below is the call stack of the same. [] vgic_register_redist_iodevs+0x94/0x27c [] vgic_v3_map_resources+0x138/0x188 [] kvm_vgic_map_resources+0xb0/0xb8 [] kvm_arch_vcpu_ioctl_run+0x4a8/0x550 [] kvm_vcpu_ioctl+0x304/0x74c [] do_vfs_ioctl+0xc0/0x754 [] SyS_ioctl+0x90/0xa4 [] el0_svc_naked+0x24/0x28 During live migration, the destination VM first restores the all the GIC registers(dist, rdist and cpuif registers) using ioctl's before resuming the VM.So no vcpu run ioctl is called untill complete GIC context is restored. Hence, In case of live migration, when ioctls are called to write dist/rdist registers the ioctls fails as vcpu->kvm->arch.vgic.dist_iodev andkvm->arch.vgic.redist_iodevs are NULL. In this patch, the distributor and redistributor regions are created as and when KVM_VGIC_V3_ADDR_TYPE_{DIST|REDIST} ioctl is called. However the vgic_v3_map_resouces() is still called when vcpu is executed, which validates the distributor and redistributor addresses. Ex: Check for overlap. Signed-off-by: Vijaya Kumar K --- virt/kvm/arm/vgic/vgic-kvm-device.c | 19 +++++++++++++++++++ virt/kvm/arm/vgic/vgic-v3.c | 12 ------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/virt/kvm/arm/vgic/vgic-kvm-device.c b/virt/kvm/arm/vgic/vgic-kvm-device.c index 0130c4b..cc843fe 100644 --- a/virt/kvm/arm/vgic/vgic-kvm-device.c +++ b/virt/kvm/arm/vgic/vgic-kvm-device.c @@ -101,6 +101,25 @@ int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write) *addr = *addr_ptr; } +#ifdef CONFIG_KVM_ARM_VGIC_V3 + switch (type) { + case KVM_VGIC_V3_ADDR_TYPE_DIST: + r = vgic_register_dist_iodev(kvm, vgic->vgic_dist_base, VGIC_V3); + if (r) { + kvm_err("Unable to register VGICv3 dist MMIO regions\n"); + goto out; + } + break; + case KVM_VGIC_V3_ADDR_TYPE_REDIST: + r = vgic_register_redist_iodevs(kvm, vgic->vgic_redist_base); + if (r) { + kvm_err("Unable to register VGICv3 redist MMIO regions\n"); + goto out; + } + break; + } +#endif + out: mutex_unlock(&kvm->lock); return r; diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c index 346b4ad..a149b35 100644 --- a/virt/kvm/arm/vgic/vgic-v3.c +++ b/virt/kvm/arm/vgic/vgic-v3.c @@ -267,18 +267,6 @@ int vgic_v3_map_resources(struct kvm *kvm) goto out; } - ret = vgic_register_dist_iodev(kvm, dist->vgic_dist_base, VGIC_V3); - if (ret) { - kvm_err("Unable to register VGICv3 dist MMIO regions\n"); - goto out; - } - - ret = vgic_register_redist_iodevs(kvm, dist->vgic_redist_base); - if (ret) { - kvm_err("Unable to register VGICv3 redist MMIO regions\n"); - goto out; - } - dist->ready = true; out: