x86/HVM: polish hvm_asid_init() a little

While the logic there covers asymmetric cases, the resulting log
messages would likely raise more confusion than clarify anything. Split
the BSP action from the AP one, indicating the odd CPU in the AP log
message, thus avoiding the impression that global state would have
changed.

While there also
- move g_disabled into .data.ro_after_init; only the BSP will ever write
  to it,
- make the function's parameter unsigned; no negative values may be
  passed in. Also reflect this in svm_asid_init().

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Jason Andryuk <jason.andryuk@amd.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
This commit is contained in:
Jan Beulich committed 2025-08-06 14:49:17 +02:00
1 parent 3d79573f02
commit b58ebec511
3 files changed
+10 -8

No files matched your search

+8 -6
View File
@@ -48,20 +48,22 @@ struct hvm_asid_data {
static DEFINE_PER_CPU(struct hvm_asid_data, hvm_asid_data);
void hvm_asid_init(int nasids)
void hvm_asid_init(unsigned int nasids)
{
static int8_t g_disabled = -1;
static int8_t __ro_after_init g_disabled = -1;
struct hvm_asid_data *data = &this_cpu(hvm_asid_data);
data->max_asid = nasids - 1;
data->disabled = !opt_asid_enabled || (nasids <= 1);
if ( g_disabled != data->disabled )
if ( g_disabled < 0 )
{
printk("HVM: ASIDs %sabled.\n", data->disabled ? "dis" : "en");
if ( g_disabled < 0 )
g_disabled = data->disabled;
g_disabled = data->disabled;
printk("HVM: ASIDs %sabled\n", data->disabled ? "dis" : "en");
}
else if ( g_disabled != data->disabled )
printk("HVM: CPU%u: ASIDs %sabled\n", smp_processor_id(),
data->disabled ? "dis" : "en");
/* Zero indicates 'invalid generation', so we start the count at one. */
data->core_asid_generation = 1;
+1 -1
View File
@@ -12,7 +12,7 @@
void svm_asid_init(const struct cpuinfo_x86 *c)
{
int nasids = 0;
unsigned int nasids = 0;
/* Check for erratum #170, and leave ASIDs disabled if it's present. */
if ( !cpu_has_amd_erratum(c, AMD_ERRATUM_170) )
+1 -1
View File
@@ -13,7 +13,7 @@ struct vcpu;
struct hvm_vcpu_asid;
/* Initialise ASID management for the current physical CPU. */
void hvm_asid_init(int nasids);
void hvm_asid_init(unsigned int nasids);
/* Invalidate a particular ASID allocation: forces re-allocation. */
void hvm_asid_flush_vcpu_asid(struct hvm_vcpu_asid *asid);
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.