From nobody Fri May 17 20:53:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1697659120; cv=none; d=zohomail.com; s=zohoarc; b=HhVObLr8SEk1FjmCLD4f/cFu8tb02xlhrlHzBmYEv47aFAQ7xtAfV/iH9ZsAP73RxmwjOYrtzm9pdIeYW6komI30uHKup1mjOzexFSbil2kyEy1oolTtWFqLfUE3XiQcfwuY8C9vv4cv+I85kLnsq2xMLvIDv63BQhYblCe22wE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697659120; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1OsZGdxkQKkRoawFPcxM1FRe0h/NoG7P+SX3RDkUQ3I=; b=U+H/RV+vjbjlld8P60LhCCVIFpcviwKK+waXms+EsjduSChLznDA5R7LnE43Jrzpel0egDIkZlFR3l2gVqxdtPJpEIJxr3zK5qSK6QUY+EsilQ/AyPyHWM1V6gi7l0exxDHQmNYstfTQdv+NwpOBsxgurZ8X1YjqwWA3JfmSpVQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 169765912058113.705397661710663; Wed, 18 Oct 2023 12:58:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qtCez-0003p7-PO; Wed, 18 Oct 2023 15:56:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qtCey-0003od-If for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:56:52 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qtCev-0001bV-Sy for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:56:52 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-5ae99bb5ccdso2970530a12.1 for ; Wed, 18 Oct 2023 12:56:49 -0700 (PDT) Received: from grind.dc1.ventanamicro.com ([177.45.186.249]) by smtp.gmail.com with ESMTPSA id ku12-20020a17090b218c00b00268b439a0cbsm256359pjb.23.2023.10.18.12.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:56:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1697659008; x=1698263808; darn=nongnu.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; bh=1OsZGdxkQKkRoawFPcxM1FRe0h/NoG7P+SX3RDkUQ3I=; b=pXCXsoHcsZvPhM9BSMjtpiRCw/NoslWHjaMO42XcoM+5o1KcPGmWPJc+1KOIJk3VLI 0sqtFXLXaap/aBu4a1N8Vt+/zZ6GvfK0PvHmfTwXcObrGlRehe+Lx4ZHoYn6r7W8Rdxr tc3PKd5FG0qvgOY9mhcMZXlxutgpRpvNWSUkcgkNGD/1yD1m3siXlQSNXzqhTXbToMW6 IbYyv1FsavaEdrMf18/+gg85aTlUGvJfcYAvFzr78MMFbj/jiHd7Wi4Wp+Ovq4lIkeMm S9yaJ+L59xf4f1UvHNiYUjHK0HDupWk0lGUyvo85WcVvqpESw/1XJY/qB4Z2HNsCDHzc /80A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697659008; x=1698263808; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1OsZGdxkQKkRoawFPcxM1FRe0h/NoG7P+SX3RDkUQ3I=; b=boYphWxLQWONOt/qursto1Gk/KBB8fCzziOTSdautR9dy0IYpeZ7qQgmPYK0dY7h4x A9xqaf5yqGvINKZtmtF6PegXZ+Z6Y/yMDlVTRz3rjJMlIQ1FWqIV6MSRmj+3Ymp+WSV4 r6FzXNjfpIp5Ul4qt/aqPLu04CG0oO4eGBRuBTLGw+OCEW2boAaHeLnVluHxf1P/kj1i MISybY0SZ3iUI1122/AH23pfvKpDUWvN4YqVlI1uxrLIHRjCltOk6q8C4MhD4gOhnbsm Oq+92730FNxEWnnFGfBdREv4vRAtRjgfpeWWhz0dLne1qX2duIm6zQ2K5azc3lKY2Hfc HU4Q== X-Gm-Message-State: AOJu0YwK4XLe6OjwWJ0Jnmq7VjpxkK8J1dtkyiYakyGjLlJOdVDtzsip 2vYdFqI6s9nhq98HgMCrnhJuIkt6mOli3zKD20k= X-Google-Smtp-Source: AGHT+IHZYcDk3bLlbcEkiU54FBovr+CphN628gRiBAdjqlBpBN8JbkIQa0VBxfsaZC7v1kv2uJGClw== X-Received: by 2002:a05:6a20:8409:b0:135:1af6:9a01 with SMTP id c9-20020a056a20840900b001351af69a01mr259631pzd.8.1697659007829; Wed, 18 Oct 2023 12:56:47 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, Daniel Henrique Barboza Subject: [PATCH v3 1/6] target/riscv/kvm/kvm-cpu.c: add missing property getters() Date: Wed, 18 Oct 2023 16:56:33 -0300 Message-ID: <20231018195638.211151-2-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231018195638.211151-1-dbarboza@ventanamicro.com> References: <20231018195638.211151-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=dbarboza@ventanamicro.com; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1697659121989100003 Content-Type: text/plain; charset="utf-8" We got along without property getters in the KVM driver because we never needed them. But the incoming query-cpu-model-expansion API will use property getters and setters to retrieve the CPU characteristics. Add the missing getters for the KVM driver for both MISA and multi-letter extension properties. We're also adding an special getter for absent multi-letter properties that KVM doesn't implement that always return false. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- target/riscv/kvm/kvm-cpu.c | 40 +++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 5695f2face..cf98071f92 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -140,6 +140,19 @@ static KVMCPUConfig kvm_misa_ext_cfgs[] =3D { KVM_MISA_CFG(RVM, KVM_RISCV_ISA_EXT_M), }; =20 +static void kvm_cpu_get_misa_ext_cfg(Object *obj, Visitor *v, + const char *name, + void *opaque, Error **errp) +{ + KVMCPUConfig *misa_ext_cfg =3D opaque; + target_ulong misa_bit =3D misa_ext_cfg->offset; + RISCVCPU *cpu =3D RISCV_CPU(obj); + CPURISCVState *env =3D &cpu->env; + bool value =3D env->misa_ext_mask & misa_bit; + + visit_type_bool(v, name, &value, errp); +} + static void kvm_cpu_set_misa_ext_cfg(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) @@ -244,6 +257,17 @@ static uint32_t kvm_cpu_cfg_get(RISCVCPU *cpu, return *ext_enabled; } =20 +static void kvm_cpu_get_multi_ext_cfg(Object *obj, Visitor *v, + const char *name, + void *opaque, Error **errp) +{ + KVMCPUConfig *multi_ext_cfg =3D opaque; + RISCVCPU *cpu =3D RISCV_CPU(obj); + bool value =3D kvm_cpu_cfg_get(cpu, multi_ext_cfg); + + visit_type_bool(v, name, &value, errp); +} + static void kvm_cpu_set_multi_ext_cfg(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) @@ -346,6 +370,15 @@ static void kvm_riscv_update_cpu_cfg_isa_ext(RISCVCPU = *cpu, CPUState *cs) } } =20 +static void cpu_get_cfg_unavailable(Object *obj, Visitor *v, + const char *name, + void *opaque, Error **errp) +{ + bool value =3D false; + + visit_type_bool(v, name, &value, errp); +} + static void cpu_set_cfg_unavailable(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) @@ -376,7 +409,8 @@ static void riscv_cpu_add_kvm_unavail_prop(Object *obj,= const char *prop_name) * to enable any of them. */ object_property_add(obj, prop_name, "bool", - NULL, cpu_set_cfg_unavailable, + cpu_get_cfg_unavailable, + cpu_set_cfg_unavailable, NULL, (void *)prop_name); } =20 @@ -406,7 +440,7 @@ static void kvm_riscv_add_cpu_user_properties(Object *c= pu_obj) misa_cfg->description =3D riscv_get_misa_ext_description(bit); =20 object_property_add(cpu_obj, misa_cfg->name, "bool", - NULL, + kvm_cpu_get_misa_ext_cfg, kvm_cpu_set_misa_ext_cfg, NULL, misa_cfg); object_property_set_description(cpu_obj, misa_cfg->name, @@ -422,7 +456,7 @@ static void kvm_riscv_add_cpu_user_properties(Object *c= pu_obj) KVMCPUConfig *multi_cfg =3D &kvm_multi_ext_cfgs[i]; =20 object_property_add(cpu_obj, multi_cfg->name, "bool", - NULL, + kvm_cpu_get_multi_ext_cfg, kvm_cpu_set_multi_ext_cfg, NULL, multi_cfg); } --=20 2.41.0 From nobody Fri May 17 20:53:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1697659090; cv=none; d=zohomail.com; s=zohoarc; b=EQjyqShK88kGVw+BBbgVyX6zbIGpI6RR8PFVDQwBsXYOTHIiAuUd2p4dhalziKO8dHUjL7eZs0ia6l9eQzc8xj74Acy+sWW7Mze9VLCtDt8YfNNqhmgNccPIVrk6Dtv6UT8M1Z5b3HMXMpx5IziIBZ4FS8zxVWqtyf0Jur1tD6I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697659090; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=omkN3GoJPCyp9S7HvmY3Un4l534NY4W4OA1YH82yeVE=; b=LcfltE0Zftz1bjdRR7/5a8PMW68tRpullZ4upjZIma0Ml5CKCeClEQXI12xoNk955koW5P2KoQoxDPCEkufmYMbpUnUFviiwjDXTVzJc3KH+lE1EV8ZI90aLZGO2egWbxoakWkzkbk0V9UEFTeqAKYdaJsGHZ3xwCplbkEEUY1s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1697659090380843.5558487857329; Wed, 18 Oct 2023 12:58:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qtCf3-0003pz-1c; Wed, 18 Oct 2023 15:56:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qtCf1-0003pT-0o for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:56:55 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qtCey-0001c6-Uj for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:56:54 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-27d0a173e61so4699365a91.0 for ; Wed, 18 Oct 2023 12:56:52 -0700 (PDT) Received: from grind.dc1.ventanamicro.com ([177.45.186.249]) by smtp.gmail.com with ESMTPSA id ku12-20020a17090b218c00b00268b439a0cbsm256359pjb.23.2023.10.18.12.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:56:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1697659011; x=1698263811; darn=nongnu.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; bh=omkN3GoJPCyp9S7HvmY3Un4l534NY4W4OA1YH82yeVE=; b=XLQOLgqB1UBjPo1WbHliynYyMjTkDYy/QX74vDxnNm91JW+AhlxRRckRQYIriOIEDR V8FTeRn/yvZ1Om/wnF6jVGXbV8Nqp3xJz/RNPGq3R8wQGgc4jk5q+wBI9pAXZ6nbtzD/ u0tAyFWZ7pfEWqeENdMbNZ/xAAYSLEWWkch/K0jtiC9uaS5ceOEY21xmZAc+yKryUrC6 aLT+gEaJN6L4jSq0DYxuowQNAQiUZkrTvRncGwmGrKR9xCic/dXFb625Aj9Zw8hqQk+G U8lENKs7kvgcRU1uUlN1AxwSA3VooeZooII9qTJ+Qg7yT0uRGXa8n0O6ycgZFFB8vKYt C3mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697659011; x=1698263811; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=omkN3GoJPCyp9S7HvmY3Un4l534NY4W4OA1YH82yeVE=; b=IECy22AwyB6jMFlvhHomYs+kjzQtKEq8HBiOGA7w/M89KY7Q6NfKhDo+rV/QB67Owu tn4nhpxQZn3MtDR+nyU6iHlHFtafPOf0WWKMcqQxCqbP8ibez9EZ+wmRTdSAaHz291K+ KZYMyLh1rZAUzu8LNXeQfmJFTYz5FZFBD0R9M2UPLcQ4IdS2uHQQ0Kno/mV0V/0gk79Y rVxWKgswQ2ZDOayLQfG4uMkArR1ZtIO19snKftUICvYLhJ5MtIYlNy1d1xBgw7/mOpKH H6YCIamTYUs6wazE6X74G6ax9Rkdv9kGThpG1Q6crq45rYZxCQ5wf9EgMmg0KfwXf8Ri Bsbg== X-Gm-Message-State: AOJu0YwyzXIRtxFVoHYkT6v2MF/PNs+IQZPTvkkXm5xpzyBAsevge8Dk iql5RwKAy51oS0q1zQWAgcPi3TicW6xsZRomBnA= X-Google-Smtp-Source: AGHT+IH1401w1hK9CgotOUuflFcKdZIc24LFbK/8mdl2mukkCZm2IaRf/AYN8l3d9EQEdp84740VXg== X-Received: by 2002:a17:90a:4008:b0:27d:2054:27b1 with SMTP id u8-20020a17090a400800b0027d205427b1mr182206pjc.32.1697659011025; Wed, 18 Oct 2023 12:56:51 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, Daniel Henrique Barboza Subject: [PATCH v3 2/6] qapi,risc-v: add query-cpu-model-expansion Date: Wed, 18 Oct 2023 16:56:34 -0300 Message-ID: <20231018195638.211151-3-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231018195638.211151-1-dbarboza@ventanamicro.com> References: <20231018195638.211151-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=dbarboza@ventanamicro.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1697659091816100003 Content-Type: text/plain; charset="utf-8" This API is used to inspect the characteristics of a given CPU model. It also allows users to validate a CPU model with a certain configuration, e.g. if "-cpu X,a=3Dtrue,b=3Dfalse" is a valid setup for a given QEMU binary. We'll start implementing the first part. The second requires more changes in RISC-V CPU boot flow. The implementation is inspired by the existing ARM query-cpu-model-expansion impl in target/arm/arm-qmp-cmds.c. We'll create a RISCVCPU object with the required model, fetch its existing properties, add a couple of relevant boolean options (pmp and mmu) and display it to users. Here's an usage example: ./build/qemu-system-riscv64 -S -M virt -display none \ -qmp tcp:localhost:1234,server,wait=3Doff ./scripts/qmp/qmp-shell localhost:1234 Welcome to the QMP low-level shell! Connected to QEMU 8.1.50 (QEMU) query-cpu-model-expansion type=3Dfull model=3D{"name":"rv64"} {"return": {"model": {"name": "rv64", "props": {"zicond": false, "x-zvfh": = false, "mmu": true, "x-zvfbfwma": false, "x-zvfbfmin": false, "xtheadbs": f= alse, "xtheadbb": false, "xtheadba": false, "xtheadmemidx": false, "smstate= en": false, "zfinx": false, "Zve64f": false, "Zve32f": false, "x-zvfhmin": = false, "xventanacondops": false, "xtheadcondmov": false, "svpbmt": false, "= zbs": true, "zbc": true, "zbb": true, "zba": true, "zicboz": true, "xtheadm= ac": false, "Zfh": false, "Zfa": true, "zbkx": false, "zbkc": false, "zbkb"= : false, "Zve64d": false, "x-zfbfmin": false, "zk": false, "x-epmp": false,= "xtheadmempair": false, "zkt": false, "zks": false, "zkr": false, "zkn": f= alse, "Zfhmin": false, "zksh": false, "zknh": false, "zkne": false, "zknd":= false, "zhinx": false, "Zicsr": true, "sscofpmf": false, "Zihintntl": true= , "sstc": true, "xtheadcmo": false, "x-zvbb": false, "zksed": false, "x-zvk= ned": false, "xtheadsync": false, "x-zvkg": false, "zhinxmin": false, "svad= u": true, "xtheadfmv": false, "x-zvksed": false, "svnapot": false, "pmp": t= rue, "x-zvknhb": false, "x-zvknha": false, "xtheadfmemidx": false, "x-zvksh= ": false, "zdinx": false, "zicbom": true, "Zihintpause": true, "svinval": f= alse, "zcf": false, "zce": false, "zcd": false, "zcb": false, "zca": false,= "x-ssaia": false, "x-smaia": false, "zmmul": false, "x-zvbc": false, "Zife= ncei": true, "zcmt": false, "zcmp": false, "Zawrs": true}}}} Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- qapi/machine-target.json | 6 ++- target/riscv/riscv-qmp-cmds.c | 75 +++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/qapi/machine-target.json b/qapi/machine-target.json index f0a6b72414..e5630e73aa 100644 --- a/qapi/machine-target.json +++ b/qapi/machine-target.json @@ -228,7 +228,8 @@ 'data': { 'model': 'CpuModelInfo' }, 'if': { 'any': [ 'TARGET_S390X', 'TARGET_I386', - 'TARGET_ARM' ] } } + 'TARGET_ARM', + 'TARGET_RISCV' ] } } =20 ## # @query-cpu-model-expansion: @@ -273,7 +274,8 @@ 'returns': 'CpuModelExpansionInfo', 'if': { 'any': [ 'TARGET_S390X', 'TARGET_I386', - 'TARGET_ARM' ] } } + 'TARGET_ARM', + 'TARGET_RISCV' ] } } =20 ## # @CpuDefinitionInfo: diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index 5ecff1afb3..2170562e3a 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -24,8 +24,12 @@ =20 #include "qemu/osdep.h" =20 +#include "qapi/error.h" #include "qapi/qapi-commands-machine-target.h" +#include "qapi/qmp/qdict.h" +#include "qom/qom-qobject.h" #include "cpu-qom.h" +#include "cpu.h" =20 static void riscv_cpu_add_definition(gpointer data, gpointer user_data) { @@ -55,3 +59,74 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error *= *errp) =20 return cpu_list; } + +static void riscv_obj_add_qdict_prop(Object *obj, QDict *qdict_out, + const char *name) +{ + ObjectProperty *prop =3D object_property_find(obj, name); + + if (prop) { + QObject *value; + + assert(prop->get); + value =3D object_property_get_qobject(obj, name, &error_abort); + + qdict_put_obj(qdict_out, name, value); + } +} + +static void riscv_obj_add_multiext_props(Object *obj, QDict *qdict_out, + const RISCVCPUMultiExtConfig *arr) +{ + for (int i =3D 0; arr[i].name !=3D NULL; i++) { + riscv_obj_add_qdict_prop(obj, qdict_out, arr[i].name); + } +} + +CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType= type, + CpuModelInfo *model, + Error **errp) +{ + CpuModelExpansionInfo *expansion_info; + QDict *qdict_out; + ObjectClass *oc; + Object *obj; + + if (type !=3D CPU_MODEL_EXPANSION_TYPE_FULL) { + error_setg(errp, "The requested expansion type is not supported"); + return NULL; + } + + oc =3D cpu_class_by_name(TYPE_RISCV_CPU, model->name); + if (!oc) { + error_setg(errp, "The CPU type '%s' is not a known RISC-V CPU type= ", + model->name); + return NULL; + } + + obj =3D object_new(object_class_get_name(oc)); + + expansion_info =3D g_new0(CpuModelExpansionInfo, 1); + expansion_info->model =3D g_malloc0(sizeof(*expansion_info->model)); + expansion_info->model->name =3D g_strdup(model->name); + + qdict_out =3D qdict_new(); + + riscv_obj_add_multiext_props(obj, qdict_out, riscv_cpu_extensions); + riscv_obj_add_multiext_props(obj, qdict_out, riscv_cpu_experimental_ex= ts); + riscv_obj_add_multiext_props(obj, qdict_out, riscv_cpu_vendor_exts); + + /* Add our CPU boolean options too */ + riscv_obj_add_qdict_prop(obj, qdict_out, "mmu"); + riscv_obj_add_qdict_prop(obj, qdict_out, "pmp"); + + if (!qdict_size(qdict_out)) { + qobject_unref(qdict_out); + } else { + expansion_info->model->props =3D QOBJECT(qdict_out); + } + + object_unref(obj); + + return expansion_info; +} --=20 2.41.0 From nobody Fri May 17 20:53:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1697659125; cv=none; d=zohomail.com; s=zohoarc; b=U0cWAgLMQLnygCjrjuKj20i6COm0WpAJGpCUsqKxBFFDnizLhPnvY3j5+lijn+6hLi0ODWf4LmszTkjRHsR0K7QTa34S17rTYR7s/lCn2oAuEJB5G++vMcIsh96e+maL09Ex5AfdLVDDnNjbMktEca5zGH8FYL5Z46yYyxFF/ME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697659125; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YMVhWmwdvx30PnU9x/+bnphuULQWrEw6MGAVsHC6ISM=; b=A9jOvqDvw2ubb+PJuQoVEW+yrO5df1gVvrmzMYclfBm366cVgNre0JzgRoYn2+wbDvdphYMuTCLlH7o+258ykxzS0k4Y6NjozsOHuIPGt4T24UU43RXfnE0HfZXG7Sz75A+HhlvdKqgKY8OKy0EJh3FyvIapAE14dfAupSmD39o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1697659125496484.6060000214426; Wed, 18 Oct 2023 12:58:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qtCf6-0003qx-5f; Wed, 18 Oct 2023 15:57:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qtCf3-0003qO-VY for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:56:57 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qtCf2-0001cZ-0Y for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:56:57 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-27d113508bfso5908991a91.3 for ; Wed, 18 Oct 2023 12:56:55 -0700 (PDT) Received: from grind.dc1.ventanamicro.com ([177.45.186.249]) by smtp.gmail.com with ESMTPSA id ku12-20020a17090b218c00b00268b439a0cbsm256359pjb.23.2023.10.18.12.56.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:56:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1697659014; x=1698263814; darn=nongnu.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; bh=YMVhWmwdvx30PnU9x/+bnphuULQWrEw6MGAVsHC6ISM=; b=jTabJDvNja8bQfAZFnmJmwX9gUEZ5Vcyx86qzwNaMiaqI675cXqULYbeXYItv+jiak MSPpnQSXbTRpaqcFydZqWBm6D2QSMwL6jOLeYyZXPQt5iB3SHvOZKXw+8F600ppBbUKt ZYAEZ7A7xEvmlsqWcBqK8/cPfi1IkYrtVQMaxQCWBLUbHn1/5hR6NA1RnHEL0GNcVagG 8/5EcdJoVgdB4JzfN+6p7Ny3nHpx4P027gKruXkZ3tymxDwxFL6JxWCE69xoJEBCCP9r Z/bdKbytb/WfJ1wtMAGC60FGQbBaNHJFT2WkzwziymqSJ4tnmIyYWOhTEb/wxQQIgIhc m6ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697659014; x=1698263814; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YMVhWmwdvx30PnU9x/+bnphuULQWrEw6MGAVsHC6ISM=; b=dMMvPOuKbbR6hW8O809CFk5RUOBD7BtuQ8QTdYAqmuIEMsiFwhUbH2x5BvZUwMRaXm e8ld28YXOMA4v69HjLPIDT0DA6HtogZKfNKiPDGs4nWJBvezJ4mNTAZpQ/Rdc8OO4lIJ p06bQftwOON2q76lq2oWSXJyUEyr/O2md/zQHMwLTkDck0pVOhIVwK8v20Vz/yVzt5Ad g0BxlqKVn8n9/jZd7vC5TQL36zEc1Yp88OznMwLj0f9AbSuiVzjafV5Y/oRL9jImCkBk atduVJyFUn1ruOI2E2KeWioqrPzfQVsXiq5LAgXhS2MPlqz1Tb/gIK6YEYxoPuAw43Yv bo9A== X-Gm-Message-State: AOJu0Yy8s3OZfZQYvKibtn5eFSbLWl4nfM4fLudChDq1DlWxWiDEldLp X5x6Qu7U69JiSq3BxYKMheCmvmRqfhJFxN8hZpM= X-Google-Smtp-Source: AGHT+IEIxeEqTl51SVNMJ7WB4kd3Ldzz2OTgkhgPZGwnVUFyggTOozCcrG+ITC+gtxkQfrpIQ4Mf3Q== X-Received: by 2002:a17:90a:1a10:b0:27d:3e8f:26db with SMTP id 16-20020a17090a1a1000b0027d3e8f26dbmr193676pjk.12.1697659014347; Wed, 18 Oct 2023 12:56:54 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, Daniel Henrique Barboza Subject: [PATCH v3 3/6] target/riscv/tcg: add tcg_cpu_finalize_features() Date: Wed, 18 Oct 2023 16:56:35 -0300 Message-ID: <20231018195638.211151-4-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231018195638.211151-1-dbarboza@ventanamicro.com> References: <20231018195638.211151-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=dbarboza@ventanamicro.com; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1697659125866100012 Content-Type: text/plain; charset="utf-8" The query-cpu-model-expansion API is capable of passing extra properties to a given CPU model and tell callers if this custom configuration is valid. The RISC-V version of the API is not quite there yet. The reason is the realize() flow in the TCG driver, where most of the validation is done in tcg_cpu_realizefn(). riscv_cpu_finalize_features() is then used to validate satp_mode for both TCG and KVM CPUs. Our ARM friends uses a concept of 'finalize_features()', a step done in the end of realize() where the CPU features are validated. We have a riscv_cpu_finalize_features() helper that, at this moment, is only validating satp_mode. Re-use this existing helper to do all CPU extension validation we required after at the end of realize(). Make it public to allow APIs to use it. At this moment only the TCG driver requires a realize() time validation, thus, to avoid adding accelerator specific helpers in the API, riscv_cpu_finalize_features() uses riscv_tcg_cpu_finalize_features() if we are running TCG. The API will then use riscv_cpu_finalize_features() regardless of the current accelerator. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- target/riscv/cpu.c | 18 +++++++++-- target/riscv/cpu.h | 1 + target/riscv/tcg/tcg-cpu.c | 63 +++++++++++++++++++++----------------- target/riscv/tcg/tcg-cpu.h | 1 + 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 2f98ce56e0..02db0834dd 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -34,6 +34,7 @@ #include "sysemu/kvm.h" #include "sysemu/tcg.h" #include "kvm/kvm_riscv.h" +#include "tcg/tcg-cpu.h" #include "tcg/tcg.h" =20 /* RISC-V CPU definitions */ @@ -998,11 +999,24 @@ static void riscv_cpu_satp_mode_finalize(RISCVCPU *cp= u, Error **errp) } #endif =20 -static void riscv_cpu_finalize_features(RISCVCPU *cpu, Error **errp) +void riscv_cpu_finalize_features(RISCVCPU *cpu, Error **errp) { -#ifndef CONFIG_USER_ONLY Error *local_err =3D NULL; =20 + /* + * KVM accel does not have a specialized finalize() + * callback because its extensions are validated + * in the get()/set() callbacks of each property. + */ + if (tcg_enabled()) { + riscv_tcg_cpu_finalize_features(cpu, &local_err); + if (local_err !=3D NULL) { + error_propagate(errp, local_err); + return; + } + } + +#ifndef CONFIG_USER_ONLY riscv_cpu_satp_mode_finalize(cpu, &local_err); if (local_err !=3D NULL) { error_propagate(errp, local_err); diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 7f61e17202..8c9ec59d82 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -756,6 +756,7 @@ typedef struct isa_ext_data { extern const RISCVIsaExtData isa_edata_arr[]; char *riscv_cpu_get_name(RISCVCPU *cpu); =20 +void riscv_cpu_finalize_features(RISCVCPU *cpu, Error **errp); void riscv_add_satp_mode_properties(Object *obj); =20 /* CSR function table */ diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index bbce254ee1..21a46f2a0e 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -548,6 +548,39 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, = Error **errp) riscv_cpu_disable_priv_spec_isa_exts(cpu); } =20 +void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Error **errp) +{ + CPURISCVState *env =3D &cpu->env; + Error *local_err =3D NULL; + + riscv_cpu_validate_priv_spec(cpu, &local_err); + if (local_err !=3D NULL) { + error_propagate(errp, local_err); + return; + } + + riscv_cpu_validate_misa_priv(env, &local_err); + if (local_err !=3D NULL) { + error_propagate(errp, local_err); + return; + } + + if (cpu->cfg.epmp && !cpu->cfg.pmp) { + /* + * Enhanced PMP should only be available + * on harts with PMP support + */ + error_setg(errp, "Invalid configuration: EPMP requires PMP support= "); + return; + } + + riscv_cpu_validate_set_extensions(cpu, &local_err); + if (local_err !=3D NULL) { + error_propagate(errp, local_err); + return; + } +} + static bool riscv_cpu_is_generic(Object *cpu_obj) { return object_dynamic_cast(cpu_obj, TYPE_RISCV_DYNAMIC_CPU) !=3D NULL; @@ -563,7 +596,6 @@ static bool riscv_cpu_is_generic(Object *cpu_obj) static bool tcg_cpu_realize(CPUState *cs, Error **errp) { RISCVCPU *cpu =3D RISCV_CPU(cs); - CPURISCVState *env =3D &cpu->env; Error *local_err =3D NULL; =20 if (object_dynamic_cast(OBJECT(cpu), TYPE_RISCV_CPU_HOST)) { @@ -579,34 +611,9 @@ static bool tcg_cpu_realize(CPUState *cs, Error **errp) return false; } =20 - riscv_cpu_validate_priv_spec(cpu, &local_err); - if (local_err !=3D NULL) { - error_propagate(errp, local_err); - return false; - } - - riscv_cpu_validate_misa_priv(env, &local_err); - if (local_err !=3D NULL) { - error_propagate(errp, local_err); - return false; - } - - if (cpu->cfg.epmp && !cpu->cfg.pmp) { - /* - * Enhanced PMP should only be available - * on harts with PMP support - */ - error_setg(errp, "Invalid configuration: EPMP requires PMP support= "); - return false; - } - - riscv_cpu_validate_set_extensions(cpu, &local_err); - if (local_err !=3D NULL) { - error_propagate(errp, local_err); - return false; - } - #ifndef CONFIG_USER_ONLY + CPURISCVState *env =3D &cpu->env; + CPU(cs)->tcg_cflags |=3D CF_PCREL; =20 if (cpu->cfg.ext_sstc) { diff --git a/target/riscv/tcg/tcg-cpu.h b/target/riscv/tcg/tcg-cpu.h index 630184759d..aa00fbc253 100644 --- a/target/riscv/tcg/tcg-cpu.h +++ b/target/riscv/tcg/tcg-cpu.h @@ -23,5 +23,6 @@ #include "cpu.h" =20 void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp); +void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Error **errp); =20 #endif --=20 2.41.0 From nobody Fri May 17 20:53:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1697659122; cv=none; d=zohomail.com; s=zohoarc; b=gGme+ZfwxIm5jQMeF7inwBVELGbDj0pQVl9nkQR4el6WDqqYl4LdI7NanMIXkwHxlpoUpwt/zstzsruydcnZd9m5qn0MvIKkubOqcHPHsGDmPwzAzERiM1JGRfbBE2kqhKRJoIbfcjOoWWxDmFjDwWoEL/J2dkLTjle2kFzvgo8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697659122; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qIAf4nnuF3OFMrBHbJCzXvrh0kuUQuGTETn7XZtITBo=; b=jGCxdi9MS4KNCLgpYB+qv9VeMOvrwFQQBft/7Y7Kdp1twyWipqlIYB3l8l49gW5qF2bt18fPfGcJNMG0wE3XCMWAHCro6P0+VVIGChIizb3C+V47EZYvygQAUjXh2HeIAFH/7o11OmjWvxQJhVJn5vR8VyTSdBvhiqD4KzDcVmQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1697659122221344.02429287763243; Wed, 18 Oct 2023 12:58:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qtCf7-0003ra-UJ; Wed, 18 Oct 2023 15:57:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qtCf6-0003rH-H6 for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:57:00 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qtCf4-0001ct-To for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:57:00 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-27d153c7f00so4952740a91.3 for ; Wed, 18 Oct 2023 12:56:58 -0700 (PDT) Received: from grind.dc1.ventanamicro.com ([177.45.186.249]) by smtp.gmail.com with ESMTPSA id ku12-20020a17090b218c00b00268b439a0cbsm256359pjb.23.2023.10.18.12.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:56:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1697659017; x=1698263817; darn=nongnu.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; bh=qIAf4nnuF3OFMrBHbJCzXvrh0kuUQuGTETn7XZtITBo=; b=Th67jkldiGFBX3Kap6mZp/tQQvFmlgm55mDHnndHA27kD19bMzW2oxQ4H00QIJcFzs gXqdNz1zHA9j3EOWe5sQvKHeDYiQtbzle3HfE+kBaI+8P4Q/DO6ZmQh+L9wW+1TRuU0E AzeMdmRTbd5lRUAeR0oDvyAMyEUk9pPenFlHG87M+loS6vPzLDsYHKyAuig4irMjTEA3 yNCcrTpM7x1dTAnfWWmCcE7F+yONbOdI8oAJ4PxDgYbgPW6FuJHbJWp7ZTgSe+Sz88v4 xL0THCBg8FpYA90yT9FrYXLbafMAJWMqCRThWYOpTHg5KIM4LVqRGLb/qAcbS6589Rh1 1+WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697659017; x=1698263817; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qIAf4nnuF3OFMrBHbJCzXvrh0kuUQuGTETn7XZtITBo=; b=czSePXSFW5adMN/JGEuQTvAXeu5vgfbo6qZZlbfUmsTBLN36QUCvAsEZfgI13Fnwfw /GSCcY4F6/NSWhHhg0zCGAXPZQhODUyS+BhlKPhe+mz2CwrT9V/Hn/OmvEipe5UXVUzM GKcuytLeg81OMtBixAGrM1kjl1YM/HWPRUvL8Rxx0rjECdkcU8RYu28tRQYgOX4JS9pt 6wsBzxT9uAs2gtQFfDBsWZDHVRW50fQ+pIWZIKKGvHlVA0wrrup2LEFLavCYbOXXpzLA oSUvqJZlwJWHPQdrddnrOPs5A6mbtrDg99WhdFlWUkoWsS2jOkfPqKq9H072J1cj/kS7 g9kg== X-Gm-Message-State: AOJu0YxeQ3FAA3V4XVjtoruoWHQWts5Lrvfmz3hcmXxAzayq/kZyfvTL t80V7WcKjxgyuZj5ugSBLPDX8wbqYgBuRd9/zNU= X-Google-Smtp-Source: AGHT+IEAVWFCGSlUlfvnHl04fdsNYY9p3Pxwjcg6gEf3mmo/ZxrcscWc0arY2CGUz8+0cPJAC6HUfQ== X-Received: by 2002:a17:90b:230a:b0:27d:4129:ecd9 with SMTP id mt10-20020a17090b230a00b0027d4129ecd9mr180202pjb.26.1697659017141; Wed, 18 Oct 2023 12:56:57 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, Daniel Henrique Barboza Subject: [PATCH v3 4/6] target/riscv: handle custom props in qmp_query_cpu_model_expansion Date: Wed, 18 Oct 2023 16:56:36 -0300 Message-ID: <20231018195638.211151-5-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231018195638.211151-1-dbarboza@ventanamicro.com> References: <20231018195638.211151-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=dbarboza@ventanamicro.com; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1697659123867100007 Content-Type: text/plain; charset="utf-8" Callers can add 'props' when querying for a cpu model expansion to see if a given CPU model supports a certain criteria, and what's the resulting CPU object. If we have 'props' to handle, gather it in a QDict and use the new riscv_cpuobj_validate_qdict_in() helper to validate it. This helper will add the custom properties in the CPU object and validate it using riscv_cpu_finalize_features(). Users will be aware of validation errors if any occur, if not a CPU object with 'props' will be returned. Here's an example with the veyron-v1 vendor CPU. Disabling vendor CPU extensions is allowed, assuming the final config is valid. Disabling 'smstateen' is a valid expansion: (QEMU) query-cpu-model-expansion type=3Dfull model=3D{"name":"veyron-v1","p= rops":{"smstateen":false}} {"return": {"model": {"name": "veyron-v1", "props": {"zicond": false, ..., = "smstateen": false, ...} But enabling extensions isn't allowed for vendor CPUs. E.g. enabling 'V' for the veyron-v1 CPU isn't allowed: (QEMU) query-cpu-model-expansion type=3Dfull model=3D{"name":"veyron-v1","p= rops":{"v":true}} {"error": {"class": "GenericError", "desc": "'veyron-v1' CPU does not allow= enabling extensions"}} Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- target/riscv/riscv-qmp-cmds.c | 65 +++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index 2170562e3a..5b2d186c83 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -27,6 +27,9 @@ #include "qapi/error.h" #include "qapi/qapi-commands-machine-target.h" #include "qapi/qmp/qdict.h" +#include "qapi/qmp/qerror.h" +#include "qapi/qobject-input-visitor.h" +#include "qapi/visitor.h" #include "qom/qom-qobject.h" #include "cpu-qom.h" #include "cpu.h" @@ -83,14 +86,58 @@ static void riscv_obj_add_multiext_props(Object *obj, Q= Dict *qdict_out, } } =20 +static void riscv_cpuobj_validate_qdict_in(Object *obj, QObject *props, + const QDict *qdict_in, + Error **errp) +{ + const QDictEntry *qe; + Visitor *visitor; + Error *local_err =3D NULL; + + visitor =3D qobject_input_visitor_new(props); + if (!visit_start_struct(visitor, NULL, NULL, 0, &local_err)) { + goto err; + } + + for (qe =3D qdict_first(qdict_in); qe; qe =3D qdict_next(qdict_in, qe)= ) { + object_property_find_err(obj, qe->key, &local_err); + if (local_err) { + goto err; + } + + object_property_set(obj, qe->key, visitor, &local_err); + if (local_err) { + goto err; + } + } + + visit_check_struct(visitor, &local_err); + if (local_err) { + goto err; + } + + riscv_cpu_finalize_features(RISCV_CPU(obj), &local_err); + if (local_err) { + goto err; + } + + visit_end_struct(visitor, NULL); + +err: + error_propagate(errp, local_err); + visit_free(visitor); +} + CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType= type, CpuModelInfo *model, Error **errp) { CpuModelExpansionInfo *expansion_info; + const QDict *qdict_in =3D NULL; QDict *qdict_out; ObjectClass *oc; Object *obj; + Error *local_err =3D NULL; =20 if (type !=3D CPU_MODEL_EXPANSION_TYPE_FULL) { error_setg(errp, "The requested expansion type is not supported"); @@ -104,8 +151,26 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(C= puModelExpansionType type, return NULL; } =20 + if (model->props) { + qdict_in =3D qobject_to(QDict, model->props); + if (!qdict_in) { + error_setg(errp, QERR_INVALID_PARAMETER_TYPE, "props", "dict"); + return NULL; + } + } + obj =3D object_new(object_class_get_name(oc)); =20 + if (qdict_in) { + riscv_cpuobj_validate_qdict_in(obj, model->props, qdict_in, + &local_err); + if (local_err) { + error_propagate(errp, local_err); + object_unref(obj); + return NULL; + } + } + expansion_info =3D g_new0(CpuModelExpansionInfo, 1); expansion_info->model =3D g_malloc0(sizeof(*expansion_info->model)); expansion_info->model->name =3D g_strdup(model->name); --=20 2.41.0 From nobody Fri May 17 20:53:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1697659086; cv=none; d=zohomail.com; s=zohoarc; b=GGEOPjJnUWM/QLUv70dPFAT91yPGYJlXfHETDbyuM5qDVdCZmCcWgTFVKQZI0i46iVMQKKeAf/53ldjFHdvPW5Xv234O3bU63UbuGMiBtio5IA/60y6vXqBMw5s4LdMw1chCq+gysk5MUkpcrdNGKUtil5VOhm3/JVTfRQEtMJk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697659086; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=goSM+plzgjI6cpvIrsL3gQcrpcnNxW3GYfnrMcJsUz0=; b=fYXxod2btLOsHiNJzpz6zdZhsfvYenUo438luWoteNTOl1cuxPwQy6mv+t9W5RnqvL+c4lYZ3uxl9ifnpEq1unPC83/anKVNt6wIN+o5SU59OV2hzY9pbvX7pdtodEiyLsJ2La78SM7z9cJUV+BOwYw/QgoP9I0mlW/k+th+y9Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 169765908648965.97769407698854; Wed, 18 Oct 2023 12:58:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qtCfB-0003sO-PB; Wed, 18 Oct 2023 15:57:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qtCf9-0003s7-GG for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:57:03 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qtCf7-0001dM-Ro for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:57:03 -0400 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-5ab94fc098cso3326134a12.1 for ; Wed, 18 Oct 2023 12:57:01 -0700 (PDT) Received: from grind.dc1.ventanamicro.com ([177.45.186.249]) by smtp.gmail.com with ESMTPSA id ku12-20020a17090b218c00b00268b439a0cbsm256359pjb.23.2023.10.18.12.56.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1697659020; x=1698263820; darn=nongnu.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; bh=goSM+plzgjI6cpvIrsL3gQcrpcnNxW3GYfnrMcJsUz0=; b=kAg7HUqGptswJakkLSOw7stXt1AfH7BhYT2E1PsUZjxlQkhv4Ic1Hv20aURQBng2vb dTogTkl2HMMedleLXKwXte2JYyHVzSGdBbIdonTNW4oDyjwzbMgrcyUwxXTAnCEagYMe xfAVbSwOqn9G7cc0kxZbevydqKO/tY+MHzfM7a+/T4xJTk5BT5f3mZqrgKvlmqzGTyaF /6gt7+rg0dClnw1guQSoThvkbTD09BiEdU6mZurHZInNPl4rflIyR335gUlgIfOf/Yuv 5ssMvcu1bs7fJyh+7EqHRAzVaEBUn2IeI/PAuR+1bchNi1n6w1Tgj8cDxbNuLosTiRja PsFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697659020; x=1698263820; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=goSM+plzgjI6cpvIrsL3gQcrpcnNxW3GYfnrMcJsUz0=; b=GjZXB0QOJz6ylRFh8OzzCpbI/tVKuXWUqjUOPJKhvDn20S59Cu02Kycp507O/5R2LU N5KzU4zE1G8nHK1mrvIvDO7fsR27h1sPs/nfC8r7TZ4lhOy+Mvxdija7Sva2fj6KctLu SQ3MNR/LufYNSAcgxuPs965GfckMnN3mNHnLCSV/lIdjnGqVg0hiCW7b3xMEfO9GTRg1 7iFIxEsdJolMjWSQyAfhDiD3aG9cIUtAyU9mwjztv5gJYwc+61ikpOGBGeFekIq7RsqT sDYQK2X522VPJRI5wMixjtiPwi1lzvg4wo9QAxkL8LFHm2R1F1VwpsZrgyf7n0SNq8oL qIWQ== X-Gm-Message-State: AOJu0YxenrPNLNYoJNbRlj0SOHiRKoPloSzBQH1+ddkwSSZxwl8jeWvp UrbH5qwLai+xsaAuh6xa67mIK/AaAynqmf92RHw= X-Google-Smtp-Source: AGHT+IFyfYRuzTlB8SSBkUB1B/AROG625A/LjDrNNGdzsFVvTnjqr7m/6nrykted8jylI0O8QiUM+Q== X-Received: by 2002:a17:90a:5886:b0:27c:ed8e:1840 with SMTP id j6-20020a17090a588600b0027ced8e1840mr198371pji.10.1697659020159; Wed, 18 Oct 2023 12:57:00 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, Daniel Henrique Barboza Subject: [PATCH v3 5/6] target/riscv: add riscv_cpu_accelerator_compatible() Date: Wed, 18 Oct 2023 16:56:37 -0300 Message-ID: <20231018195638.211151-6-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231018195638.211151-1-dbarboza@ventanamicro.com> References: <20231018195638.211151-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=dbarboza@ventanamicro.com; helo=mail-pg1-x52e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1697659087803100003 Content-Type: text/plain; charset="utf-8" Add an API to check if a given CPU is compatible with the current accelerator. This will allow query-cpu-model-expansion to work properly in conditions where QEMU supports both accelerators (TCG and KVM), QEMU is then launched using TCG, and the API requests information about a KVM only CPU (e.g. 'host' CPU). KVM doesn't have such restrictions and, at least in theory, all CPUs models should work with KVM. We will revisit this API in case we decide to restrict the amount of KVM CPUs we support. Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- target/riscv/cpu.c | 9 +++++++++ target/riscv/cpu.h | 1 + target/riscv/tcg/tcg-cpu.c | 7 ++++++- target/riscv/tcg/tcg-cpu.h | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 02db0834dd..8e0abe33d3 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1063,6 +1063,15 @@ static void riscv_cpu_realize(DeviceState *dev, Erro= r **errp) mcc->parent_realize(dev, errp); } =20 +bool riscv_cpu_accelerator_compatible(RISCVCPU *cpu) +{ + if (tcg_enabled()) { + return riscv_cpu_tcg_compatible(cpu); + } + + return true; +} + #ifndef CONFIG_USER_ONLY static void cpu_riscv_get_satp(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 8c9ec59d82..8efc4d83ec 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -758,6 +758,7 @@ char *riscv_cpu_get_name(RISCVCPU *cpu); =20 void riscv_cpu_finalize_features(RISCVCPU *cpu, Error **errp); void riscv_add_satp_mode_properties(Object *obj); +bool riscv_cpu_accelerator_compatible(RISCVCPU *cpu); =20 /* CSR function table */ extern riscv_csr_operations csr_ops[CSR_TABLE_SIZE]; diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index 21a46f2a0e..6771617226 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -581,6 +581,11 @@ void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Er= ror **errp) } } =20 +bool riscv_cpu_tcg_compatible(RISCVCPU *cpu) +{ + return object_dynamic_cast(OBJECT(cpu), TYPE_RISCV_CPU_HOST) =3D=3D NU= LL; +} + static bool riscv_cpu_is_generic(Object *cpu_obj) { return object_dynamic_cast(cpu_obj, TYPE_RISCV_DYNAMIC_CPU) !=3D NULL; @@ -598,7 +603,7 @@ static bool tcg_cpu_realize(CPUState *cs, Error **errp) RISCVCPU *cpu =3D RISCV_CPU(cs); Error *local_err =3D NULL; =20 - if (object_dynamic_cast(OBJECT(cpu), TYPE_RISCV_CPU_HOST)) { + if (!riscv_cpu_tcg_compatible(cpu)) { g_autofree char *name =3D riscv_cpu_get_name(cpu); error_setg(errp, "'%s' CPU is not compatible with TCG acceleration= ", name); diff --git a/target/riscv/tcg/tcg-cpu.h b/target/riscv/tcg/tcg-cpu.h index aa00fbc253..f7b32417f8 100644 --- a/target/riscv/tcg/tcg-cpu.h +++ b/target/riscv/tcg/tcg-cpu.h @@ -24,5 +24,6 @@ =20 void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp); void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Error **errp); +bool riscv_cpu_tcg_compatible(RISCVCPU *cpu); =20 #endif --=20 2.41.0 From nobody Fri May 17 20:53:18 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1697659093; cv=none; d=zohomail.com; s=zohoarc; b=Y10BCYnzd9vEPiUVML5awUq+5xkJ4bHxcdNnLz6A7fsL9yzRhXRU6+I42cm4wGJV1oiU2aPSPffaUJJPTOjWYR1aZuFHAmBQ2MmOPc9Bs4fYE0KXWb5AIjQo3WpFKAyImzYiEOP1DXENyyCrZvVpxMvYz5rvpAoimJ7q8X0KEnM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697659093; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=SOAxUmaqdKtbbLnRXBvRUUIo/9yaoaQnzCAPM1zDU9I=; b=aiL+T0+Y5oZOnkZIL45AU6G6wrp9uEr43PRw9391AnmoeBayM2YTZtqJ5libIUXv1eba7LlXdjqa+lnFAiMmtZYUSydCRSujOGnAbmPS28uEwEOBorazMUqrI+gugII8+Vu08lKY5mvyq7OOyH9xUqZXqOy4LAEJYBoyYTTFhkY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16976590937021017.4473356397245; Wed, 18 Oct 2023 12:58:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qtCfH-0003tH-Pn; Wed, 18 Oct 2023 15:57:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qtCfC-0003st-5V for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:57:06 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qtCfA-0001fY-MD for qemu-devel@nongnu.org; Wed, 18 Oct 2023 15:57:05 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-27d18475ed4so5497260a91.0 for ; Wed, 18 Oct 2023 12:57:04 -0700 (PDT) Received: from grind.dc1.ventanamicro.com ([177.45.186.249]) by smtp.gmail.com with ESMTPSA id ku12-20020a17090b218c00b00268b439a0cbsm256359pjb.23.2023.10.18.12.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 12:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1697659023; x=1698263823; darn=nongnu.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; bh=SOAxUmaqdKtbbLnRXBvRUUIo/9yaoaQnzCAPM1zDU9I=; b=QeFezOuhKbuSD4ui+6BKCXlMLkwgTozax+8l15BKtgfqM7IeHOOO9NhP9bUej178ZF 6dRmLb2lQ9fqR16I664E6ZA8dvHVQgf/rnqGS43onBmwP0v5CYUn+rRevn/ZsJbDP0a/ 8keexBaRr2YbpjtwpGTgqRzWfIRbJKDVX8ZKw+1w/dpG0tQqbpf0w/D9oTat9y44LVFC /BieZgNHdSfX33CMUoUV0TPWnmIf02oQc+e1DJsolDsND7T/RlK7JME7qocXb5Up/qzz Q03Jzy5xa6BwIjmZ08gmt5aGIvL6qOfUZCTXV8KUmqP4AnytcKbW/ptOu1/Na3tHq8rJ RBiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697659023; x=1698263823; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SOAxUmaqdKtbbLnRXBvRUUIo/9yaoaQnzCAPM1zDU9I=; b=ifY/vr0z4aIyTLfuYmcvjWQM6N/BqHSWQuPd9Sm1ZkIcxa3TzJ5LMvqKzErTmpEplk Vlo7DoRAUXNc5xnoelD/ptApJ1b1aBzjp9gJWrzkUEkmmMeHdmfr3uZmHyzHD43c/zBy BmBXFwG3SMKAHAvczMG1GO+sa58xtItH3Ti5TpsmOQVHkVX+MoyMEB0IQhEMPhYLF3pY /eTjzgz5htXeyOGX3zMm4YviUxS1PJmYXzUvp7a1q7v3HyFaCQbL4307CKurqVUAbcCL HHyHYgMu28ghkWyA7Sfu5pLq/lDiURbVE4Wh/1frrWGZuvMvG/mHPB5uA8w/LeZlfcgK 432w== X-Gm-Message-State: AOJu0Yw32flh8SB2SYdspSqXkq+9hTUhAV3wAIipRZI2o+5UUzEE4PFs vTwgLAY/T0s1SSHuKkkf8JL+YStgX5h/aGDiA4g= X-Google-Smtp-Source: AGHT+IGZaCwpN/MsvnLnxRo88axQa6jw6hlJSnD4kiuM/L2tfdwzeI+y7GU2hxuTwxhlOA6fqWnO2A== X-Received: by 2002:a17:90b:3d07:b0:27d:5616:9907 with SMTP id pt7-20020a17090b3d0700b0027d56169907mr167365pjb.46.1697659022975; Wed, 18 Oct 2023 12:57:02 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com, bmeng@tinylab.org, liweiwei@iscas.ac.cn, zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com, Daniel Henrique Barboza Subject: [PATCH v3 6/6] target/riscv/riscv-qmp-cmds.c: check CPU accel in query-cpu-model-expansion Date: Wed, 18 Oct 2023 16:56:38 -0300 Message-ID: <20231018195638.211151-7-dbarboza@ventanamicro.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231018195638.211151-1-dbarboza@ventanamicro.com> References: <20231018195638.211151-1-dbarboza@ventanamicro.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=dbarboza@ventanamicro.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ventanamicro.com) X-ZM-MESSAGEID: 1697659095763100003 Content-Type: text/plain; charset="utf-8" Use the recently added riscv_cpu_accelerator_compatible() to filter unavailable CPUs for a given accelerator. At this moment this is the case for a QEMU built with KVM and TCG support querying a binary running with TCG: qemu-system-riscv64 -S -M virt,accel=3Dtcg -display none -qmp tcp:localhost:1234,server,wait=3Doff ./qemu/scripts/qmp/qmp-shell localhost:1234 (QEMU) query-cpu-model-expansion type=3Dfull model=3D{"name":"host"} {"error": {"class": "GenericError", "desc": "'host' CPU not available with = tcg"}} Signed-off-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis --- target/riscv/riscv-qmp-cmds.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/riscv/riscv-qmp-cmds.c b/target/riscv/riscv-qmp-cmds.c index 5b2d186c83..2f2dbae7c8 100644 --- a/target/riscv/riscv-qmp-cmds.c +++ b/target/riscv/riscv-qmp-cmds.c @@ -31,6 +31,8 @@ #include "qapi/qobject-input-visitor.h" #include "qapi/visitor.h" #include "qom/qom-qobject.h" +#include "sysemu/kvm.h" +#include "sysemu/tcg.h" #include "cpu-qom.h" #include "cpu.h" =20 @@ -63,6 +65,17 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error *= *errp) return cpu_list; } =20 +static void riscv_check_if_cpu_available(RISCVCPU *cpu, Error **errp) +{ + if (!riscv_cpu_accelerator_compatible(cpu)) { + g_autofree char *name =3D riscv_cpu_get_name(cpu); + const char *accel =3D kvm_enabled() ? "kvm" : "tcg"; + + error_setg(errp, "'%s' CPU not available with %s", name, accel); + return; + } +} + static void riscv_obj_add_qdict_prop(Object *obj, QDict *qdict_out, const char *name) { @@ -161,6 +174,13 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(C= puModelExpansionType type, =20 obj =3D object_new(object_class_get_name(oc)); =20 + riscv_check_if_cpu_available(RISCV_CPU(obj), &local_err); + if (local_err !=3D NULL) { + error_propagate(errp, local_err); + object_unref(obj); + return NULL; + } + if (qdict_in) { riscv_cpuobj_validate_qdict_in(obj, model->props, qdict_in, &local_err); --=20 2.41.0