On 29/10/2024 9:42 am, Roger Pau Monne wrote: > It's possible to have XPTI not active for all PV domains (active for domUs, > inactive for dom0), hence don't gate setting the per-domain slot on the > presence of the per-pCPU shadow root page-table. Instead set the slot based > on > whether XPTI is active for the domain. This avoid pointlessly setting the > per-domain slot if the shadow root page-table won't be used by the domain. > > Fixes: 0d3e7f0b6bf0 ('xen/x86: support per-domain flag for xpti') > Signed-off-by: Roger Pau Monné <roger....@citrix.com> > --- > xen/arch/x86/domain.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c > index 78a13e6812c9..fd6bb3663027 100644 > --- a/xen/arch/x86/domain.c > +++ b/xen/arch/x86/domain.c > @@ -1902,12 +1902,11 @@ void cf_check paravirt_ctxt_switch_from(struct vcpu > *v) > > void cf_check paravirt_ctxt_switch_to(struct vcpu *v) > { > - root_pgentry_t *root_pgt = this_cpu(root_pgt); > + const struct domain *d = v->domain; > > - if ( root_pgt ) > - root_pgt[root_table_offset(PERDOMAIN_VIRT_START)] = > - l4e_from_page(v->domain->arch.perdomain_l3_pg, > - __PAGE_HYPERVISOR_RW); > + if ( d->arch.pv.xpti ) > + this_cpu(root_pgt)[root_table_offset(PERDOMAIN_VIRT_START)] = > + l4e_from_page(d->arch.perdomain_l3_pg, __PAGE_HYPERVISOR_RW);
I'm not sure this is a wise change. You're only optimising away a single PTE calculation/write, at the cost of retaining a mapping to the wrong domain's perdom area; whichever the last domain to schedule on this pCPU was. ~Andrew