x86/cpu-policy: Fix handling of leaf 0x80000021

When support was originally introduced, ebx, ecx and edx were reserved and
should have been zeroed in recalculate_misc() to avoid leaking into guests.

Since then, fields have been added into ebx.  Guests can't load microcode, so
shouldn't see ucode_size, and while in principle we do want to support larger
RAP sizes in guests, virtualising this for guests depends on AMD procuding any
official documentation for ERAPS, which is long overdue and with no ETA.

This patch will cause a difference in guests on Zen5 CPUs, but as the main
ERAPS feature is hidden, guests should be ignoring the rap_size field too.

Fixes: e9b4fe2636 ("x86/cpuid: support LFENCE always serialising CPUID bit")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
(cherry picked from commit 10dc35c516)
This commit is contained in:
Andrew Cooper committed 2025-07-07 22:52:11 +01:00
1 parent dcc9c3ae8f
commit 60820cd4fd
2 files changed
+7 -1

No files matched your search

+3
View File
@@ -341,6 +341,9 @@ static void recalculate_misc(struct cpu_policy *p)
p->extd.raw[0x1e] = EMPTY_LEAF; /* TopoExt APIC ID/Core/Node */
p->extd.raw[0x1f] = EMPTY_LEAF; /* SEV */
p->extd.raw[0x20] = EMPTY_LEAF; /* Platform QoS */
p->extd.raw[0x21].b = 0;
p->extd.raw[0x21].c = 0;
p->extd.raw[0x21].d = 0;
break;
}
}
+4 -1
View File
@@ -324,7 +324,10 @@ struct cpu_policy
uint32_t e21a;
struct { DECL_BITFIELD(e21a); };
};
uint32_t /* b */:32, /* c */:32, /* d */:32;
uint16_t ucode_size; /* Units of 16 bytes */
uint8_t rap_size; /* Units of 8 entries */
uint8_t :8;
uint32_t /* c */:32, /* d */:32;
};
} extd;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.