On 26.07.2024 17:21, Roger Pau Monne wrote: > @@ -1673,13 +1668,14 @@ void init_xen_l4_slots(l4_pgentry_t *l4t, mfn_t l4mfn, > l4e_from_mfn(sl4mfn, __PAGE_HYPERVISOR_RW); > > /* Slot 260: Per-domain mappings. */ > - l4t[l4_table_offset(PERDOMAIN_VIRT_START)] = > - l4e_from_page(d->arch.perdomain_l3_pg, __PAGE_HYPERVISOR_RW); > + if ( perdomain_l3 ) > + l4t[l4_table_offset(PERDOMAIN_VIRT_START)] = > + l4e_from_page(perdomain_l3, __PAGE_HYPERVISOR_RW); > > /* Slot 4: Per-domain mappings mirror. */ > BUILD_BUG_ON(IS_ENABLED(CONFIG_PV32) && > !l4_table_offset(PERDOMAIN_ALT_VIRT_START)); > - if ( !is_pv_64bit_domain(d) ) > + if ( perdomain_l3 && maybe_compat ) > l4t[l4_table_offset(PERDOMAIN_ALT_VIRT_START)] = > l4t[l4_table_offset(PERDOMAIN_VIRT_START)];
I think it would be nice if the description could clarify why we need checks of perdomain_l3 twice here. I assume going forward you want to be able to pass in NULL. Therefore, if the conditionals are required, I think it would make sense to have just one, enclosing both (related) writes. Jan