From patchwork Tue Sep 4 19:21:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 145949 Delivered-To: patch@linaro.org Received: by 2002:a2e:1648:0:0:0:0:0 with SMTP id 8-v6csp4051905ljw; Tue, 4 Sep 2018 12:24:34 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaSkL2GM8ppvZYf9uVJaxxL37ZDPaPgePbjCyKdflcfIh+i4LVBRz3XMt4oAYObTlOtsJMW X-Received: by 2002:a37:f50f:: with SMTP id l15-v6mr29251903qkk.251.1536089074742; Tue, 04 Sep 2018 12:24:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536089074; cv=none; d=google.com; s=arc-20160816; b=TuOrLL0Z+v6Rv4CrcvbS5ZXJekoyNP/S39IUl+sQx1GcSLGxa3K+xFwDbnrZNJbnJ6 dqf5mLSYl3I7AsjuojGaHXI6m2V8UzQFUkLhO+5IplrNIbPw7Kcv/AfDgLjQn2OfK2EA S6oUIcU6S2AYIqXi3I9lZSAw9n6GN9H7mLPuZ7w3rGGLtl8ZvlcJDSG5iXoK9PfIM4rE QOx/V6lzSVMSY69Aq7kLcpKm6hflIwgu6/tS92wICLX6YaskVK64WUqpSYWwCpYdC5EC ZipTw9pdrdDFYpvW/gmXixVzkrqh0AIDq8CPr5r6RNyEM6dWk8hRp/Gle+f0nZgYZQFk rabg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:references:in-reply-to:message-id:date:to:from :arc-authentication-results; bh=l6DpgYTUfVRNE3ktWpPBgSGRjB0fggzrtL8MgQoDCEA=; b=JLUZHH9+64KxtLgX52WiK2rU6jN06MmNtgsB/0v6HFnCpmHqdJtyVkakvp3/pdnRgV 8HMIJPuOv7hr1EHO869jzbaciCicmileHTxsahVUW96MWXctf9aLVQXXgJH68l6/i3Os wUY2dXTpPeQMaO4QH5D5z3aZzNww5xNwb62cC23HS5BUDTNSbsjm1SXTDmS++beQxMQb GNSQPpcYw6I2PkBKviA27fb5Yer9kwSFGZrIery6vzfgU4JuPOX//iHWk/Eb4HeWblup 1zfaC+OZggdTNOxv5U5vdb4lv35CnI3BwHYxMT9rKGiKFMLE5+f7stSwydysJMhHELJR DZiQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id m187-v6si3422914qkb.191.2018.09.04.12.24.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 04 Sep 2018 12:24:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fxGtp-0005Qj-B3; Tue, 04 Sep 2018 19:22:05 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fxGtn-0005QR-Pd for xen-devel@lists.xenproject.org; Tue, 04 Sep 2018 19:22:03 +0000 X-Inumbo-ID: ea137df4-b077-11e8-a6a9-d7ebe60f679a Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas1.inumbo.com (Halon) with ESMTP id ea137df4-b077-11e8-a6a9-d7ebe60f679a; Tue, 04 Sep 2018 19:22:51 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B458F1596; Tue, 4 Sep 2018 12:22:01 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.emea.arm.com [10.4.12.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 826DC3F575; Tue, 4 Sep 2018 12:22:00 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 4 Sep 2018 20:21:51 +0100 Message-Id: <20180904192153.17210-2-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180904192153.17210-1-julien.grall@arm.com> References: <20180904192153.17210-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 1/3] [not-for-unstable] xen/arm: vgic-v3: Delay the initialization of the domain information X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: andre.przywara@arm.com, Julien Grall , sstabellini@kernel.org, shameerali.kolothum.thodi@huawei.com, Andrew Cooper MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" A follow-up patch will require to know the number of vCPUs when initializating the vGICv3 domain structure. However this information is not available at domain creation. This is only known once XEN_DOMCTL_max_vpus is called for that domain. In order to get the max vCPUs around, delay the domain part of the vGIC v3 initialization until the first vCPU of the domain is initialized. Signed-off-by: Julien Grall --- Cc: Andrew Cooper This is nasty but I can't find a better way for Xen 4.11 and older. This is not necessary for unstable as the number of vCPUs is known at domain creation. Andrew, I have CCed you to know whether you have a better idea where to place this call on Xen 4.11 and older. --- xen/arch/arm/vgic-v3.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c index 4b42739a52..df1bab3a35 100644 --- a/xen/arch/arm/vgic-v3.c +++ b/xen/arch/arm/vgic-v3.c @@ -1573,9 +1573,11 @@ static const struct mmio_handler_ops vgic_distr_mmio_handler = { .write = vgic_v3_distr_mmio_write, }; +static int vgic_v3_real_domain_init(struct domain *d); + static int vgic_v3_vcpu_init(struct vcpu *v) { - int i; + int i, rc; paddr_t rdist_base; struct vgic_rdist_region *region; unsigned int last_cpu; @@ -1584,6 +1586,19 @@ static int vgic_v3_vcpu_init(struct vcpu *v) struct domain *d = v->domain; /* + * This is the earliest place where the number of vCPUs is + * known. This is required to initialize correctly the vGIC v3 + * domain structure. We only to do that when vCPU 0 is + * initilialized. + */ + if ( v->vcpu_id == 0 ) + { + rc = vgic_v3_real_domain_init(d); + if ( rc ) + return rc; + } + + /* * Find the region where the re-distributor lives. For this purpose, * we look one region ahead as we have only the first CPU in hand. */ @@ -1641,7 +1656,7 @@ static inline unsigned int vgic_v3_rdist_count(struct domain *d) GUEST_GICV3_RDIST_REGIONS; } -static int vgic_v3_domain_init(struct domain *d) +static int vgic_v3_real_domain_init(struct domain *d) { struct vgic_rdist_region *rdist_regions; int rdist_count, i, ret; @@ -1733,6 +1748,16 @@ static int vgic_v3_domain_init(struct domain *d) return 0; } +static int vgic_v3_domain_init(struct domain *d) +{ + /* + * The domain initialization for vGIC v3 is delayed until the first vCPU + * is created. This because the initialization may require to know the + * number of vCPUs that is not known when creating the domain. + */ + return 0; +} + static void vgic_v3_domain_free(struct domain *d) { vgic_v3_its_free_domain(d);