|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/HVM: polish hvm_asid_init() a little
On 04.08.2025 17:41, Jan Beulich wrote:
> 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@xxxxxxxx>
Sorry, I meant to Cc: you on the submission, as it was the reviewing of
your copied code which made me spot the shortcomings (which, as indicated,
I think it would be nice if you avoided from the very start).
Jan
> --- a/xen/arch/x86/hvm/asid.c
> +++ b/xen/arch/x86/hvm/asid.c
> @@ -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;
> --- a/xen/arch/x86/hvm/svm/asid.c
> +++ b/xen/arch/x86/hvm/svm/asid.c
> @@ -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) )
> --- a/xen/arch/x86/include/asm/hvm/asid.h
> +++ b/xen/arch/x86/include/asm/hvm/asid.h
> @@ -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);
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |