On 2/3/23 03:44, Cornelia Huck wrote:
+static void aarch64_cpu_get_mte(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ ARMCPU *cpu = ARM_CPU(obj);
+ OnOffAuto mte = cpu->prop_mte;
+
+ visit_type_OnOffAuto(v, name, &mte, errp);
+}
You don't need to copy to a local variable here.
+
+static void aarch64_cpu_set_mte(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ ARMCPU *cpu = ARM_CPU(obj);
+
+ visit_type_OnOffAuto(v, name, &cpu->prop_mte, errp);
+}
... which makes get and set functions identical.
No need for both.
+static inline bool arm_machine_has_tag_memory(void)
+{
+#ifndef CONFIG_USER_ONLY
+ Object *obj = object_dynamic_cast(qdev_get_machine(), TYPE_VIRT_MACHINE);
+
+ /* so far, only the virt machine has support for tag memory */
+ if (obj) {
+ VirtMachineState *vms = VIRT_MACHINE(obj);
VIRT_MACHINE() does object_dynamic_cast_assert, and we've just done that.
As this is startup, it's not the speed that matters. But it does look unfortunate. Not
for this patch set, but perhaps we ought to add TRY_OBJ_NAME to DECLARE_INSTANCE_CHECKER?
+void arm_cpu_mte_finalize(ARMCPU *cpu, Error **errp)
+{
+ bool enable_mte;
+
+ switch (cpu->prop_mte) {
+ case ON_OFF_AUTO_OFF:
+ enable_mte = false;
+ break;
+ case ON_OFF_AUTO_ON:
+ if (tcg_enabled()) {
+ if (cpu_isar_feature(aa64_mte, cpu)) {
+ if (!arm_machine_has_tag_memory()) {
+ error_setg(errp, "mte=on requires tag memory");
+ return;
+ }
+ } else {
+ error_setg(errp, "mte not supported by this CPU type");
+ return;
+ }
+ }
+ if (kvm_enabled() && !kvm_arm_mte_supported()) {
+ error_setg(errp, "mte not supported by kvm");
+ return;
+ }
+ enable_mte = true;
+ break;
What's here is not wrong, but maybe better structured as
enable_mte = true;
if (qtest_enabled()) {
break;
}
if (tcg_enabled()) {
if (arm_machine_tag_mem) {
break;
}
error;
return;
}
if (kvm_enabled() && kvm_arm_mte_supported) {
break;
}
error("mte not supported by %s", current_accel_type());
return;
We only add the property for tcg via -cpu max, so the isar check is redundant.
r~