|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 05/18] x86/mm: prepare create_perdomain_mapping() for per-vCPU perdomain areas
On 07.10.2026 12:40, George Dunlap wrote: > From: Roger Pau Monné <roger.pau@xxxxxxxxxx> > > We want to change per-domain mappings to be per-vCPU mappings. In > preparation for that, we want to arrange that > create_perdomain_mapping() work either with a single perdomain area, > or with a per-vCPU perdomain area. > > Most of the remaining callers are already in a vCPU context. This is > no accident: the perdomain area has always been laid out in per-vCPU > slices -- each vCPU has its own GDT/LDT window, its own > COMPAT_ARG_XLAT pages, its own window of mapcache entries -- and each > vCPU's slice is set up as that vCPU is created. For these callers, we > just need to change the parameter from a domain pointer to a vCPU > pointer. Once the perdomain area itself becomes per-vCPU, the same > calls will populate the owning vCPU's own area rather than slices of a > shared one. > > One exception is the call in hvm_domain_initialise(). An HVM vCPU's > monitor table is created during vCPU initialisation, and > init_xen_l4_slots() stamps the perdomain slot into it at that point -- > far earlier than for PV, where the Xen slots are written only once > guest page tables are built. hvm_domain_initialise() therefore had an > explicit create_perdomain_mapping() call just to make the perdomain > root exist ahead of that. Move it to arch_vcpu_create(), covering HVM > and PV alike. With a single shared area, the call allocates at most > once per domain; but once each vCPU has its own perdomain area, this > is the call that will allocate every vCPU's root before any page > tables referencing it are built. vCPU creation is > where the call must end up; move it there directly. For PV guests > nothing observable changes: the root was already being created during > vCPU creation as a side effect (by mapcache_vcpu_init(), or failing > that pv_create_gdt_ldt_l1tab()); it now merely becomes explicit. > > Note that we cannot yet do a parallel movement of > free_perdomain_mappings(): the per-domain page-table hierarchy is > still a single domain-wide structure shared by all vCPUs, so tearing > it down from a per-vCPU path would pull the mappings out from under > sibling vCPUs (e.g. on a partially failed, retryable > XEN_DOMCTL_max_vcpus), and vCPU-create error paths can rely on domain > destruction to free a partially set up hierarchy. Teardown will move > to vCPU scope only once the structure itself becomes per-vCPU. > > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> > Assisted-by: Claude Code:claude-fable-5, Claude Code:claude-opus-4-8, Claude > Code:claude-opus-5-5 > Signed-off-by: George Dunlap <gwd@xxxxxxxxxxxxxx> Preferably with Roger's suggested comment adjustment: Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |