From: Markus Armbruster <armbru@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, marcandre.lureau@redhat.com,
pbonzini@redhat.com, berrange@redhat.com, stanleyjhu@google.com,
jeuk20.kim@samsung.com
Subject: [PATCH v8 48.5/56] hw/ufs: Convert PropertyInfo to QAPITypeInfo
Date: Mon, 02 Nov 2026 10:49:37 +0100 [thread overview]
Message-ID: <87tslzr2a6.fsf_-_@pond.sub.org> (raw)
In-Reply-To: <20261101201717.3911097-49-armbru@redhat.com> (Markus Armbruster's message of "Sun, 1 Nov 2026 21:17:09 +0100")
This gives properties "x-fault-inject-tag" and "x-fault-inject-mode" a
generated type_info with a valid masked_name, so it appears in
query-qmp-schema introspection and the qapi-type field of
qom-list-properties output.
The conversion is trivial for ufs_prop_get_fault_inject_tag. For
ufs_prop_get_fault_inject_tag, we need to conver UfsFaultInjectMode to
a QAPI enum.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
Fixup needed for commit c821f2f69f1 (hw/ufs: Add experimental fault
injection properties for holding requests)
qapi/common.json | 30 ++++++++++++++++++++++++++++++
hw/ufs/ufs.h | 34 ----------------------------------
hw/ufs/ufs.c | 15 +++------------
3 files changed, 33 insertions(+), 46 deletions(-)
diff --git a/qapi/common.json b/qapi/common.json
index 68b649ecf2..84f12c133a 100644
--- a/qapi/common.json
+++ b/qapi/common.json
@@ -245,3 +245,33 @@
'tm_hour': 'int32',
'tm_min': 'int32',
'tm_sec': 'int32' } }
+
+##
+# @UfsFaultInjectMode:
+# Fault injection modes for x-fault-inject-mode property.
+# Controls how the held transfer request and subsequent Task
+# Management Request (TMR) are resolved by the controller:
+#
+# @abort-success: TMR ABORT_TASK aborts the held request, clears its
+# state, and returns SUCCESS (COMPL).
+#
+# @abort-failed: TMR ABORT_TASK returns TASK_MANAGEMENT_FUNC_FAILED,
+# forcing host driver to escalate to Host Reset.
+#
+# @in-transition: TMR QUERY_TASK releases the held request to execute
+# normally through the SCSI layer and returns the real task status
+# (SUCCEEDED while the command is still in flight); ABORT_TASK
+# cancels the held request and returns FUNCTION_COMPLETE.
+#
+# @timeout: TMR ABORT_TASK does not complete or clear doorbell,
+# triggering hardware-level TMR timeout.
+#
+# @ssu-timeout: Intercepts SCSI START_STOP (0x1B) commands targeting
+# the UFS Device WLUN when x-fault-inject-tag is armed.
+#
+# Since: 11.2
+##
+{ 'enum': 'UfsFaultInjectMode',
+ 'prefix': 'UFS_FAULT_INJECT',
+ 'data': [ 'abort-success', 'abort-failed', 'in-transition', 'timeout',
+ 'ssu-timeout' ] }
diff --git a/hw/ufs/ufs.h b/hw/ufs/ufs.h
index 7ddc540546..0014978322 100644
--- a/hw/ufs/ufs.h
+++ b/hw/ufs/ufs.h
@@ -90,39 +90,6 @@ typedef struct UfsLu {
UfsScsiOp scsi_op;
} UfsLu;
-/*
- * Fault injection modes for x-fault-inject-mode property.
- * Controls how the held transfer request and subsequent Task Management
- * Request (TMR) are resolved by the controller:
- *
- * UFS_FAULT_INJECT_ABORT_SUCCESS: TMR ABORT_TASK aborts the held request,
- * clears its state, and returns SUCCESS
- * (COMPL).
- * UFS_FAULT_INJECT_ABORT_FAILED: TMR ABORT_TASK returns
- * TASK_MANAGEMENT_FUNC_FAILED, forcing host
- * driver to escalate to Host Reset.
- * UFS_FAULT_INJECT_IN_TRANSITION: TMR QUERY_TASK releases the held request to
- * execute normally through the SCSI layer and
- * returns the real task status (SUCCEEDED while
- * the command is still in flight);
- * ABORT_TASK cancels the held request and
- * returns FUNCTION_COMPLETE.
- * UFS_FAULT_INJECT_TIMEOUT: TMR ABORT_TASK does not complete or clear
- * doorbell, triggering hardware-level TMR
- * timeout.
- * UFS_FAULT_INJECT_SSU_TIMEOUT: Intercepts SCSI START_STOP (0x1B) commands
- * targeting the UFS Device WLUN when
- * x-fault-inject-tag is armed.
- */
-typedef enum UfsFaultInjectMode {
- UFS_FAULT_INJECT_ABORT_SUCCESS = 0,
- UFS_FAULT_INJECT_ABORT_FAILED,
- UFS_FAULT_INJECT_IN_TRANSITION,
- UFS_FAULT_INJECT_TIMEOUT,
- UFS_FAULT_INJECT_SSU_TIMEOUT,
- UFS_FAULT_INJECT_MODE_MAX,
-} UfsFaultInjectMode;
-
/*
* Sentinel values for x-fault-inject-tag property.
* Task Tags in UFS are 8-bit (0..255). Values >= 256 are reserved as
@@ -375,6 +342,5 @@ void ufs_unrealize(UfsHc *u);
extern const PropertyInfo ufs_prop_fault_inject_tag;
extern const PropertyInfo ufs_prop_fault_inject_mode;
-extern const QEnumLookup UfsFaultInjectMode_lookup;
#endif /* HW_UFS_UFS_H */
diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c
index f8da7c9554..3de67831ea 100644
--- a/hw/ufs/ufs.c
+++ b/hw/ufs/ufs.c
@@ -15,6 +15,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-type-infos-common.h"
#include "qapi/visitor.h"
#include "scsi/constants.h"
#include "hw/core/irq.h"
@@ -3234,17 +3235,6 @@ static void ufs_init_hc(UfsHc *u)
ufs_fault_inject_init(u);
}
-const QEnumLookup UfsFaultInjectMode_lookup = {
- .array = (const char *const[]) {
- [UFS_FAULT_INJECT_ABORT_SUCCESS] = "abort-success",
- [UFS_FAULT_INJECT_ABORT_FAILED] = "abort-failed",
- [UFS_FAULT_INJECT_IN_TRANSITION] = "in-transition",
- [UFS_FAULT_INJECT_TIMEOUT] = "timeout",
- [UFS_FAULT_INJECT_SSU_TIMEOUT] = "ssu-timeout",
- },
- .size = UFS_FAULT_INJECT_MODE_MAX,
-};
-
static void ufs_prop_get_fault_inject_tag(Object *obj, Visitor *v,
const char *name, void *opaque,
Error **errp)
@@ -3300,6 +3290,7 @@ static void ufs_prop_set_default_fault_inject_tag(ObjectProperty *op,
const PropertyInfo ufs_prop_fault_inject_tag = {
.type = "uint32",
+ .qapi_type = &uint32_type_info,
.description = "Task tag to hold for fault injection",
.get = ufs_prop_get_fault_inject_tag,
.set = ufs_prop_set_fault_inject_tag,
@@ -3309,9 +3300,9 @@ const PropertyInfo ufs_prop_fault_inject_tag = {
const PropertyInfo ufs_prop_fault_inject_mode = {
.type = "UfsFaultInjectMode",
+ .qapi_type = &UfsFaultInjectMode_type_info,
.description = "Fault injection mode: abort-success, abort-failed, "
"in-transition, timeout, ssu-timeout",
- .enum_table = &UfsFaultInjectMode_lookup,
.get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum,
.set_default_value = qdev_propinfo_set_default_value_enum,
--
2.55.0
next prev parent reply other threads:[~2026-11-02 9:50 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-01 20:16 [PATCH v8 RESEND 00/56] qom/qdev: associate properties with QAPI schema types Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 01/56] qapi/schema: Rename .lookup_entity() and tighten return type Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 02/56] qapi: Ease access to introspection names Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 03/56] qapi/introspect: Simplify masked name comment emission slighly Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 04/56] qapi/introspect: Don't elide types Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 05/56] qapi: QAPISchemaVisitor.visit_needed() is now unused, drop Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 06/56] qapi/introspect: Tweak integer type masking Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 07/56] qapi: add QAPITypeInfo struct definition Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 08/56] qapi/gen: fix _module_basename for multi-dash 'what' parameters Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 09/56] qapi: add type-infos generator Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 10/56] qom: add qapi_type field to ObjectProperty Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 11/56] qapi/qom: add qapi-type to qom-list, qom-list-properties, qom-list-get Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 12/56] qom/qmp: populate qapi-type in QMP handlers Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 13/56] qom/qmp: populate description & default-value in qom_property_info() Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 14/56] qom: New object_property_add() etc. parameter @qapi_type Markus Armbruster
2026-11-02 5:33 ` marcandre.lureau
2026-11-02 7:33 ` Markus Armbruster
2026-11-02 8:38 ` Markus Armbruster
2026-11-02 8:49 ` Marc-André Lureau
2026-11-01 20:16 ` [PATCH v8 15/56] qom/object: Move enum property code so it is together Markus Armbruster
2026-11-02 5:33 ` marcandre.lureau
2026-11-01 20:16 ` [PATCH v8 16/56] qom: New object_property_add_enum() etc. parameter @qapi_type Markus Armbruster
2026-11-02 5:33 ` marcandre.lureau
2026-11-01 20:16 ` [PATCH v8 17/56] tests: update check-qom-proplist for QAPI-aware property registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 18/56] qom: convert QAPI enum properties to QAPI-aware registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 19/56] qom: convert struct " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 20/56] x86: convert OnOffAuto " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 21/56] microvm: " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 22/56] pc: convert OnOffAuto vmport property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 23/56] arm/virt: convert OnOffAuto acpi " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 24/56] riscv/virt: convert OnOffAuto properties " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 25/56] loongarch/virt: " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 26/56] hostmem: convert OnOffAuto rom property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 27/56] sev: convert OnOffAuto legacy-vm-type " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 28/56] whpx: convert OnOffAuto hyperv " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 29/56] whpx: convert OnOffAuto arch properties " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 30/56] accel/kvm: convert OnOffSplit property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 31/56] whpx: " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 32/56] ppc/spapr-caps: convert to QAPI-aware property registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 33/56] net/colo-compare: fix compare_timeout setter visitor type Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 34/56] net/colo-compare: fix max_queue_size " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 35/56] hw/misc/xlnx-versal-trng: add missing getter for fips-fault-events Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 36/56] qom: convert scalar properties to QAPI-aware registration Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 37/56] i386/cpu: convert strList property " Markus Armbruster
2026-11-01 20:16 ` [PATCH v8 38/56] accel/hvf: convert OnOffSplit " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 39/56] i386/x86: convert SgxEPCList " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 40/56] virtio-balloon: convert guest-stats property to QAPI type Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 41/56] qom: replace object_property_add_tm with StructTm " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 42/56] hw/nvdimm: convert UUID property to QAPI-aware registration Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 43/56] hw/s390-virtio-ccw: convert loadparm " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 44/56] hw/ppc/spapr_drc: convert fdt " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 45/56] hw/s390x: convert BootCertificatesList " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 46/56] qdev: add qapi_type field to PropertyInfo with fallback registration Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 47/56] qdev: convert core PropertyInfo definitions to use qapi_type Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 48/56] qdev: convert system " Markus Armbruster
2026-11-02 9:49 ` Markus Armbruster [this message]
2026-11-02 11:20 ` [PATCH v8 48.5/56] hw/ufs: Convert PropertyInfo to QAPITypeInfo Marc-André Lureau
2026-11-01 20:17 ` [PATCH v8 49/56] hw: convert device-local PropertyInfo definitions to use qapi_type Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 50/56] target/riscv: convert " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 51/56] qdev: " Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 52/56] qdev: PropertyInfo.enum_table is no longer used, drop Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 53/56] hw/i386: convert PCSouthBridgeOption to QAPI enum Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 54/56] qom: Drop object_property_add_enum() parameter @lookup Markus Armbruster
2026-11-02 5:39 ` marcandre.lureau
2026-11-01 20:17 ` [PATCH v8 55/56] qom: use QAPITypeInfo in object_property_get_enum Markus Armbruster
2026-11-01 20:17 ` [PATCH v8 56/56] tests/qmp-cmd-test: assert qapi-type resolves in query-qmp-schema Markus Armbruster
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=87tslzr2a6.fsf_-_@pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=jeuk20.kim@samsung.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stanleyjhu@google.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.