struct pv_domain
{
- l1_pgentry_t **gdt_ldt_l1tab;
-
atomic_t nr_l4_pages;
/* Is a 32-bit PV guest? */
#define has_pirq(d) (!!((d)->arch.emulation_flags & X86_EMU_USE_PIRQ))
#define has_vpci(d) (!!((d)->arch.emulation_flags & X86_EMU_VPCI))
-#define gdt_ldt_pt_idx(v) \
- ((v)->vcpu_id >> (PAGETABLE_ORDER - GDT_LDT_VCPU_SHIFT))
-#define pv_gdt_ptes(v) \
- ((v)->domain->arch.pv.gdt_ldt_l1tab[gdt_ldt_pt_idx(v)] + \
- (((v)->vcpu_id << GDT_LDT_VCPU_SHIFT) & (L1_PAGETABLE_ENTRIES - 1)))
-#define pv_ldt_ptes(v) (pv_gdt_ptes(v) + 16)
-
struct pv_vcpu
{
/* map_domain_page() mapping cache. */
{
return create_perdomain_mapping(v->domain, GDT_VIRT_START(v),
1U << GDT_LDT_VCPU_SHIFT,
- v->domain->arch.pv.gdt_ldt_l1tab,
+ NIL(l1_pgentry_t *),
NULL);
}
pv_l1tf_domain_destroy(d);
XFREE(d->arch.pv.cpuidmasks);
-
- FREE_XENHEAP_PAGE(d->arch.pv.gdt_ldt_l1tab);
}
void noreturn cf_check continue_pv_domain(void);
pv_l1tf_domain_init(d);
- d->arch.pv.gdt_ldt_l1tab =
- alloc_xenheap_pages(0, MEMF_node(domain_to_node(d)));
- if ( !d->arch.pv.gdt_ldt_l1tab )
- goto fail;
- clear_page(d->arch.pv.gdt_ldt_l1tab);
-
if ( levelling_caps & ~LCAP_faulting &&
(d->arch.pv.cpuidmasks = xmemdup(&cpuidmask_defaults)) == NULL )
goto fail;