On 11/10/21 13:15, Yang Zhong wrote:
This patch can enable numa support for 'info sgx' command
in the monitor, which can show detailed SGX EPC sections
info.
(qemu) info sgx
SGX support: enabled
SGX1 support: enabled
SGX2 support: enabled
FLC support: enabled
SECTION #0: size=67108864
SECTION #1: size=29360128
The QMP interface show:
(QEMU) query-sgx
{"return": {"sgx": true, "sgx2": true, "sgx1": true, "sections": \
[{"index": 0, "size": 67108864}, {"index": 1, "size": 29360128}], "flc":
true}}
Signed-off-by: Yang Zhong <yang.zh...@intel.com>
---
hw/i386/sgx.c | 25 +++++++++++++++++++++++--
target/i386/monitor.c | 11 +++++++++--
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/hw/i386/sgx.c b/hw/i386/sgx.c
index 906facb645..8af45925c6 100644
--- a/hw/i386/sgx.c
+++ b/hw/i386/sgx.c
@@ -126,6 +126,28 @@ SGXInfo *sgx_get_capabilities(Error **errp)
return info;
}
+static SGXEPCSectionList *sgx_get_epc_sections_list(void)
+{
+ GSList *device_list = sgx_epc_get_device_list();
+ SGXEPCSectionList *head = NULL, **tail = &head;
+ SGXEPCSection *section;
+ uint64_t i = 0;
+
+ for (; device_list; device_list = device_list->next) {
+ DeviceState *dev = device_list->data;
+ Object *obj = OBJECT(dev);
+
+ section = g_new0(SGXEPCSection, 1);
+ section->index = i++;
+ section->size = object_property_get_uint(obj, SGX_EPC_SIZE_PROP,
+ &error_abort);
+ QAPI_LIST_APPEND(tail, section);
+ }
+ g_slist_free(device_list);
+
+ return head;
+}
+
SGXInfo *sgx_get_info(Error **errp)
{
SGXInfo *info = NULL;
@@ -144,14 +166,13 @@ SGXInfo *sgx_get_info(Error **errp)
return NULL;
}
- SGXEPCState *sgx_epc = &pcms->sgx_epc;
info = g_new0(SGXInfo, 1);
info->sgx = true;
info->sgx1 = true;
info->sgx2 = true;
info->flc = true;
- info->section_size = sgx_epc->size;
+ info->sections = sgx_get_epc_sections_list();
return info;
}
diff --git a/target/i386/monitor.c b/target/i386/monitor.c
index 196c1c9e77..08e7d4a425 100644
--- a/target/i386/monitor.c
+++ b/target/i386/monitor.c
@@ -773,6 +773,7 @@ SGXInfo *qmp_query_sgx(Error **errp)
void hmp_info_sgx(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
+ SGXEPCSectionList *section_list, *section;
g_autoptr(SGXInfo) info = qmp_query_sgx(&err);
if (err) {
@@ -787,8 +788,14 @@ void hmp_info_sgx(Monitor *mon, const QDict *qdict)
info->sgx2 ? "enabled" : "disabled");
monitor_printf(mon, "FLC support: %s\n",
info->flc ? "enabled" : "disabled");
- monitor_printf(mon, "size: %" PRIu64 "\n",
- info->section_size);
+
+ section_list = info->sections;
+ for (section = section_list; section; section = section->next) {
+ monitor_printf(mon, "SECTION #%" PRId64 ": ",
+ section->value->index);
+ monitor_printf(mon, "size=%" PRIu64 "\n",
+ section->value->size);
+ }
}
SGXInfo *qmp_query_sgx_capabilities(Error **errp)
This needs to be squashed in the previous patch.
Paolo