/* Override macros from asm/page.h to make them work with mfn_t */
#undef page_to_mfn
#define page_to_mfn(pg) _mfn(__page_to_mfn(pg))
+#undef mfn_to_page
+#define mfn_to_page(mfn) __mfn_to_page(mfn_x(mfn))
unsigned int __read_mostly m2p_compat_vstart = __HYPERVISOR_COMPAT_VIRT_START;
static int share_hotadd_m2p_table(struct mem_hotadd_info *info)
{
- unsigned long i, n, v, m2p_start_mfn = 0;
+ unsigned long i, n, v;
+ mfn_t m2p_start_mfn = INVALID_MFN;
l3_pgentry_t l3e;
l2_pgentry_t l2e;
l2e = l3e_to_l2e(l3e)[l2_table_offset(v)];
if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) )
continue;
- m2p_start_mfn = l2e_get_pfn(l2e);
+ m2p_start_mfn = l2e_get_mfn(l2e);
}
else
continue;
for ( i = 0; i < n; i++ )
{
- struct page_info *page = mfn_to_page(m2p_start_mfn + i);
- if (hotadd_mem_valid(m2p_start_mfn + i, info))
+ struct page_info *page = mfn_to_page(mfn_add(m2p_start_mfn, i));
+
+ if ( hotadd_mem_valid(mfn_x(mfn_add(m2p_start_mfn, i)), info) )
share_xen_page_with_privileged_guests(page, SHARE_ro);
}
}
l2e = l3e_to_l2e(l3e)[l2_table_offset(v)];
if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) )
continue;
- m2p_start_mfn = l2e_get_pfn(l2e);
+ m2p_start_mfn = l2e_get_mfn(l2e);
for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
{
- struct page_info *page = mfn_to_page(m2p_start_mfn + i);
- if (hotadd_mem_valid(m2p_start_mfn + i, info))
+ struct page_info *page = mfn_to_page(mfn_add(m2p_start_mfn, i));
+
+ if ( hotadd_mem_valid(mfn_x(mfn_add(m2p_start_mfn, i)), info) )
share_xen_page_with_privileged_guests(page, SHARE_ro);
}
}
unsigned long sva, eva;
l3_pgentry_t l3e;
l2_pgentry_t l2e;
- unsigned long spfn, epfn;
+ mfn_t spfn, epfn;
- spfn = info->spfn;
- epfn = info->epfn;
+ spfn = _mfn(info->spfn);
+ epfn = _mfn(info->epfn);
sva = (unsigned long)mfn_to_page(spfn);
eva = (unsigned long)mfn_to_page(epfn);
static int extend_frame_table(struct mem_hotadd_info *info)
{
- unsigned long cidx, nidx, eidx, spfn, epfn;
+ unsigned long cidx, nidx, eidx;
+ mfn_t spfn, epfn;
- spfn = info->spfn;
- epfn = info->epfn;
+ spfn = _mfn(info->spfn);
+ epfn = _mfn(info->epfn);
- eidx = (pfn_to_pdx(epfn) + PDX_GROUP_COUNT - 1) / PDX_GROUP_COUNT;
- nidx = cidx = pfn_to_pdx(spfn)/PDX_GROUP_COUNT;
+ eidx = (mfn_to_pdx(epfn) + PDX_GROUP_COUNT - 1) / PDX_GROUP_COUNT;
+ nidx = cidx = mfn_to_pdx(spfn)/PDX_GROUP_COUNT;
- ASSERT( pfn_to_pdx(epfn) <= (DIRECTMAP_SIZE >> PAGE_SHIFT) &&
- pfn_to_pdx(epfn) <= FRAMETABLE_NR );
+ ASSERT( mfn_to_pdx(epfn) <= (DIRECTMAP_SIZE >> PAGE_SHIFT) &&
+ mfn_to_pdx(epfn) <= FRAMETABLE_NR );
if ( test_bit(cidx, pdx_group_valid) )
cidx = find_next_zero_bit(pdx_group_valid, eidx, cidx);
for ( i = 0; i < n; i++ )
share_xen_page_with_privileged_guests(
- mfn_to_page(m2p_start_mfn + i), SHARE_ro);
+ mfn_to_page(_mfn(m2p_start_mfn + i)), SHARE_ro);
}
for ( v = RDWR_COMPAT_MPT_VIRT_START;
for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
share_xen_page_with_privileged_guests(
- mfn_to_page(m2p_start_mfn + i), SHARE_ro);
+ mfn_to_page(_mfn(m2p_start_mfn + i)), SHARE_ro);
}
/* Mark all of direct map NX if hardware supports it. */
*/
for (i = info->spfn; i < info->cur; i++)
{
- pg = mfn_to_page(i);
+ pg = mfn_to_page(_mfn(i));
pg->count_info = PGC_state_inuse;
}