From nobody Tue Oct 28 01:50:35 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1522162437504243.67732504466528; Tue, 27 Mar 2018 07:53:57 -0700 (PDT) Received: from localhost ([::1]:34534 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f0pQB-0005Tq-5s for importer@patchew.org; Tue, 27 Mar 2018 10:17:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f0pOJ-0003Ek-1Y for qemu-devel@nongnu.org; Tue, 27 Mar 2018 10:16:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f0pOH-0006k9-Vq for qemu-devel@nongnu.org; Tue, 27 Mar 2018 10:15:59 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:51278 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f0pOA-0006cI-9j; Tue, 27 Mar 2018 10:15:50 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DC2DE722C5; Tue, 27 Mar 2018 14:15:49 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-135.ams2.redhat.com [10.36.116.135]) by smtp.corp.redhat.com (Postfix) with ESMTP id 482C16F9E6; Tue, 27 Mar 2018 14:15:45 +0000 (UTC) From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, qemu-devel@nongnu.org, qemu-arm@nongnu.org, peter.maydell@linaro.org Date: Tue, 27 Mar 2018 16:15:19 +0200 Message-Id: <1522160122-10744-6-git-send-email-eric.auger@redhat.com> In-Reply-To: <1522160122-10744-1-git-send-email-eric.auger@redhat.com> References: <1522160122-10744-1-git-send-email-eric.auger@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 27 Mar 2018 14:15:49 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 27 Mar 2018 14:15:49 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'eric.auger@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [RFC 5/8] hw/intc/arm_gicv3_kvm: Allow multiple redistributor regions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: wei@redhat.com, marc.zyngier@arm.com, drjones@redhat.com, cdall@kernel.org, zhaoshenglong@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If the host kernel supports it, let's allow the regitration of more than one redistributor region through the new GICv3 group/attribute: KVM_DEV_ARM_VGIC_GRP_ADDR/KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION. In that case we don't use kvm_arm_register_device anymore. this latter registers the kvm device memory listener which resolves the absolute gpa of the base address in kvm_arm_devlistener_add(). Then kvm_arm_set_device_addr() is called on machine init done and invokes the ioctl with the resolved absolute GPA. In our case we know the absolute GPA at registration time and the attribute value needs to be combined with the region index and size of the region. So this does not nicely fit the current infrastructure. Signed-off-by: Eric Auger --- hw/intc/arm_gicv3_kvm.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c index b6a3faf..811d809 100644 --- a/hw/intc/arm_gicv3_kvm.c +++ b/hw/intc/arm_gicv3_kvm.c @@ -789,14 +789,21 @@ static int kvm_arm_gicv3_register_redist_region(GICv3= State *s, hwaddr base, uint32_t count) { SysBusDevice *sbd =3D SYS_BUS_DEVICE(s); + bool multiple_redist_region_allowed; int n =3D s->nb_redist_regions; + Error **local_err =3D NULL; char *name; + int ret; =20 if (!s->dev_fd) { return -ENODEV; } =20 - if (n > 0) { + multiple_redist_region_allowed =3D + kvm_device_check_attr(s->dev_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION); + + if (n > 0 && !multiple_redist_region_allowed) { return -EINVAL; } =20 @@ -808,15 +815,28 @@ static int kvm_arm_gicv3_register_redist_region(GICv3= State *s, hwaddr base, NULL, s, name, count * 0x20000); sysbus_init_mmio(sbd, &s->redist_region[n].mr); =20 - kvm_arm_register_device(&s->redist_region[n].mr, -1, - KVM_DEV_ARM_VGIC_GRP_ADDR, - KVM_VGIC_V3_ADDR_TYPE_REDIST, s->dev_fd); - + if (!multiple_redist_region_allowed) { + /* use the legacy API */ + kvm_arm_register_device(&s->redist_region[n].mr, -1, + KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST, s->dev_fd); + } else { + uint64_t val =3D base | n; + + val =3D deposit64(val, 52, 12, count); + ret =3D kvm_device_access(s->dev_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, + &val, true, local_err); + if (ret) { + goto out; + } + } sysbus_mmio_map(sbd, n + 1, base); /* first region is DIST */ =20 s->nb_redist_regions++; +out: g_free(name); - return 0; + return ret; } =20 static void kvm_arm_gicv3_class_init(ObjectClass *klass, void *data) --=20 2.5.5