From nobody Wed Aug 26 10:42:49 2026 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; dkim=pass; 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=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1783353548; cv=none; d=zohomail.com; s=zohoarc; b=KZtrevhODCzI5mmWa7SdetLEo6rUDOWcThuURvYNmoO04EA846z3bherhZU3RNu2XAo5siK/PapvX+P9A9L65/EDgPCFdVDiDUXxF7aDUirzJitGJz9EjImEg2rADU0k3WtVyqdARutc0dMCX5pbIW2650gka7YKR9vv4EfTEx8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783353548; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KUaoD57i3eG5vrKrWLrvtGucvmcW9ojWQ9m6U5XgH3E=; b=SPKHCZ6aIsvbqMu69fDHZdm66VoO2YNUq2Y8NSL66F5GNSzEckRk2gN1knTxZ4aMtq7PgmVPC8aG0dFb3KiCRMSBhF627hkkkSY9JWHQfWNKNcIEKJu+Fu4BvzYT2jkgQupzXgWEx4qb8bGrqmimmjEnnF+nc88K59xdVJevnMk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1783353548158582.3550855735594; Mon, 6 Jul 2026 08:59:08 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1355500.1610351 (Exim 4.92) (envelope-from ) id 1wgliM-0000UF-RI; Mon, 06 Jul 2026 15:58:34 +0000 Received: by outflank-mailman (output) from mailman id 1355500.1610351; Mon, 06 Jul 2026 15:58:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wgliM-0000Ry-M2; Mon, 06 Jul 2026 15:58:34 +0000 Received: by outflank-mailman (input) for mailman id 1355500; Mon, 06 Jul 2026 15:58:33 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wgliL-0000JL-JR for xen-devel@lists.xenproject.org; Mon, 06 Jul 2026 15:58:33 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wgliL-00AcTL-0K for xen-devel@lists.xenproject.org; Mon, 06 Jul 2026 17:58:33 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4bd09e-5cb7-0a2a0a5109dd-0a2a4509a9ae-10 for ; Mon, 06 Jul 2026 17:58:32 +0200 Received: from [209.85.128.46] (helo=mail-wm1-f46.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4bd0a8-97e6-0a2a45090019-d155802ed9ea-3 for ; Mon, 06 Jul 2026 17:58:32 +0200 Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-493c486f012so13701865e9.3 for ; Mon, 06 Jul 2026 08:58:32 -0700 (PDT) Received: from fedora (user-109-243-144-234.play-internet.pl. [109.243.144.234]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-493cce03fa1sm284910325e9.11.2026.07.06.08.58.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Jul 2026 08:58:31 -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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783353512; x=1783958312; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KUaoD57i3eG5vrKrWLrvtGucvmcW9ojWQ9m6U5XgH3E=; b=BfGfYPuGjF9KV41z8atdAB3O+2og8t0CuOcNymD/zHoq1BHKJDcSmUNb/eAh97ZR6C BkwUxL+tisCmEql568JMe3wTbfpUgsNwy8DqVEUKr0ys6LMbg2vH0/nDMVZupWQ5Qe4L wzgtsgl1M1TqO84qrJGg4c7ciKXU75Ra0I/S1dT98WW7TGFucAviOFkPRVr8DnqBbXfe sk0EO3K9KOkt0JEFt6vlSGQ4Fjqh4fu5xOCZLyvjs8Fr8erFDc7vZuiz88muhF+kIGsr 6XYX4zVxjJJmVC3Tu7JAwbS+WxaioiIyByLpSVGHBdhzjU4gtj6mwz85jxr1w1xkMVA/ +6tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783353512; x=1783958312; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=KUaoD57i3eG5vrKrWLrvtGucvmcW9ojWQ9m6U5XgH3E=; b=BMXtFheM3fpiy/BWoUnE/iYdVMwm7Amna8tq6DM47YPiFIuFW3f/KbeWaoPiCC/iAu yjkEMR/MZWXlAtNs+4nZtQdSuoNFtOeDBWWF/ie6OXUFd5KcsSHwUuA8TedNKiAI0DT2 Dgp5Kk/f0Tx0UK1wRm9jxBukeX748RNflMq0C6VUANPDsxC9uR5eyzvRUQxJmExdbvJF Ho1yi+5mji3i6ISZtyxXi/ZIegcmLAsPuH5zgQACRa+CmfgKTBiRiY8b55vWnCpKHMSZ jGMi++8c7F73hdKQLimHtb2TSxd0ZHYhwIUyBtWDjnTCYvALXs+ylV3R9zTqVC54QS83 x9fA== X-Gm-Message-State: AOJu0YzXMdxoHM3yZjFpO8ACQKIGd7VCD1i0+aamKZmptFY2dcYrC2cw UkRdcDXsXYJ8b1LZ3JKMpGIq9QacSkVilsHsiDi9S7JX/vLxcxF/0ONAe2m7DQ== X-Gm-Gg: AfdE7ckyp3fKQU16R9nDC8DIMPBYff6OxdnfjQSHrv1Umww/SV9txQdX+AhGwtYh+Sj Cx6aN1YaLbNg9jfOdy9Ye49hAjPVcLKjt/VYgjhyFltUntIpUzfD981ELxiK1xflN6X9r8TFS0S wdsIGVHqqkjKdytU2ffFc14FTA5b21pZw0EHKSe7NTrO/TlIJ/AAe3jch6W6yRq/m+4y88Hzyt9 8RsAhofFBC4aY2DaXGRd6SKNGwPAJdw98tUvOekq8mmifEa3xtHgkJPMcOszaCJ/m6IBxGT+MP9 xnZAh1ApyE8pk8YewBH7k+Qiq60BeRseONpeDK2WfN5WTUmlI6LpL7nphxdcPypa/AjifPrVbY8 l9c6B5PeWl9kqC7/KwdcdFPDj0BpEPey2k2a9axFqTiHSbYxTScVXsYdM94vPplbnN+lfOvEsWF F1Ii92w3tbEl+KDDs9x2zYI/Smd+ZxfDvlEKWK+6/jxMwmy21YsUcE6s+d+w== X-Received: by 2002:a05:600c:6995:b0:493:bcef:5646 with SMTP id 5b1f17b1804b1-493df06ec87mr13987345e9.12.1783353512181; Mon, 06 Jul 2026 08:58:32 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Baptiste Le Duc , Oleksii Kurochko , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini , Alistair Francis , Connor Davis Subject: [PATCH v5 10/26] xen/riscv: implement make_cpus_node() Date: Mon, 6 Jul 2026 17:57:51 +0200 Message-ID: X-Mailer: git-send-email 2.54.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-bad1c0/1783353512-46F3D986-F00E2489/10/73395122804 X-purgate-type: spam X-purgate-size: 12770 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1783353548723158500 Content-Type: text/plain; charset="utf-8" Implement make_cpus_node() to create cpus node for a guest domain. This function is going to be use by common dom0less code during construction domain. Signed-off-by: Oleksii Kurochko Acked-by: Jan Beulich --- Changes in v5: - Drop Acked-by: Jan Beulich as extra changes were done because of the changed in prev. patch. - Move isa_str allocation and construction out of arch_domain_create() and into make_cpus_node() as a local variable, since the string is only needed during FDT generation. Use a two-call build_guest_isa_str() pattern (size probe, then fill) with xvmalloc_array, and convert all post-allocation error returns to goto out so xvfree() runs on every path. --- Changes in v4: - Update the comment in make_cpus_node() to match code style. - Add Acked-by: Jan Beulich . --- Changes in v3: - Add blank line above make_cpus_node() function definition. - Move 'unsigned int cpu' from function-level declarations into the for lo= op. - Drop 'uint32_t reg =3D cpu_to_fdt32(cpu)'; use fdt_property_cell(fdt, "r= eg", cpu) instead of fdt_property(fdt, "reg", ®, sizeof(reg)) so byte-order adj= ustment is handled internally. - Add matching /* interrupt-controller */ start comment; fix end comment to /* end interrupt-controller */. - Update d->arch.guest_isa_str to ->isa_str in make_cpus_node() function. --- Changes in v2: - s/u32/uint32_t for timebase_frequency local variable. - Drop +1 from BUILD_BUG_ON(). - return fdt_end_node(fdt); instead of res at the end of the function. --- --- build/tools/fixdep | Bin 0 -> 13632 bytes xen/arch/riscv/domain-build.c | 125 ++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100755 build/tools/fixdep diff --git a/build/tools/fixdep b/build/tools/fixdep new file mode 100755 index 0000000000000000000000000000000000000000..42233e2669e9cdaf1c31723ad22= c00f6c9291f7c GIT binary patch literal 13632 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 X!V-7*S$v5Ihst>tURt71Lc;$7AAVAt literal 0 HcmV?d00001 diff --git a/xen/arch/riscv/domain-build.c b/xen/arch/riscv/domain-build.c index 5f6f4b6248a5..33cd1ea80f39 100644 --- a/xen/arch/riscv/domain-build.c +++ b/xen/arch/riscv/domain-build.c @@ -3,8 +3,11 @@ #include #include #include +#include #include +#include =20 +#include #include #include =20 @@ -48,3 +51,125 @@ int __init construct_domain(struct domain *d, struct ke= rnel_info *kinfo) =20 return 0; } + +int __init make_cpus_node(const struct domain *d, struct kernel_info *kinf= o) +{ + int res; + const struct dt_device_node *cpus =3D dt_find_node_by_path("/cpus"); + uint32_t timebase_frequency; + bool frequency_valid; + void *fdt =3D kinfo->fdt; + char *isa_str; + int len; + + dt_dprintk("Create cpus node\n"); + + if ( !cpus ) + { + dprintk(XENLOG_ERR, "Missing /cpus node in the device tree?\n"); + return -ENOENT; + } + + frequency_valid =3D dt_property_read_u32(cpus, "timebase-frequency", + &timebase_frequency); + + if ( (len =3D build_guest_isa_str(NULL, 0, d->arch.isa)) < 0 ) + return len; + + if ( !(isa_str =3D xvmalloc_array(char, len + 1)) ) + return -ENOMEM; + + if ( build_guest_isa_str(isa_str, len + 1, d->arch.isa) !=3D len ) + { + res =3D -EINVAL; + goto out; + } + + res =3D fdt_begin_node(fdt, "cpus"); + if ( res ) + goto out; + + res =3D fdt_property_cell(fdt, "#address-cells", 1); + if ( res ) + goto out; + + res =3D fdt_property_cell(fdt, "#size-cells", 0); + if ( res ) + goto out; + + if ( frequency_valid ) + res =3D fdt_property_cell(fdt, "timebase-frequency", timebase_freq= uency); + + for ( unsigned int cpu =3D 0; cpu < d->max_vcpus; cpu++ ) + { + char buf[64]; + + snprintf(buf, sizeof(buf), "cpu@%u", cpu); + res =3D fdt_begin_node(fdt, buf); + if ( res ) + goto out; + + res =3D fdt_property_cell(fdt, "reg", cpu); + if ( res ) + goto out; + + res =3D fdt_property_string(fdt, "status", "okay"); + if ( res ) + goto out; + + res =3D fdt_property_string(fdt, "compatible", "riscv"); + if ( res ) + goto out; + + BUILD_BUG_ON((sizeof("riscv,") + + sizeof_field(struct gstage_mode_desc, name)) >=3D si= zeof(buf)); + snprintf(buf, sizeof(buf), "riscv,%s", max_gstage_mode->name); + res =3D fdt_property_string(fdt, "mmu-type", buf); + if ( res ) + goto out; + + res =3D fdt_property_string(fdt, "riscv,isa", isa_str); + if ( res ) + goto out; + + res =3D fdt_property_string(fdt, "device_type", "cpu"); + if ( res ) + goto out; + + /* Start of interrupt-controller */ + res =3D fdt_begin_node(fdt, "interrupt-controller"); + if ( res ) + goto out; + + res =3D fdt_property_string(fdt, "compatible", "riscv,cpu-intc"); + if ( res ) + goto out; + + res =3D fdt_property_cell(fdt, "#interrupt-cells", 1); + if ( res ) + goto out; + + res =3D fdt_property(fdt, "interrupt-controller", NULL, 0); + if ( res ) + goto out; + + res =3D fdt_property_u32(fdt, "phandle", alloc_phandle(kinfo)); + if ( res ) + goto out; + + /* End of interrupt-controller */ + res =3D fdt_end_node(fdt); + if ( res ) + goto out; + + res =3D fdt_end_node(fdt); + if ( res ) + goto out; + } + + res =3D fdt_end_node(fdt); + + out: + xvfree(isa_str); + return res; +} --=20 2.54.0