From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
To: qemu-devel@nongnu.org
Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com,
bmeng@tinylab.org, liwei1518@gmail.com,
zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com,
ajones@ventanamicro.com,
Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Subject: [PATCH 3/4] target/riscv/kvm: add kvm-aia bools props
Date: Tue, 24 Sep 2024 09:44:06 -0300 [thread overview]
Message-ID: <20240924124407.766495-4-dbarboza@ventanamicro.com> (raw)
In-Reply-To: <20240924124407.766495-1-dbarboza@ventanamicro.com>
Boolean properties are preferrable in comparision to string properties
since they don't require a string parsing.
Add three bools that represents the available kvm-aia mode:
riscv-aia-emul, riscv-aia-hwaccel, riscv-aia-auto. They work like the
existing riscv-aia string property, i.e. if no bool is set we'll default
to riscv-aia-auto, if the host supports it.
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
---
target/riscv/kvm/kvm-cpu.c | 77 ++++++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c
index 32f3dd6a43..e256e3fc48 100644
--- a/target/riscv/kvm/kvm-cpu.c
+++ b/target/riscv/kvm/kvm-cpu.c
@@ -1671,6 +1671,62 @@ static void riscv_set_kvm_aia(Object *obj, const char *val, Error **errp)
}
}
+static void riscv_set_kvm_aia_bool(uint32_t aia_bool, bool val)
+{
+ bool default_aia_mode = KVM_DEV_RISCV_AIA_MODE_AUTO;
+
+ g_assert(aia_bool <= KVM_DEV_RISCV_AIA_MODE_AUTO);
+
+ if (val) {
+ aia_mode = aia_bool;
+ return;
+ }
+
+ /*
+ * Setting an aia_bool to 'false' does nothing if
+ * aia_mode isn't set to aia_bool.
+ */
+ if (aia_mode != aia_bool) {
+ return;
+ }
+
+ /*
+ * Return to default value if we're disabling the
+ * current set aia_mode.
+ */
+ aia_mode = default_aia_mode;
+}
+
+static bool riscv_get_kvm_aia_emul(Object *obj, Error **errp)
+{
+ return aia_mode == KVM_DEV_RISCV_AIA_MODE_EMUL;
+}
+
+static void riscv_set_kvm_aia_emul(Object *obj, bool val, Error **errp)
+{
+ riscv_set_kvm_aia_bool(KVM_DEV_RISCV_AIA_MODE_EMUL, val);
+}
+
+static bool riscv_get_kvm_aia_hwaccel(Object *obj, Error **errp)
+{
+ return aia_mode == KVM_DEV_RISCV_AIA_MODE_HWACCEL;
+}
+
+static void riscv_set_kvm_aia_hwaccel(Object *obj, bool val, Error **errp)
+{
+ riscv_set_kvm_aia_bool(KVM_DEV_RISCV_AIA_MODE_HWACCEL, val);
+}
+
+static bool riscv_get_kvm_aia_auto(Object *obj, Error **errp)
+{
+ return aia_mode == KVM_DEV_RISCV_AIA_MODE_AUTO;
+}
+
+static void riscv_set_kvm_aia_auto(Object *obj, bool val, Error **errp)
+{
+ riscv_set_kvm_aia_bool(KVM_DEV_RISCV_AIA_MODE_AUTO, val);
+}
+
void kvm_arch_accel_class_init(ObjectClass *oc)
{
object_class_property_add_str(oc, "riscv-aia", riscv_get_kvm_aia,
@@ -1681,6 +1737,27 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
"if the host supports it");
object_property_set_default_str(object_class_property_find(oc, "riscv-aia"),
"auto");
+
+ object_class_property_add_bool(oc, "riscv-aia-emul",
+ riscv_get_kvm_aia_emul,
+ riscv_set_kvm_aia_emul);
+ object_class_property_set_description(oc, "riscv-aia-emul",
+ "Set KVM AIA mode to 'emul'. Changing KVM AIA modes relies on host "
+ "support. Default mode is 'auto' if the host supports it");
+
+ object_class_property_add_bool(oc, "riscv-aia-hwaccel",
+ riscv_get_kvm_aia_hwaccel,
+ riscv_set_kvm_aia_hwaccel);
+ object_class_property_set_description(oc, "riscv-aia-hwaccel",
+ "Set KVM AIA mode to 'hwaccel'. Changing KVM AIA modes relies on host "
+ "support. Default mode is 'auto' if the host supports it");
+
+ object_class_property_add_bool(oc, "riscv-aia-auto",
+ riscv_get_kvm_aia_auto,
+ riscv_set_kvm_aia_auto);
+ object_class_property_set_description(oc, "riscv-aia-auto",
+ "Set KVM AIA mode to 'auto'. Changing KVM AIA modes "
+ "relies on host support");
}
void kvm_riscv_aia_create(MachineState *machine, uint64_t group_shift,
--
2.45.2
next prev parent reply other threads:[~2024-09-24 12:44 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-24 12:44 [PATCH 0/4] target/riscv/kvm: add riscv-aia bool props Daniel Henrique Barboza
2024-09-24 12:44 ` [PATCH 1/4] target/riscv/kvm: set 'aia_mode' to default in error path Daniel Henrique Barboza
2024-10-11 1:42 ` Alistair Francis
2024-09-24 12:44 ` [PATCH 2/4] target/riscv/kvm: clarify how 'riscv-aia' default works Daniel Henrique Barboza
2024-10-11 1:54 ` Alistair Francis
2024-09-24 12:44 ` Daniel Henrique Barboza [this message]
2024-10-11 1:57 ` [PATCH 3/4] target/riscv/kvm: add kvm-aia bools props Alistair Francis
2024-10-11 11:19 ` Daniel Henrique Barboza
2024-10-30 1:40 ` Alistair Francis
2024-10-31 13:50 ` Andrew Jones
2024-09-24 12:44 ` [PATCH 4/4] target/riscv/kvm: deprecate riscv-aia string prop Daniel Henrique Barboza
2024-10-28 18:00 ` [PATCH 0/4] target/riscv/kvm: add riscv-aia bool props Daniel Henrique Barboza
2024-10-30 1:44 ` Alistair Francis
2024-10-31 14:06 ` Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240924124407.766495-4-dbarboza@ventanamicro.com \
--to=dbarboza@ventanamicro.com \
--cc=ajones@ventanamicro.com \
--cc=alistair.francis@wdc.com \
--cc=bmeng@tinylab.org \
--cc=liwei1518@gmail.com \
--cc=palmer@rivosinc.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=zhiwei_liu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.