l4e_from_intpte(pte_read_atomic(&l4e_get_intpte(*(l4ep))))
/* Write a pte atomically to memory. */
-#define l1e_write_atomic(l1ep, l1e) \
- pte_write_atomic(&l1e_get_intpte(*(l1ep)), l1e_get_intpte(l1e))
-#define l2e_write_atomic(l2ep, l2e) \
- pte_write_atomic(&l2e_get_intpte(*(l2ep)), l2e_get_intpte(l2e))
-#define l3e_write_atomic(l3ep, l3e) \
- pte_write_atomic(&l3e_get_intpte(*(l3ep)), l3e_get_intpte(l3e))
-#define l4e_write_atomic(l4ep, l4e) \
- pte_write_atomic(&l4e_get_intpte(*(l4ep)), l4e_get_intpte(l4e))
-
-/*
- * Write a pte safely but non-atomically to memory.
- * The PTE may become temporarily not-present during the update.
- */
#define l1e_write(l1ep, l1e) \
- pte_write(&l1e_get_intpte(*(l1ep)), l1e_get_intpte(l1e))
+ write_atomic(&l1e_get_intpte(*(l1ep)), l1e_get_intpte(l1e))
#define l2e_write(l2ep, l2e) \
- pte_write(&l2e_get_intpte(*(l2ep)), l2e_get_intpte(l2e))
+ write_atomic(&l2e_get_intpte(*(l2ep)), l2e_get_intpte(l2e))
#define l3e_write(l3ep, l3e) \
- pte_write(&l3e_get_intpte(*(l3ep)), l3e_get_intpte(l3e))
+ write_atomic(&l3e_get_intpte(*(l3ep)), l3e_get_intpte(l3e))
#define l4e_write(l4ep, l4e) \
- pte_write(&l4e_get_intpte(*(l4ep)), l4e_get_intpte(l4e))
+ write_atomic(&l4e_get_intpte(*(l4ep)), l4e_get_intpte(l4e))
/* Get direct integer representation of a pte's contents (intpte_t). */
#define l1e_get_intpte(x) ((x).l1)
!(flags & (_PAGE_PAT | MAP_SMALL_PAGES)) )
{
/* 1GB-page mapping. */
- l3e_write_atomic(pl3e, l3e_from_mfn(mfn, l1f_to_lNf(flags)));
+ l3e_write(pl3e, l3e_from_mfn(mfn, l1f_to_lNf(flags)));
if ( (l3e_get_flags(ol3e) & _PAGE_PRESENT) )
{
if ( (l3e_get_flags(*pl3e) & _PAGE_PRESENT) &&
(l3e_get_flags(*pl3e) & _PAGE_PSE) )
{
- l3e_write_atomic(pl3e,
- l3e_from_mfn(l2mfn, __PAGE_HYPERVISOR));
+ l3e_write(pl3e, l3e_from_mfn(l2mfn, __PAGE_HYPERVISOR));
l2mfn = INVALID_MFN;
}
if ( locking )
{
/* Super-page mapping. */
ol2e = *pl2e;
- l2e_write_atomic(pl2e, l2e_from_mfn(mfn, l1f_to_lNf(flags)));
+ l2e_write(pl2e, l2e_from_mfn(mfn, l1f_to_lNf(flags)));
if ( (l2e_get_flags(ol2e) & _PAGE_PRESENT) )
{
if ( (l2e_get_flags(*pl2e) & _PAGE_PRESENT) &&
(l2e_get_flags(*pl2e) & _PAGE_PSE) )
{
- l2e_write_atomic(pl2e, l2e_from_mfn(l1mfn,
- __PAGE_HYPERVISOR));
+ l2e_write(pl2e, l2e_from_mfn(l1mfn, __PAGE_HYPERVISOR));
l1mfn = INVALID_MFN;
}
if ( locking )
if ( !pl1e )
pl1e = map_l1t_from_l2e(*pl2e) + l1_table_offset(virt);
ol1e = *pl1e;
- l1e_write_atomic(pl1e, l1e_from_mfn(mfn, flags));
+ l1e_write(pl1e, l1e_from_mfn(mfn, flags));
UNMAP_DOMAIN_PAGE(pl1e);
if ( (l1e_get_flags(ol1e) & _PAGE_PRESENT) )
{
UNMAP_DOMAIN_PAGE(l1t);
if ( i == L1_PAGETABLE_ENTRIES )
{
- l2e_write_atomic(pl2e, l2e_from_pfn(base_mfn,
- l1f_to_lNf(flags)));
+ l2e_write(pl2e, l2e_from_pfn(base_mfn, l1f_to_lNf(flags)));
if ( locking )
spin_unlock(&map_pgdir_lock);
flush_area(virt - PAGE_SIZE,
UNMAP_DOMAIN_PAGE(l2t);
if ( i == L2_PAGETABLE_ENTRIES )
{
- l3e_write_atomic(pl3e, l3e_from_pfn(base_mfn,
- l1f_to_lNf(flags)));
+ l3e_write(pl3e, l3e_from_pfn(base_mfn, l1f_to_lNf(flags)));
if ( locking )
spin_unlock(&map_pgdir_lock);
flush_area(virt - PAGE_SIZE,
: l3e_from_pfn(l3e_get_pfn(*pl3e),
(l3e_get_flags(*pl3e) & ~FLAGS_MASK) | nf);
- l3e_write_atomic(pl3e, nl3e);
+ l3e_write(pl3e, nl3e);
v += 1UL << L3_PAGETABLE_SHIFT;
continue;
}
if ( (l3e_get_flags(*pl3e) & _PAGE_PRESENT) &&
(l3e_get_flags(*pl3e) & _PAGE_PSE) )
{
- l3e_write_atomic(pl3e,
- l3e_from_mfn(l2mfn, __PAGE_HYPERVISOR));
+ l3e_write(pl3e, l3e_from_mfn(l2mfn, __PAGE_HYPERVISOR));
l2mfn = INVALID_MFN;
}
if ( locking )
: l2e_from_pfn(l2e_get_pfn(*pl2e),
(l2e_get_flags(*pl2e) & ~FLAGS_MASK) | nf);
- l2e_write_atomic(pl2e, nl2e);
+ l2e_write(pl2e, nl2e);
v += 1UL << L2_PAGETABLE_SHIFT;
}
else
if ( (l2e_get_flags(*pl2e) & _PAGE_PRESENT) &&
(l2e_get_flags(*pl2e) & _PAGE_PSE) )
{
- l2e_write_atomic(pl2e, l2e_from_mfn(l1mfn,
- __PAGE_HYPERVISOR));
+ l2e_write(pl2e, l2e_from_mfn(l1mfn, __PAGE_HYPERVISOR));
l1mfn = INVALID_MFN;
}
if ( locking )
: l1e_from_pfn(l1e_get_pfn(*pl1e),
(l1e_get_flags(*pl1e) & ~FLAGS_MASK) | nf);
- l1e_write_atomic(pl1e, nl1e);
+ l1e_write(pl1e, nl1e);
UNMAP_DOMAIN_PAGE(pl1e);
v += PAGE_SIZE;
if ( i == L1_PAGETABLE_ENTRIES )
{
/* Empty: zap the L2E and free the L1 page. */
- l2e_write_atomic(pl2e, l2e_empty());
+ l2e_write(pl2e, l2e_empty());
if ( locking )
spin_unlock(&map_pgdir_lock);
flush_area(NULL, FLUSH_TLB_GLOBAL); /* flush before free */
if ( i == L2_PAGETABLE_ENTRIES )
{
/* Empty: zap the L3E and free the L2 page. */
- l3e_write_atomic(pl3e, l3e_empty());
+ l3e_write(pl3e, l3e_empty());
if ( locking )
spin_unlock(&map_pgdir_lock);
flush_area(NULL, FLUSH_TLB_GLOBAL); /* flush before free */
{
ASSERT(IS_ALIGNED(v, 1UL << L2_PAGETABLE_SHIFT));
- l2e_write_atomic(pl2e, l2e_from_intpte((l2e.l2 & ~fm) | flags));
+ l2e_write(pl2e, l2e_from_intpte((l2e.l2 & ~fm) | flags));
v += 1UL << L2_PAGETABLE_SHIFT;
continue;
ASSERT(l1f & _PAGE_PRESENT);
- l1e_write_atomic(pl1e,
- l1e_from_intpte((l1e.l1 & ~fm) | flags));
+ l1e_write(pl1e, l1e_from_intpte((l1e.l1 & ~fm) | flags));
v += 1UL << L1_PAGETABLE_SHIFT;