Hi Jonathan,
On 3/19/26 06:46, Jonathan Cameron wrote:
On Wed, 18 Mar 2026 23:23:33 -0300
Gustavo Romero <[email protected]> wrote:
Add new machine option 'mec' that enables and sets the memory used by
FEAT_MEC.
Signed-off-by: Gustavo Romero <[email protected]>
Drive by comments only. I'm curious enough to read the patches
but no idea if this is how people would like to see this implemented!
Thanks for taking a look at it and for you comments.
In which sense do you mean exactly? Do mind to elaborate a bit more on
it? If it's about the whole implementation, would it be about not
really encrypting data or something else? Please help me to understand it :)
I'm not sure if you're talking about just this patch or the whole
FEAT_MEC design.
Cheers,
Gustavo
Jonathan
static void create_secure_ram(VirtMachineState *vms,
MemoryRegion *secure_sysmem,
MemoryRegion *secure_tag_sysmem)
@@ -2267,6 +2288,8 @@ static void machvirt_init(MachineState *machine)
MemoryRegion *secure_sysmem = NULL;
MemoryRegion *tag_sysmem = NULL;
MemoryRegion *secure_tag_sysmem = NULL;
+ MemoryRegion *pseudo_encrypted_page = NULL;
+ MemoryRegion *tuple_memory = NULL;
int n, virt_max_cpus;
bool firmware_loaded;
bool aarch64 = true;
@@ -2495,6 +2518,28 @@ static void machvirt_init(MachineState *machine)
}
}
+ if (vms->mec) {
+ if (tcg_enabled()) {
+ if (tuple_memory == NULL) {
+ /* XXX(gromero): Add object_property_find(cpuobj,
"tuple-memory", ...) here. */
+
+ tuple_memory = g_new(MemoryRegion, 1);
+ memory_region_init(tuple_memory, OBJECT(machine), "mec",
UINT64_MAX / 32);
+
+ pseudo_encrypted_page = g_new(MemoryRegion, 1);
+ memory_region_init(pseudo_encrypted_page, OBJECT(machine),
"mec-page", 4 * 1024 /* 4 KiB */);
+ }
+
+ object_property_set_link(cpuobj, "mec", OBJECT(tuple_memory),
&error_abort);
+ object_property_set_link(cpuobj, "mec-page",
OBJECT(pseudo_encrypted_page), &error_abort);
Trivial but some bonus spaces.
+
+ } else {
Indent seems off.
+ /* Check for other accels here. */
+ error_report("MEC requested, but not supported");
+ exit(1);
+ }
+ }
+
qdev_realize(DEVICE(cpuobj), NULL, &error_fatal);
object_unref(cpuobj);
}