From nobody Sat May 30 18:35:59 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1779046886; cv=none; d=zohomail.com; s=zohoarc; b=QYhYFXT2jjEyoax2Rad59yptKa5fpmQENpUisv514wJdU9P6fQ8CnwlalQ4LIMsu8VgXsM6GYMn3yzb1Os4+nbqGg52jU/uVMOuODiwkhb+CxOSCtiJtUvahOF9I4NMPwOMi+G1yyL4gcSMac/J2J92knTOGpdCpcb2ueaAPO3w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779046886; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XbVWFxGGUbwLtPR90L3gk9LViRmmT9V7vM/ENhdKCYw=; b=KLKTenQiBZH8LkosiSjAMzt23qbhDNA8QlX6qBHu3R7JtW6syejYHo2qni/exgorRaUlDxtYUQKnA9Nb3MDVGNErO37YduWxiCUy3tM+SoUxQl+obsW/DN6lYjikUkDBE3xt0MV4Oi4bkmQjdzFusHZfWd2f0YNy6yrmWi5BUo4= 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1779046886131999.4924527782517; Sun, 17 May 2026 12:41:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wOhLx-0005Mn-5x; Sun, 17 May 2026 15:40:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wOhA7-0001mI-9a for qemu-devel@nongnu.org; Sun, 17 May 2026 15:28:31 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wOhA5-0001dT-La for qemu-devel@nongnu.org; Sun, 17 May 2026 15:28:31 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-44a14580111so1103164f8f.0 for ; Sun, 17 May 2026 12:28:28 -0700 (PDT) Received: from localhost.localdomain ([105.39.115.17]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45d9e768072sm31223828f8f.5.2026.05.17.12.28.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 12:28:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779046107; x=1779650907; darn=nongnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=XbVWFxGGUbwLtPR90L3gk9LViRmmT9V7vM/ENhdKCYw=; b=Jltj+8ThSbVJ0riCQF6gw2iWzDz8YSYXMaI1+v6fR82/CtXMfk+C/33IR5lbLIfexu yqmScQnVS+XW9uAq/lfsSTmjuEnmo1+0m0sPeP+3Oj2qGz1APOc0cwwI6tmMl5K+rTtT EFXWPc5bqD95Ph7Em9cUe5zkGaizhFKch8iatjH5SpYPJcjHtnvma8S8QT++LSJcluqn JzXHxf38WFzTjL2qJQIGxig9qdkh7H+VrlasK9Q8/lvTrukohjAR1dqjxap8y3+eQXg6 0+zsuZPVSs6dvdn83v49riEp9LQBImXBlUXVHlMZJzzfWQG7wf1UnIx8lfe3Up/0XWJ4 pIzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779046107; x=1779650907; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=XbVWFxGGUbwLtPR90L3gk9LViRmmT9V7vM/ENhdKCYw=; b=MOylfi9xp8UlC+OkZIEmRlyOM0+K5iGZu8kVYUN2JKDglUI6/ysl6vNtdjhGySB85J I+TZlrJIYe2KsnuR4FyZWfLS93jF7g+VvJwcuphLkEwgXrNINjeoOLc1AIWdGkdjNTM/ Ty4q0d3sVqNHbWabTh+TeCKuzGgeTrZ7SjTstQTigctED0FoHqYepyQl0sow5cU3Gn8l 13dmhu4wz5FdZY8l4nGYp6u8hkdsfA1zMa3uAejPVnZ6yN7Xw5bcyYVFhl9q0/6U3ksr uwyvqOBZMDr1MKyhFl2zwLX0bw5+b8XiIN9YDYk1bbf0yJE8wTzfEWK7G9To9+oQqhZQ 9i/Q== X-Forwarded-Encrypted: i=1; AFNElJ/Z+urZVetLZd4ehkUQOtWJq5b8pA5GI4g9/VZWWCfpiSjXztfj18MqNw++cO5nt1d/O21aTOjzI69R@nongnu.org X-Gm-Message-State: AOJu0YzCdXBfTEtgcVR0K9fhKRviqyJFwARcWtb5y4NuOhnaHDe+OO15 9dS3vUV+nmMNRlTBcC8IQHvjUhclLbbBgNOfBwEwbTeNix/tw8Ed89JJ X-Gm-Gg: Acq92OEDjIr8jCpRZAWVsnaDNe1/Wmy693Ct9Q4R+efdNouq+eVh/uhLWLFyyrbSntS iMYllh10yPCokKCZrRERz8fwQRLKcro5qDLAaN88qPPFyj/Fn5KHmslXLvg8/PdaE7U7wavnF2+ amDnjg4TJ2tb+ah8+SAIHFOJZZcbTFk5aCN/gklDpmvOIbaThwOa6J3xwBQ7C8yR4OGLqlW9Mbf wnsWCIGdsUMiiUyJw3y7P5CuQjhJUV4Y/j4TUW9flvL9/BKgGfEgxQ5LjwKonq13cPz3rh4APsY xbL7oIFkFxnp0fozFe7v4gfJfnj/4onk6vEKSK9ENve40e1ebD7A+j4TcnRmNLxlH89EiqM0RRM /4sLNS9sXbsr+7FjKtkTAWEc/wTss3Vy/Cz0A/vGsZrvqtN5yN5ehmj/jjApSB+rCGtX9cPWTQk 92G/3uilDnXEd1Lb/H7A9mh4lXdq/Lk7mzPMXUhGCiBjUoHCZXPuO3+xOIgX6/T1qGActyCVn4X JE2lJGYN5iDugRtVHA5MYkvtees X-Received: by 2002:a05:6000:1883:b0:45e:7415:8c4c with SMTP id ffacd0b85a97d-45e74158c50mr5481256f8f.43.1779046107076; Sun, 17 May 2026 12:28:27 -0700 (PDT) From: khaled saleh To: palmer@dabbelt.com, alistair.francis@wdc.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, qemu-riscv@nongnu.org, qemu-devel@nongnu.org, khaled.saleh.req@gmail.com Subject: [PATCH] target/riscv: Convert priv_spec property from string to enum Date: Sun, 17 May 2026 21:28:00 +0200 Message-Id: <20260517192800.112905-1-khaled.saleh.req@gmail.com> X-Mailer: git-send-email 2.34.1 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=khaled.saleh.req@gmail.com; helo=mail-wr1-x432.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, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sun, 17 May 2026 15:40:43 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1779046888492154100 Content-Type: text/plain; charset="utf-8" The priv_spec property accepts a fixed set of values (v1.10.0, v1.11.0, v1.= 12.0, v1.13.0) but was implemented as a string type with manual string-to-e= num conversion in custom getter/setter functions. Convert it to use QEnumLookup with visit_type_enum() for: - Automatic input validation by the visitor framework - QMP introspection support (valid values are discoverable) - Reduced boilerplate (priv_spec_from_str/to_str removed) This resolves the "FIXME enum?" comment in cpu.c. Signed-off-by: khaled saleh --- target/riscv/cpu.c | 59 +++++++++++--------------------------- target/riscv/cpu.h | 1 + target/riscv/tcg/tcg-cpu.c | 3 +- 3 files changed, 20 insertions(+), 43 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 506a018d52..8365471572 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -26,6 +26,7 @@ #include "internals.h" #include "qapi/error.h" #include "qapi/visitor.h" +#include "qapi/util.h" #include "qemu/error-report.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-prop-internal.h" @@ -1655,51 +1656,25 @@ static const PropertyInfo prop_pmp_granularity =3D { .set =3D prop_pmp_granularity_set, }; =20 -static int priv_spec_from_str(const char *priv_spec_str) -{ - int priv_version =3D -1; - - if (!g_strcmp0(priv_spec_str, PRIV_VER_1_13_0_STR)) { - priv_version =3D PRIV_VERSION_1_13_0; - } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) { - priv_version =3D PRIV_VERSION_1_12_0; - } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_11_0_STR)) { - priv_version =3D PRIV_VERSION_1_11_0; - } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_10_0_STR)) { - priv_version =3D PRIV_VERSION_1_10_0; - } - - return priv_version; -} +static const char *const priv_spec_str[] =3D { + [PRIV_VERSION_1_10_0] =3D PRIV_VER_1_10_0_STR, + [PRIV_VERSION_1_11_0] =3D PRIV_VER_1_11_0_STR, + [PRIV_VERSION_1_12_0] =3D PRIV_VER_1_12_0_STR, + [PRIV_VERSION_1_13_0] =3D PRIV_VER_1_13_0_STR, +}; =20 -const char *priv_spec_to_str(int priv_version) -{ - switch (priv_version) { - case PRIV_VERSION_1_10_0: - return PRIV_VER_1_10_0_STR; - case PRIV_VERSION_1_11_0: - return PRIV_VER_1_11_0_STR; - case PRIV_VERSION_1_12_0: - return PRIV_VER_1_12_0_STR; - case PRIV_VERSION_1_13_0: - return PRIV_VER_1_13_0_STR; - default: - return NULL; - } -} +const QEnumLookup priv_spec_lookup =3D { + .array =3D priv_spec_str, + .size =3D ARRAY_SIZE(priv_spec_str), +}; =20 static void prop_priv_spec_set(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { RISCVCPU *cpu =3D RISCV_CPU(obj); - g_autofree char *value =3D NULL; - int priv_version =3D -1; - - visit_type_str(v, name, &value, errp); + int priv_version; =20 - priv_version =3D priv_spec_from_str(value); - if (priv_version < 0) { - error_setg(errp, "Unsupported privilege spec version '%s'", value); + if (!visit_type_enum(v, name, &priv_version, &priv_spec_lookup, errp))= { return; } =20 @@ -1718,15 +1693,15 @@ static void prop_priv_spec_get(Object *obj, Visitor= *v, const char *name, void *opaque, Error **errp) { RISCVCPU *cpu =3D RISCV_CPU(obj); - const char *value =3D priv_spec_to_str(cpu->env.priv_ver); + int value =3D cpu->env.priv_ver; =20 - visit_type_str(v, name, (char **)&value, errp); + visit_type_enum(v, name, &value, &priv_spec_lookup, errp); } =20 static const PropertyInfo prop_priv_spec =3D { - .type =3D "str", + .type =3D "RISCVPrivSpec", .description =3D "priv_spec", - /* FIXME enum? */ + .enum_table =3D &priv_spec_lookup, .get =3D prop_priv_spec_get, .set =3D prop_priv_spec_set, }; diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index fae839cade..522b63016f 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -70,6 +70,7 @@ typedef struct CPUArchState CPURISCVState; #define RVG RV('G') #define RVB RV('B') =20 +extern const QEnumLookup priv_spec_lookup; extern const uint32_t misa_bits[]; const char *riscv_get_misa_ext_name(uint32_t bit); const char *riscv_get_misa_ext_description(uint32_t bit); diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index 02c98cc2db..2ec4b8e98e 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -27,6 +27,7 @@ #include "time_helper.h" #include "qapi/error.h" #include "qapi/visitor.h" +#include "qapi/util.h" #include "qemu/accel.h" #include "qemu/error-report.h" #include "qemu/log.h" @@ -86,7 +87,7 @@ static void riscv_cpu_write_misa_bit(RISCVCPU *cpu, uint3= 2_t bit, =20 static const char *cpu_priv_ver_to_str(int priv_ver) { - const char *priv_spec_str =3D priv_spec_to_str(priv_ver); + const char *priv_spec_str =3D qapi_enum_lookup(&priv_spec_lookup, priv= _ver); =20 g_assert(priv_spec_str); =20 --=20 2.34.1