From patchwork Wed Sep 25 18:49:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Stabellini X-Patchwork-Id: 11161255 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E50DE14E5 for ; Wed, 25 Sep 2019 18:51:13 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C2140222C1 for ; Wed, 25 Sep 2019 18:51:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="UR4FE0Nq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C2140222C1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none 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 1iDCMI-0004Hf-Cf; Wed, 25 Sep 2019 18:49:50 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iDCMH-0004HC-94 for xen-devel@lists.xen.org; Wed, 25 Sep 2019 18:49:49 +0000 X-Inumbo-ID: 35f05f26-dfc5-11e9-963a-12813bfff9fa Received: from mail.kernel.org (unknown [198.145.29.99]) by localhost (Halon) with ESMTPS id 35f05f26-dfc5-11e9-963a-12813bfff9fa; Wed, 25 Sep 2019 18:49:32 +0000 (UTC) Received: from localhost.localdomain (c-67-164-102-47.hsd1.ca.comcast.net [67.164.102.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 217CC21E6F; Wed, 25 Sep 2019 18:49:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569437371; bh=5xXIGuy/XtEPo+0vA+tnsgZgApozc5L9K3PziD9TZlw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UR4FE0NqXEvqiA4gda7v1aLcFHzk6JWbA0oMRkW+6UNkgosDuTWTNP+zjoQwDTGbT LSjGg7Eq23ITa4tviKVTwyI/yALNyohSEilv7T2iFQrsYGaDhPMFGzosApi/tJxwlq 4F4i08/xt9By9kgeWdkKm3xGVD6KBQwCQtJofmAg= From: Stefano Stabellini To: julien.grall@arm.com Date: Wed, 25 Sep 2019 11:49:23 -0700 Message-Id: <20190925184924.21691-7-sstabellini@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: Subject: [Xen-devel] [PATCH v5 7/8] xen/arm: introduce nr_spis 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: Stefano Stabellini , sstabellini@kernel.org, andrii_anisov@epam.com, Achin.Gupta@arm.com, xen-devel@lists.xen.org, Volodymyr_Babchuk@epam.com MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" We don't have a clear way to know how many virtual SPIs we need for the dom0-less domains. Introduce a new option under xen,domain to specify the number of SPIs to allocate for a domain. The property is optional. When absent, we'll use the physical number of GIC lines for dom0-less domains, just like for dom0. Remove the old setting of nr_spis based on the presence of the vpl011. The implication of this change is that without nr_spis dom0less domains get the same amount of SPI allocated as dom0, regardless of how many physical devices they have assigned, and regardless of whether they have a virtual pl011 (which also needs an emulated SPI). For instance, we could end up exposing 256 SPIs for each dom0less domain without a nr_spis property. If we have 4 dom0less domains without nr_spis, it would result in 80K of additional memory being used. When nr_spis is present, the domain gets exactly nr_spis allocated SPIs. If the number is too low, it might not be enough for the devices assigned it to it. If the number is less than GUEST_VPL011_SPI, the virtual pl011 won't work. Signed-off-by: Stefano Stabellini Reviewed-by: Volodymyr Babchuk --- Changes in v5: - improve commit message - allocate enough SPIs for vpl011 Changes in v4: - improve commit message Changes in v3: - improve commit message - introduce nr_spis --- xen/arch/arm/domain_build.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 414893bc24..bf4d960eb5 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -2345,7 +2345,6 @@ void __init create_domUs(void) struct domain *d; struct xen_domctl_createdomain d_cfg = { .arch.gic_version = XEN_DOMCTL_CONFIG_GIC_NATIVE, - .arch.nr_spis = 0, .flags = XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap | XEN_DOMCTL_CDF_iommu, .max_evtchn_port = -1, @@ -2356,13 +2355,23 @@ void __init create_domUs(void) if ( !dt_device_is_compatible(node, "xen,domain") ) continue; - if ( dt_property_read_bool(node, "vpl011") ) - d_cfg.arch.nr_spis = GUEST_VPL011_SPI - 32 + 1; - if ( !dt_property_read_u32(node, "cpus", &d_cfg.max_vcpus) ) panic("Missing property 'cpus' for domain %s\n", dt_node_name(node)); + if ( !dt_property_read_u32(node, "nr_spis", &d_cfg.arch.nr_spis) ) + { + d_cfg.arch.nr_spis = gic_number_lines() - 32; + + /* + * vpl011 uses one emulated SPI. If vpl011 is requested, make + * sure that we allocate enough SPIs for it. + */ + if ( dt_property_read_bool(node, "vpl011") ) + d_cfg.arch.nr_spis = MAX(d_cfg.arch.nr_spis, + GUEST_VPL011_SPI - 32 + 1); + } + d = domain_create(++max_init_domid, &d_cfg, false); if ( IS_ERR(d) ) panic("Error creating domain %s\n", dt_node_name(node));