From nobody Sat Nov 30 01:30:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1618224809; cv=none; d=zohomail.com; s=zohoarc; b=LnnqxVeNqXKHHt9rWhl8GRNw7EWTLg7n4PMs6rmsZJmElF9QASPRYaPJtfhpLS00hT6jF3QKogbV7m/DyFgHBmUhNA/InX1HG8gNZRvT3gd0MCOpRooC+LgyPjhXZab8Jcn2nPyZjwShaoqF4qLeXdWigeObl2UcIh7mnyC+IWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618224809; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=uq9l6yytKyjitM1CpErXQrKry0Gv1088Wor1QpcNSbE=; b=KHmuWYdl40ufBi1IPgiYPT+PYSelMq4HG8Gp8LTWzsG0W7n6LgRiHddIRJ8Mz3vhfbkOI0ZQaC/WyjOsfn9LGI4Zxj03Vr+wr06EWCiRg6XDZ5DXSD0QU8osoBMy8cAdQzIrdwCMiVHbGUeREtpmkmMua8mlKcm5qRNSyIW4CGA= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618224809313416.35129504226563; Mon, 12 Apr 2021 03:53:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.108961.207963 (Exim 4.92) (envelope-from ) id 1lVuBp-0000mL-Kz; Mon, 12 Apr 2021 10:53:09 +0000 Received: by outflank-mailman (output) from mailman id 108961.207963; Mon, 12 Apr 2021 10:53:09 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lVuBp-0000mC-Gw; Mon, 12 Apr 2021 10:53:09 +0000 Received: by outflank-mailman (input) for mailman id 108961; Mon, 12 Apr 2021 10:53:08 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lVuBo-0000hn-0H for xen-devel@lists.xenproject.org; Mon, 12 Apr 2021 10:53:08 +0000 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-rack-iad1.inumbo.com (Halon) with ESMTP id 0dfdfd44-22ae-4134-b6e0-b309473b5af6; Mon, 12 Apr 2021 10:53:02 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3AA52D6E; Mon, 12 Apr 2021 03:53:02 -0700 (PDT) Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com [10.1.197.16]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 52AEC3F694; Mon, 12 Apr 2021 03:53:01 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 0dfdfd44-22ae-4134-b6e0-b309473b5af6 From: Luca Fancellu To: xen-devel@lists.xenproject.org Cc: bertrand.marquis@arm.com, wei.chen@arm.com, Stefano Stabellini , Julien Grall , Volodymyr Babchuk Subject: [PATCH v3 1/4] xen/arm: Move dom0 creation in domain_build.c Date: Mon, 12 Apr 2021 11:52:40 +0100 Message-Id: <20210412105243.23354-2-luca.fancellu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210412105243.23354-1-luca.fancellu@arm.com> References: <20210412105243.23354-1-luca.fancellu@arm.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move dom0 creation and start from setup.c to domain_build.c on a dedicate function. Signed-off-by: Luca Fancellu Reviewed-by: Julien Grall --- v3 changes: - move create_dom0 function after construct_dom0 and make construct_dom0 static --- xen/arch/arm/domain_build.c | 38 ++++++++++++++++++++++++++++++++++++- xen/arch/arm/setup.c | 29 +--------------------------- xen/include/asm-arm/setup.h | 2 +- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 374bf655ee..359957dc1b 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -2520,7 +2521,7 @@ void __init create_domUs(void) } } =20 -int __init construct_dom0(struct domain *d) +static int __init construct_dom0(struct domain *d) { struct kernel_info kinfo =3D {}; int rc; @@ -2578,6 +2579,41 @@ int __init construct_dom0(struct domain *d) return construct_domain(d, &kinfo); } =20 +struct domain* __init create_dom0(void) +{ + struct domain *dom0; + struct xen_domctl_createdomain dom0_cfg =3D { + .flags =3D XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap, + .max_evtchn_port =3D -1, + .max_grant_frames =3D gnttab_dom0_frames(), + .max_maptrack_frames =3D -1, + }; + + /* The vGIC for DOM0 is exactly emulating the hardware GIC */ + dom0_cfg.arch.gic_version =3D XEN_DOMCTL_CONFIG_GIC_NATIVE; + /* + * Xen vGIC supports a maximum of 992 interrupt lines. + * 32 are substracted to cover local IRQs. + */ + dom0_cfg.arch.nr_spis =3D min(gic_number_lines(), (unsigned int) 992) = - 32; + if ( gic_number_lines() > 992 ) + printk(XENLOG_WARNING "Maximum number of vGIC IRQs exceeded.\n"); + dom0_cfg.arch.tee_type =3D tee_get_type(); + dom0_cfg.max_vcpus =3D dom0_max_vcpus(); + + if ( iommu_enabled ) + dom0_cfg.flags |=3D XEN_DOMCTL_CDF_iommu; + + dom0 =3D domain_create(0, &dom0_cfg, true); + if ( IS_ERR(dom0) || (alloc_dom0_vcpu0(dom0) =3D=3D NULL) ) + panic("Error creating domain 0\n"); + + if ( construct_dom0(dom0) !=3D 0) + panic("Could not set up DOM0 guest OS\n"); + + return dom0; +} + /* * Local variables: * mode: C diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 2532ec9739..b405f58996 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -51,7 +51,6 @@ #include #include #include -#include #include #include =20 @@ -805,12 +804,6 @@ void __init start_xen(unsigned long boot_phys_offset, const char *cmdline; struct bootmodule *xen_bootmodule; struct domain *dom0; - struct xen_domctl_createdomain dom0_cfg =3D { - .flags =3D XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap, - .max_evtchn_port =3D -1, - .max_grant_frames =3D gnttab_dom0_frames(), - .max_maptrack_frames =3D -1, - }; int rc; =20 dcache_line_bytes =3D read_dcache_line_bytes(); @@ -965,27 +958,7 @@ void __init start_xen(unsigned long boot_phys_offset, enable_errata_workarounds(); =20 /* Create initial domain 0. */ - /* The vGIC for DOM0 is exactly emulating the hardware GIC */ - dom0_cfg.arch.gic_version =3D XEN_DOMCTL_CONFIG_GIC_NATIVE; - /* - * Xen vGIC supports a maximum of 992 interrupt lines. - * 32 are substracted to cover local IRQs. - */ - dom0_cfg.arch.nr_spis =3D min(gic_number_lines(), (unsigned int) 992) = - 32; - if ( gic_number_lines() > 992 ) - printk(XENLOG_WARNING "Maximum number of vGIC IRQs exceeded.\n"); - dom0_cfg.arch.tee_type =3D tee_get_type(); - dom0_cfg.max_vcpus =3D dom0_max_vcpus(); - - if ( iommu_enabled ) - dom0_cfg.flags |=3D XEN_DOMCTL_CDF_iommu; - - dom0 =3D domain_create(0, &dom0_cfg, true); - if ( IS_ERR(dom0) || (alloc_dom0_vcpu0(dom0) =3D=3D NULL) ) - panic("Error creating domain 0\n"); - - if ( construct_dom0(dom0) !=3D 0) - panic("Could not set up DOM0 guest OS\n"); + dom0 =3D create_dom0(); =20 heap_init_late(); =20 diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h index 28bf622aa1..5283244015 100644 --- a/xen/include/asm-arm/setup.h +++ b/xen/include/asm-arm/setup.h @@ -93,8 +93,8 @@ void acpi_create_efi_mmap_table(struct domain *d, =20 int acpi_make_efi_nodes(void *fdt, struct membank tbl_add[]); =20 -int construct_dom0(struct domain *d); void create_domUs(void); +struct domain* create_dom0(void); =20 void discard_initial_modules(void); void fw_unreserved_regions(paddr_t s, paddr_t e, --=20 2.17.1 From nobody Sat Nov 30 01:30:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1618224805; cv=none; d=zohomail.com; s=zohoarc; b=hZumK4baAbiKW5DyuYzz8kt3wLI98W6Ef0HlkDEXzqSnNdROJu5Cw9FN7muxeuuQce9xl4AVIAZvaT2wBRqNxGqEqPw0qovko9hPPWiVKZOt/4Bf/EltuhbGLOxA+7GY+9Rj1tRjhg0qBwCsEhYtAs1eRTgBBAHWqkZxN1blR0k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618224805; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=UWJcgx2d+vTlFT/q1L5wxBraeNqMzqJrKBbhz6ONzRI=; b=FVb7JBGyDytQZ31xEuErLx1Xv8LqbVZX6OekaczOjkGdc5nmluqA6/1ARHZeKSCDD4lZx/4EIBGADLGrwoUuxIQg9ip2+IRCs3zkYw7Y58QwuIap/t2HhlE2eJrP8u2Wk5LF3DBGmjBNBBfn5kyUppQ+sbZNqIEb71S0cIpOi0M= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618224805091890.9365106088841; Mon, 12 Apr 2021 03:53:25 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.108960.207950 (Exim 4.92) (envelope-from ) id 1lVuBn-0000js-BD; Mon, 12 Apr 2021 10:53:07 +0000 Received: by outflank-mailman (output) from mailman id 108960.207950; Mon, 12 Apr 2021 10:53:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lVuBn-0000jl-7h; Mon, 12 Apr 2021 10:53:07 +0000 Received: by outflank-mailman (input) for mailman id 108960; Mon, 12 Apr 2021 10:53:05 +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.92) (envelope-from ) id 1lVuBl-0000jA-MG for xen-devel@lists.xenproject.org; Mon, 12 Apr 2021 10:53:05 +0000 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id 36946a84-f473-4f29-99fd-a68ce6a6bc01; Mon, 12 Apr 2021 10:53:04 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0130EED1; Mon, 12 Apr 2021 03:53:04 -0700 (PDT) Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com [10.1.197.16]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6EE903F694; Mon, 12 Apr 2021 03:53:02 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 36946a84-f473-4f29-99fd-a68ce6a6bc01 From: Luca Fancellu To: xen-devel@lists.xenproject.org Cc: bertrand.marquis@arm.com, wei.chen@arm.com, Stefano Stabellini , Julien Grall , Volodymyr Babchuk , Andrew Cooper , George Dunlap , Ian Jackson , Jan Beulich , Wei Liu , Rahul Singh Subject: [PATCH v3 2/4] xen/arm: Handle cases when hardware_domain is NULL Date: Mon, 12 Apr 2021 11:52:41 +0100 Message-Id: <20210412105243.23354-3-luca.fancellu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210412105243.23354-1-luca.fancellu@arm.com> References: <20210412105243.23354-1-luca.fancellu@arm.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The function is_hardware_domain() returns true if the hardware_domain and the passed domain is NULL, here we add a check to return false if there is no hardware_domain. Among the common and arm codebase there are few cases where the hardware_domain variable is checked to see if the current domain is equal to the hardware_domain, change this cases to use is_hardware_domain() function instead. Signed-off-by: Luca Fancellu --- v3 changes: - removed unneeded parenthesis for macro is_domain_direct_mapped - is_hardware_domain() checks for the passed domain and if it is NULL, it returns false. - reverted back checks in the function late_hwdom_init --- xen/arch/arm/irq.c | 2 +- xen/drivers/passthrough/arm/ipmmu-vmsa.c | 2 +- xen/drivers/passthrough/arm/smmu-v3.c | 2 +- xen/drivers/passthrough/arm/smmu.c | 2 +- xen/include/asm-arm/domain.h | 2 +- xen/include/xen/sched.h | 3 +++ 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c index b71b099e6f..b761d90c40 100644 --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -412,7 +412,7 @@ bool is_assignable_irq(unsigned int irq) */ bool irq_type_set_by_domain(const struct domain *d) { - return (d =3D=3D hardware_domain); + return is_hardware_domain(d); } =20 /* diff --git a/xen/drivers/passthrough/arm/ipmmu-vmsa.c b/xen/drivers/passthr= ough/arm/ipmmu-vmsa.c index aef358d880..8b8e3a00ba 100644 --- a/xen/drivers/passthrough/arm/ipmmu-vmsa.c +++ b/xen/drivers/passthrough/arm/ipmmu-vmsa.c @@ -1168,7 +1168,7 @@ static int ipmmu_reassign_device(struct domain *s, st= ruct domain *t, int ret =3D 0; =20 /* Don't allow remapping on other domain than hwdom */ - if ( t && t !=3D hardware_domain ) + if ( t && !is_hardware_domain(t) ) return -EPERM; =20 if ( t =3D=3D s ) diff --git a/xen/drivers/passthrough/arm/smmu-v3.c b/xen/drivers/passthroug= h/arm/smmu-v3.c index 53d150cdb6..d115df7320 100644 --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -3366,7 +3366,7 @@ static int arm_smmu_reassign_dev(struct domain *s, st= ruct domain *t, int ret =3D 0; =20 /* Don't allow remapping on other domain than hwdom */ - if (t && t !=3D hardware_domain) + if ( t && !is_hardware_domain(t) ) return -EPERM; =20 if (t =3D=3D s) diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/a= rm/smmu.c index 3e8aa37866..932fdfd6dd 100644 --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -2670,7 +2670,7 @@ static int arm_smmu_reassign_dev(struct domain *s, st= ruct domain *t, int ret =3D 0; =20 /* Don't allow remapping on other domain than hwdom */ - if (t && t !=3D hardware_domain) + if ( t && !is_hardware_domain(t) ) return -EPERM; =20 if (t =3D=3D s) diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h index 1da90f207d..0a74df9931 100644 --- a/xen/include/asm-arm/domain.h +++ b/xen/include/asm-arm/domain.h @@ -30,7 +30,7 @@ enum domain_type { #endif =20 /* The hardware domain has always its memory direct mapped. */ -#define is_domain_direct_mapped(d) ((d) =3D=3D hardware_domain) +#define is_domain_direct_mapped(d) is_hardware_domain(d) =20 struct vtimer { struct vcpu *v; diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 5485d08afb..5ba90f1214 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -1022,6 +1022,9 @@ static always_inline bool is_hardware_domain(const st= ruct domain *d) if ( IS_ENABLED(CONFIG_PV_SHIM_EXCLUSIVE) ) return false; =20 + if ( !d ) + return false; + return evaluate_nospec(d =3D=3D hardware_domain); } =20 --=20 2.17.1 From nobody Sat Nov 30 01:30:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1618224809; cv=none; d=zohomail.com; s=zohoarc; b=kCJzk4XzRCV+zpLjqVth27f/PFwERxGeM3okLMpHfjCn8v/Bb6hV2TFlo8feyLLNBzzMdJlnBOwA6vd/YA+N8zWR5yhXU5sUnL99GMLg/dsKHHsbfWb5c0TiqRusKd5qPlu6IQKADjOYnlDLWGNkPX1nQOKUithWvKjW6iZ50sM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618224809; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=GnesJ9CicCjTP/u5mIoSmC8D8Z18a4x3jHnzip6E8zg=; b=K2Hh0TYEM0gw0LtH5QUIHbpmXeMwoIarOFsbpGcQ1NG8dm5ML1z5zf1bguhsAxEnz0LclrX9sNQMMXS0GrWXVk1f3HXGlDUS7tO4LVUbd1D38vCKhZdAsXh2dY66fj7enuF+UsAD6WJQAXvXYRSBPtO7gafdXSNwCqIgEgD7cfk= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618224809504614.8823937759444; Mon, 12 Apr 2021 03:53:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.108962.207975 (Exim 4.92) (envelope-from ) id 1lVuBr-0000pD-Up; Mon, 12 Apr 2021 10:53:11 +0000 Received: by outflank-mailman (output) from mailman id 108962.207975; Mon, 12 Apr 2021 10:53:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lVuBr-0000p5-R7; Mon, 12 Apr 2021 10:53:11 +0000 Received: by outflank-mailman (input) for mailman id 108962; Mon, 12 Apr 2021 10:53:10 +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.92) (envelope-from ) id 1lVuBq-0000jA-Kz for xen-devel@lists.xenproject.org; Mon, 12 Apr 2021 10:53:10 +0000 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id fea0e1d6-044f-4d5b-b334-ffe3636f831e; Mon, 12 Apr 2021 10:53:05 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1A329D6E; Mon, 12 Apr 2021 03:53:05 -0700 (PDT) Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com [10.1.197.16]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 33BF53F694; Mon, 12 Apr 2021 03:53:04 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: fea0e1d6-044f-4d5b-b334-ffe3636f831e From: Luca Fancellu To: xen-devel@lists.xenproject.org Cc: bertrand.marquis@arm.com, wei.chen@arm.com, Stefano Stabellini , Julien Grall , Volodymyr Babchuk Subject: [PATCH v3 3/4] xen/arm: Reserve domid 0 for Dom0 Date: Mon, 12 Apr 2021 11:52:42 +0100 Message-Id: <20210412105243.23354-4-luca.fancellu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210412105243.23354-1-luca.fancellu@arm.com> References: <20210412105243.23354-1-luca.fancellu@arm.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch adds a comment in create_domUs() right before domain_create() to explain the importance of the pre-increment operator on the variable max_init_domid, to ensure that the domid 0 is allocated only during start_xen() function by the create_dom0() and not on any other possible code path to the domain_create() function. Signed-off-by: Luca Fancellu --- Changes in v3: - removed check introduced in v2. --- xen/arch/arm/domain_build.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 359957dc1b..b1d7b9849f 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -2508,6 +2508,11 @@ void __init create_domUs(void) GUEST_VPL011_SPI - 32 + 1); } =20 + /* + * The variable max_init_domid is initialized with zero, so here i= t's + * very important to use the pre-increment operator to call + * domain_create() with a domid > 0. (domid =3D=3D 0 is reserved f= or Dom0) + */ d =3D domain_create(++max_init_domid, &d_cfg, false); if ( IS_ERR(d) ) panic("Error creating domain %s\n", dt_node_name(node)); --=20 2.17.1 From nobody Sat Nov 30 01:30:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1618224812; cv=none; d=zohomail.com; s=zohoarc; b=Qd1QHk50iGv9PEjiju9M3b3PoRXiS0ojzz2g8cROlNzyS/oVScrcamBRSvn+2lJ51Sk2J7h+mgTLp7FF+8+vMUBB3qk+JYRJXazOUZEDG90HnnFIH9wW07PQTEXStwd67aFmFZOJzOSa2gcxUS0GWSiQNR1J6goyNySNaDdtQvI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618224812; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=B1XCkR7UOwjkTSldK6+uGOpmBvG9c/wNMCJ3hA8xYrY=; b=YeONJgroKpObC/mHYZ+TGX2xql1i1JY1RGLW2Z2IKYjvz2gNClvJghqFpz3FyFJDqq7HM4eGWHr6KPkh3FATdAlsRGg4csp7o+dPG9Uw9znm9cVrQEQq1uPgr5TZFuDLZ/tjZ1HgkSI0clSGZD+kqji3DEHDuC+5SnN+PpA8qug= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618224812595161.5637692733942; Mon, 12 Apr 2021 03:53:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.108963.207987 (Exim 4.92) (envelope-from ) id 1lVuBw-0000uQ-8I; Mon, 12 Apr 2021 10:53:16 +0000 Received: by outflank-mailman (output) from mailman id 108963.207987; Mon, 12 Apr 2021 10:53:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lVuBw-0000uH-4D; Mon, 12 Apr 2021 10:53:16 +0000 Received: by outflank-mailman (input) for mailman id 108963; Mon, 12 Apr 2021 10:53:15 +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.92) (envelope-from ) id 1lVuBv-0000jA-LE for xen-devel@lists.xenproject.org; Mon, 12 Apr 2021 10:53:15 +0000 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id 6d573b1c-907d-4ce0-8086-115865ba9ac3; Mon, 12 Apr 2021 10:53:07 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B9C07101E; Mon, 12 Apr 2021 03:53:06 -0700 (PDT) Received: from e125770.cambridge.arm.com (e125770.cambridge.arm.com [10.1.197.16]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4DC8C3F694; Mon, 12 Apr 2021 03:53:05 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 6d573b1c-907d-4ce0-8086-115865ba9ac3 From: Luca Fancellu To: xen-devel@lists.xenproject.org Cc: bertrand.marquis@arm.com, wei.chen@arm.com, Andrew Cooper , George Dunlap , Ian Jackson , Jan Beulich , Julien Grall , Stefano Stabellini , Wei Liu , Volodymyr Babchuk Subject: [PATCH v3 4/4] xen/arm: Prevent Dom0 to be loaded when using dom0less Date: Mon, 12 Apr 2021 11:52:43 +0100 Message-Id: <20210412105243.23354-5-luca.fancellu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210412105243.23354-1-luca.fancellu@arm.com> References: <20210412105243.23354-1-luca.fancellu@arm.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch prevents the dom0 to be loaded skipping its building and going forward to build domUs when the dom0 kernel is not found and at least one domU is present. Signed-off-by: Luca Fancellu Reviewed-by: Julien Grall --- v3 changes: - Rephrase documentation --- docs/features/dom0less.pandoc | 7 +++--- xen/arch/arm/setup.c | 42 ++++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/docs/features/dom0less.pandoc b/docs/features/dom0less.pandoc index d798596cdf..c9edb529e1 100644 --- a/docs/features/dom0less.pandoc +++ b/docs/features/dom0less.pandoc @@ -16,9 +16,10 @@ Multiboot specification has been extended to allow for m= ultiple domains to be passed to Xen. See docs/misc/arm/device-tree/booting.txt for more information about the Multiboot specification and how to use it. =20 -Currently, a control domain ("dom0") is still required, but in the -future it will become unnecessary when all domains are created -directly from Xen. Instead of waiting for the control domain to be fully +Currently, a control domain ("dom0") is still required to manage the DomU +domains, but the system can start also without dom0 if the Device Tree +doesn't specify the dom0 kernel and it declares one or more domUs. +Instead of waiting for the control domain (when declared) to be fully booted and the Xen tools to become available, domains created by Xen this way are started right away in parallel. Hence, their boot time is typically much shorter. diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index b405f58996..ecc4f0ae98 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -793,6 +793,38 @@ static void __init setup_mm(void) } #endif =20 +static bool __init is_dom0less_mode(void) +{ + struct bootmodules *mods =3D &bootinfo.modules; + struct bootmodule *mod; + unsigned int i; + bool dom0found =3D false; + bool domUfound =3D false; + + /* Look into the bootmodules */ + for ( i =3D 0 ; i < mods->nr_mods ; i++ ) + { + mod =3D &mods->module[i]; + /* Find if dom0 and domU kernels are present */ + if ( mod->kind =3D=3D BOOTMOD_KERNEL ) + { + if ( mod->domU =3D=3D false ) + { + dom0found =3D true; + break; + } + else + domUfound =3D true; + } + } + + /* + * If there is no dom0 kernel but at least one domU, then we are in + * dom0less mode + */ + return ( !dom0found && domUfound ); +} + size_t __read_mostly dcache_line_bytes; =20 /* C entry point for boot CPU */ @@ -803,7 +835,7 @@ void __init start_xen(unsigned long boot_phys_offset, int cpus, i; const char *cmdline; struct bootmodule *xen_bootmodule; - struct domain *dom0; + struct domain *dom0 =3D NULL; int rc; =20 dcache_line_bytes =3D read_dcache_line_bytes(); @@ -958,7 +990,10 @@ void __init start_xen(unsigned long boot_phys_offset, enable_errata_workarounds(); =20 /* Create initial domain 0. */ - dom0 =3D create_dom0(); + if ( !is_dom0less_mode() ) + dom0 =3D create_dom0(); + else + printk(XENLOG_INFO "Xen dom0less mode detected\n"); =20 heap_init_late(); =20 @@ -976,7 +1011,8 @@ void __init start_xen(unsigned long boot_phys_offset, if ( acpi_disabled ) create_domUs(); =20 - domain_unpause_by_systemcontroller(dom0); + if ( dom0 ) + domain_unpause_by_systemcontroller(dom0); =20 /* Switch on to the dynamically allocated stack for the idle vcpu * since the static one we're running on is about to be freed. */ --=20 2.17.1