ASSERT(root_pgt_pv_xen_slots < ROOT_PAGETABLE_PV_XEN_SLOTS);
if ( l4_table_offset(split_va) == l4_table_offset(split_va - 1) )
{
- l3_pgentry_t *l3tab;
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
- l3tab = alloc_xen_pagetable();
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
+ l3_pgentry_t *l3tab = alloc_xen_pagetable();
+
if ( l3tab )
{
const l3_pgentry_t *l3idle =
{
if ( system_state != SYS_STATE_early_boot )
{
- void *ptr;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
- ptr = alloc_xenheap_page();
- printk(" XXXX %s:%d %p\n", __FILE__, __LINE__, ptr);
+ void *ptr = alloc_xenheap_page();
+
BUG_ON(!hardware_domain && !ptr);
return ptr;
}
if ( !(l4e_get_flags(*pl4e) & _PAGE_PRESENT) )
{
bool locking = system_state > SYS_STATE_boot;
- l3_pgentry_t *pl3e;
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
- pl3e = alloc_xen_pagetable();
- printk(" XXXX %s:%s:%d %p\n", __FILE__, __func__, __LINE__, pl3e);
+ l3_pgentry_t *pl3e = alloc_xen_pagetable();
+
if ( !pl3e )
return NULL;
clear_page(pl3e);
if ( !(l3e_get_flags(*pl3e) & _PAGE_PRESENT) )
{
bool locking = system_state > SYS_STATE_boot;
- l2_pgentry_t *pl2e;
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
- pl2e= alloc_xen_pagetable();
- printk(" XXXX %s:%s:%d %p\n", __FILE__, __func__, __LINE__, pl2e);
+ l2_pgentry_t *pl2e = alloc_xen_pagetable();
+
if ( !pl2e )
return NULL;
clear_page(pl2e);
if ( !(l2e_get_flags(*pl2e) & _PAGE_PRESENT) )
{
bool locking = system_state > SYS_STATE_boot;
- l1_pgentry_t *pl1e;
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
- pl1e = alloc_xen_pagetable();
- printk(" XXXX %s:%s:%d %p\n", __FILE__, __func__, __LINE__, pl1e);
+ l1_pgentry_t *pl1e = alloc_xen_pagetable();
+
if ( !pl1e )
return NULL;
clear_page(pl1e);
nr_mfns -= i;
continue;
}
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
+
pl2e = alloc_xen_pagetable();
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
if ( pl2e == NULL )
return -ENOMEM;
nr_mfns -= i;
goto check_l3;
}
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
+
pl1e = alloc_xen_pagetable();
- printk(" XXXX %s:%s:%d\n", __FILE__, __func__, __LINE__);
if ( pl1e == NULL )
return -ENOMEM;
if ( !(l4e_get_flags(idle_pg_table[l4_table_offset(va)]) &
_PAGE_PRESENT) )
{
- l3_pgentry_t *pl3t;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
- pl3t = alloc_xen_pagetable();
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+ l3_pgentry_t *pl3t = alloc_xen_pagetable();
+
if ( !pl3t )
goto nomem;
clear_page(pl3t);
l4e_from_paddr(__pa(pl3t), __PAGE_HYPERVISOR_RW));
}
}
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
/* Create user-accessible L2 directory to map the MPT for guests. */
if ( (l3_ro_mpt = alloc_xen_pagetable()) == NULL )
goto nomem;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
clear_page(l3_ro_mpt);
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
l4e_write(&idle_pg_table[l4_table_offset(RO_MPT_VIRT_START)],
l4e_from_paddr(__pa(l3_ro_mpt), __PAGE_HYPERVISOR_RO | _PAGE_USER));
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
/*
* Allocate and map the machine-to-phys table.
* This also ensures L3 is present for fixmaps.
i += (1UL << PAGETABLE_ORDER) - 1;
continue;
}
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
if ( holes == 0 &&
(l1_pg = alloc_domheap_pages(NULL, 2 * PAGETABLE_ORDER,
memflags)) != NULL )
memflags &= ~MEMF_bits(~0U);
if ( !(memflags >> _MEMF_bits) )
memflags |= MEMF_bits(xenheap_bits);
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
pg = alloc_domheap_pages(NULL, order, memflags | MEMF_no_scrub);
if ( unlikely(pg == NULL) )
return NULL;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
for ( i = 0; i < (1u << order); i++ )
pg[i].count_info |= PGC_xen_heap;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
mfn = page_to_mfn(pg);
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
v = vmap(&mfn, 1u << order);
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
/* The assumption is xenheap is always mapped */
ASSERT(v);
return v;
if ( start >= vm_top[t] )
{
unsigned long va = (unsigned long)vm_bitmap(t) + vm_top[t] / 8;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
if ( !map_pages_to_xen(va, page_to_mfn(pg), 1, PAGE_HYPERVISOR) )
{
clear_page((void *)va);
continue;
}
}
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
+
free_domheap_page(pg);
if ( start >= vm_top[t] )
for ( ; va && nr--; ++mfn, cur += PAGE_SIZE * granularity )
{
- int rc;
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
- printk(" XXX map %lx, %"PRI_mfn", %u, %x\n", cur, mfn_x(*mfn),
- granularity, flags);
- rc = map_pages_to_xen(cur, *mfn, granularity, flags);
- if ( rc )
+ if ( map_pages_to_xen(cur, *mfn, granularity, flags) )
{
- printk(" XXX rc = %d\n", rc);
vunmap(va);
va = NULL;
}
- printk(" XXXX %s:%d\n", __FILE__, __LINE__);
}
return va;
ASSERT(va >= XEN_VIRT_START);
ASSERT(va < DIRECTMAP_VIRT_END);
-
-#if 0
- /* XXX interaction with the rest? See config.h for whole map. */
- if ( va >= VMAP_VIRT_START && va < VMAP_VIRT_END )
- return vmap_to_page(va);
-#endif
-
if ( va < XEN_VIRT_END )
va += DIRECTMAP_VIRT_START - XEN_VIRT_START + xen_phys_start;
else