Mailing List Archive

Remove direct references to frame_table array. Use
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Node ID 3d1c7be170a7b27adc58309961ce7d476984874b
# Parent 1283d309a6034aa99b8347e1500f2f47e0b65e6a
Remove direct references to frame_table array. Use
pfn_to_page (or page_to_pfn) instead.

Signed-off-by: Keir Fraser <keir@xensource.com>

diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/audit.c
--- a/xen/arch/x86/audit.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/audit.c Tue Dec 20 11:46:56 2005
@@ -61,7 +61,7 @@
#ifdef __i386__
#ifdef CONFIG_X86_PAE
/* 32b PAE */
- if ( (( frame_table[mfn].u.inuse.type_info & PGT_va_mask )
+ if ( (( pfn_to_page(mfn)->u.inuse.type_info & PGT_va_mask )
>> PGT_va_shift) == 3 )
return l2_table_offset(HYPERVISOR_VIRT_START);
else
@@ -364,7 +364,7 @@
{
gmfn = __gpfn_to_mfn(d, a->gpfn_and_flags & PGT_mfn_mask);
smfn = a->smfn;
- page = &frame_table[smfn];
+ page = pfn_to_page(smfn);

switch ( a->gpfn_and_flags & PGT_type_mask ) {
case PGT_writable_pred:
@@ -433,11 +433,13 @@
for_each_vcpu(d, v)
{
if ( pagetable_get_paddr(v->arch.guest_table) )
- adjust(&frame_table[pagetable_get_pfn(v->arch.guest_table)], !shadow_mode_refcounts(d));
+ adjust(pfn_to_page(pagetable_get_pfn(v->arch.guest_table)),
+ !shadow_mode_refcounts(d));
if ( pagetable_get_paddr(v->arch.shadow_table) )
- adjust(&frame_table[pagetable_get_pfn(v->arch.shadow_table)], 0);
+ adjust(pfn_to_page(pagetable_get_pfn(v->arch.shadow_table)),
+ 0);
if ( v->arch.monitor_shadow_ref )
- adjust(&frame_table[v->arch.monitor_shadow_ref], 0);
+ adjust(pfn_to_page(v->arch.monitor_shadow_ref), 0);
}
}

@@ -617,7 +619,7 @@
void scan_for_pfn_in_mfn(struct domain *d, unsigned long xmfn,
unsigned long mfn)
{
- struct pfn_info *page = &frame_table[mfn];
+ struct pfn_info *page = pfn_to_page(mfn);
l1_pgentry_t *pt = map_domain_page(mfn);
int i;

diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/dom0_ops.c
--- a/xen/arch/x86/dom0_ops.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/dom0_ops.c Tue Dec 20 11:46:56 2005
@@ -210,7 +210,7 @@
unlikely((d = find_domain_by_id(dom)) == NULL) )
break;

- page = &frame_table[pfn];
+ page = pfn_to_page(pfn);

if ( likely(get_page(page, d)) )
{
@@ -285,7 +285,7 @@
struct pfn_info *page;
unsigned long mfn = l_arr[j];

- page = &frame_table[mfn];
+ page = pfn_to_page(mfn);

if ( likely(pfn_valid(mfn) && get_page(page, d)) )
{
@@ -350,15 +350,14 @@
list_ent = d->page_list.next;
for ( i = 0; (i < max_pfns) && (list_ent != &d->page_list); i++ )
{
- pfn = list_entry(list_ent, struct pfn_info, list) -
- frame_table;
+ pfn = page_to_pfn(list_entry(list_ent, struct pfn_info, list));
if ( put_user(pfn, buffer) )
{
ret = -EFAULT;
break;
}
buffer++;
- list_ent = frame_table[pfn].list.next;
+ list_ent = pfn_to_page(pfn)->list.next;
}
spin_unlock(&d->page_alloc_lock);

diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/domain.c Tue Dec 20 11:46:56 2005
@@ -190,7 +190,7 @@
list_for_each_entry ( page, &d->page_list, list )
{
printk("Page %p: mfn=%p, caf=%08x, taf=%" PRtype_info "\n",
- _p(page_to_phys(page)), _p(page - frame_table),
+ _p(page_to_phys(page)), _p(page_to_pfn(page)),
page->count_info, page->u.inuse.type_info);
}
}
@@ -198,13 +198,13 @@
list_for_each_entry ( page, &d->xenpage_list, list )
{
printk("XenPage %p: mfn=%p, caf=%08x, taf=%" PRtype_info "\n",
- _p(page_to_phys(page)), _p(page - frame_table),
+ _p(page_to_phys(page)), _p(page_to_pfn(page)),
page->count_info, page->u.inuse.type_info);
}

page = virt_to_page(d->shared_info);
printk("Shared_info@%p: mfn=%p, caf=%08x, taf=%" PRtype_info "\n",
- _p(page_to_phys(page)), _p(page - frame_table), page->count_info,
+ _p(page_to_phys(page)), _p(page_to_pfn(page)), page->count_info,
page->u.inuse.type_info);
}

@@ -391,19 +391,19 @@

if ( shadow_mode_refcounts(d) )
{
- if ( !get_page(&frame_table[phys_basetab>>PAGE_SHIFT], d) )
+ if ( !get_page(pfn_to_page(phys_basetab>>PAGE_SHIFT), d) )
return -EINVAL;
}
else if ( !(c->flags & VGCF_VMX_GUEST) )
{
- if ( !get_page_and_type(&frame_table[phys_basetab>>PAGE_SHIFT], d,
+ if ( !get_page_and_type(pfn_to_page(phys_basetab>>PAGE_SHIFT), d,
PGT_base_page_table) )
return -EINVAL;
}

if ( (rc = (int)set_gdt(v, c->gdt_frames, c->gdt_ents)) != 0 )
{
- put_page_and_type(&frame_table[phys_basetab>>PAGE_SHIFT]);
+ put_page_and_type(pfn_to_page(phys_basetab>>PAGE_SHIFT));
return rc;
}

diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/domain_build.c Tue Dec 20 11:46:56 2005
@@ -405,7 +405,7 @@
*l1tab = l1e_from_pfn(mfn, L1_PROT);
l1tab++;

- page = &frame_table[mfn];
+ page = pfn_to_page(mfn);
if ( !get_page_and_type(page, d, PGT_writable_page) )
BUG();

@@ -418,7 +418,7 @@
l1tab += l1_table_offset(vpt_start);
for ( count = 0; count < nr_pt_pages; count++ )
{
- page = &frame_table[l1e_get_pfn(*l1tab)];
+ page = pfn_to_page(l1e_get_pfn(*l1tab));
if ( !opt_dom0_shadow )
l1e_remove_flags(*l1tab, _PAGE_RW);
else
@@ -548,7 +548,7 @@
*l1tab = l1e_from_pfn(mfn, L1_PROT);
l1tab++;

- page = &frame_table[mfn];
+ page = pfn_to_page(mfn);
if ( (page->u.inuse.type_info == 0) &&
!get_page_and_type(page, d, PGT_writable_page) )
BUG();
@@ -567,7 +567,7 @@
for ( count = 0; count < nr_pt_pages; count++ )
{
l1e_remove_flags(*l1tab, _PAGE_RW);
- page = &frame_table[l1e_get_pfn(*l1tab)];
+ page = pfn_to_page(l1e_get_pfn(*l1tab));

/* Read-only mapping + PGC_allocated + page-table page. */
page->count_info = PGC_allocated | 3;
diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/mm.c Tue Dec 20 11:46:56 2005
@@ -202,7 +202,7 @@
/* First 1MB of RAM is historically marked as I/O. */
for ( i = 0; i < 0x100; i++ )
{
- page = &frame_table[i];
+ page = pfn_to_page(i);
page->count_info = PGC_allocated | 1;
page->u.inuse.type_info = PGT_writable_page | PGT_validated | 1;
page_set_owner(page, dom_io);
@@ -216,10 +216,10 @@
/* Every page from cursor to start of next RAM region is I/O. */
rstart_pfn = PFN_UP(e820.map[i].addr);
rend_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
- while ( pfn < rstart_pfn )
+ for ( ; pfn < rstart_pfn; pfn++ )
{
BUG_ON(!pfn_valid(pfn));
- page = &frame_table[pfn++];
+ page = pfn_to_page(pfn);
page->count_info = PGC_allocated | 1;
page->u.inuse.type_info = PGT_writable_page | PGT_validated | 1;
page_set_owner(page, dom_io);
@@ -253,7 +253,7 @@
pfn = l1e_get_pfn(v->arch.perdomain_ptes[i]);
if ( pfn == 0 ) continue;
v->arch.perdomain_ptes[i] = l1e_empty();
- page = &frame_table[pfn];
+ page = pfn_to_page(pfn);
ASSERT_PAGE_IS_TYPE(page, PGT_ldt_page);
ASSERT_PAGE_IS_DOMAIN(page, v->domain);
put_page_and_type(page);
@@ -320,13 +320,13 @@
if ( unlikely(!VALID_MFN(gmfn)) )
return 0;

- res = get_page_and_type(&frame_table[gmfn], d, PGT_ldt_page);
+ res = get_page_and_type(pfn_to_page(gmfn), d, PGT_ldt_page);

if ( !res && unlikely(shadow_mode_refcounts(d)) )
{
shadow_lock(d);
shadow_remove_all_write_access(d, gpfn, gmfn);
- res = get_page_and_type(&frame_table[gmfn], d, PGT_ldt_page);
+ res = get_page_and_type(pfn_to_page(gmfn), d, PGT_ldt_page);
shadow_unlock(d);
}

@@ -344,7 +344,7 @@

static int get_page_from_pagenr(unsigned long page_nr, struct domain *d)
{
- struct pfn_info *page = &frame_table[page_nr];
+ struct pfn_info *page = pfn_to_page(page_nr);

if ( unlikely(!pfn_valid(page_nr)) || unlikely(!get_page(page, d)) )
{
@@ -360,7 +360,7 @@
unsigned long type,
struct domain *d)
{
- struct pfn_info *page = &frame_table[page_nr];
+ struct pfn_info *page = pfn_to_page(page_nr);

if ( unlikely(!get_page_from_pagenr(page_nr, d)) )
return 0;
@@ -412,7 +412,7 @@
* Make sure that the mapped frame is an already-validated L2 table.
* If so, atomically increment the count (checking for overflow).
*/
- page = &frame_table[pfn];
+ page = pfn_to_page(pfn);
y = page->u.inuse.type_info;
do {
x = y;
@@ -435,7 +435,7 @@
l1_pgentry_t l1e, struct domain *d)
{
unsigned long mfn = l1e_get_pfn(l1e);
- struct pfn_info *page = &frame_table[mfn];
+ struct pfn_info *page = pfn_to_page(mfn);
int okay;
extern int domain_iomem_in_pfn(struct domain *d, unsigned long pfn);

@@ -587,7 +587,7 @@
void put_page_from_l1e(l1_pgentry_t l1e, struct domain *d)
{
unsigned long pfn = l1e_get_pfn(l1e);
- struct pfn_info *page = &frame_table[pfn];
+ struct pfn_info *page = pfn_to_page(pfn);
struct domain *e;
struct vcpu *v;

@@ -645,7 +645,7 @@
{
if ( (l2e_get_flags(l2e) & _PAGE_PRESENT) &&
(l2e_get_pfn(l2e) != pfn) )
- put_page_and_type(&frame_table[l2e_get_pfn(l2e)]);
+ put_page_and_type(pfn_to_page(l2e_get_pfn(l2e)));
}


@@ -655,7 +655,7 @@
{
if ( (l3e_get_flags(l3e) & _PAGE_PRESENT) &&
(l3e_get_pfn(l3e) != pfn) )
- put_page_and_type(&frame_table[l3e_get_pfn(l3e)]);
+ put_page_and_type(pfn_to_page(l3e_get_pfn(l3e)));
}

#endif
@@ -666,7 +666,7 @@
{
if ( (l4e_get_flags(l4e) & _PAGE_PRESENT) &&
(l4e_get_pfn(l4e) != pfn) )
- put_page_and_type(&frame_table[l4e_get_pfn(l4e)]);
+ put_page_and_type(pfn_to_page(l4e_get_pfn(l4e)));
}

#endif
@@ -1584,9 +1584,9 @@
write_ptbase(v);

if ( shadow_mode_refcounts(d) )
- put_page(&frame_table[old_base_mfn]);
+ put_page(pfn_to_page(old_base_mfn));
else
- put_page_and_type(&frame_table[old_base_mfn]);
+ put_page_and_type(pfn_to_page(old_base_mfn));

/* CR3 also holds a ref to its shadow... */
if ( shadow_mode_enabled(d) )
@@ -1595,7 +1595,7 @@
put_shadow_ref(v->arch.monitor_shadow_ref);
v->arch.monitor_shadow_ref =
pagetable_get_pfn(v->arch.monitor_table);
- ASSERT(!page_get_owner(&frame_table[v->arch.monitor_shadow_ref]));
+ ASSERT(!page_get_owner(pfn_to_page(v->arch.monitor_shadow_ref)));
get_shadow_ref(v->arch.monitor_shadow_ref);
}
}
@@ -1763,7 +1763,7 @@

okay = 1;
mfn = op.arg1.mfn;
- page = &frame_table[mfn];
+ page = pfn_to_page(mfn);

switch ( op.cmd )
{
@@ -1845,7 +1845,7 @@
pagetable_get_pfn(v->arch.guest_table_user);
v->arch.guest_table_user = mk_pagetable(mfn << PAGE_SHIFT);
if ( old_mfn != 0 )
- put_page_and_type(&frame_table[old_mfn]);
+ put_page_and_type(pfn_to_page(old_mfn));
}
break;
#endif
@@ -2145,7 +2145,7 @@
va = map_domain_page_with_cache(mfn, &mapcache);
va = (void *)((unsigned long)va +
(unsigned long)(req.ptr & ~PAGE_MASK));
- page = &frame_table[mfn];
+ page = pfn_to_page(mfn);

switch ( (type_info = page->u.inuse.type_info) & PGT_type_mask )
{
@@ -2285,7 +2285,7 @@

mark_dirty(FOREIGNDOM, mfn);

- put_page(&frame_table[mfn]);
+ put_page(pfn_to_page(mfn));
break;

default:
@@ -2728,7 +2728,7 @@
for ( i = 0; i < FIRST_RESERVED_GDT_PAGE; i++ )
{
if ( (pfn = l1e_get_pfn(v->arch.perdomain_ptes[i])) != 0 )
- put_page_and_type(&frame_table[pfn]);
+ put_page_and_type(pfn_to_page(pfn));
v->arch.perdomain_ptes[i] = l1e_empty();
v->arch.guest_context.gdt_frames[i] = 0;
}
@@ -2753,7 +2753,7 @@
for ( i = 0; i < nr_pages; i++ ) {
pfn = frames[i];
if ((pfn >= max_page) ||
- !get_page_and_type(&frame_table[pfn], d, PGT_gdt_page) )
+ !get_page_and_type(pfn_to_page(pfn), d, PGT_gdt_page) )
goto fail;
}

@@ -2773,7 +2773,7 @@

fail:
while ( i-- > 0 )
- put_page_and_type(&frame_table[frames[i]]);
+ put_page_and_type(pfn_to_page(frames[i]));
return -EINVAL;
}

@@ -2827,7 +2827,7 @@
return -EINVAL;
}

- page = &frame_table[mfn];
+ page = pfn_to_page(mfn);
if ( unlikely(!get_page(page, dom)) )
{
UNLOCK_BIGLOCK(dom);
@@ -3037,7 +3037,7 @@
if ( likely(l1e_get_intpte(ol1e) == (l1e_get_intpte(nl1e)|_PAGE_RW)) )
{
if ( likely(l1e_get_flags(nl1e) & _PAGE_PRESENT) )
- put_page_type(&frame_table[l1e_get_pfn(nl1e)]);
+ put_page_type(pfn_to_page(l1e_get_pfn(nl1e)));
continue;
}

@@ -3220,7 +3220,7 @@
}

pfn = l1e_get_pfn(pte);
- page = &frame_table[pfn];
+ page = pfn_to_page(pfn);

/* We are looking only for read-only mappings of p.t. pages. */
if ( ((l1e_get_flags(pte) & (_PAGE_RW|_PAGE_PRESENT)) != _PAGE_PRESENT) ||
@@ -3331,7 +3331,7 @@
}

pfn = l1e_get_pfn(pte);
- page = &frame_table[pfn];
+ page = pfn_to_page(pfn);

#ifdef CONFIG_X86_64
#define WRPT_PTE_FLAGS (_PAGE_RW | _PAGE_PRESENT | _PAGE_USER)
diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/shadow.c
--- a/xen/arch/x86/shadow.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/shadow.c Tue Dec 20 11:46:56 2005
@@ -504,7 +504,7 @@
l2e_from_pfn(smfn, __PAGE_HYPERVISOR);

spl2e[l2_table_offset(PERDOMAIN_VIRT_START)] =
- l2e_from_paddr(__pa(page_get_owner(&frame_table[gmfn])->arch.mm_perdomain_pt),
+ l2e_from_paddr(__pa(page_get_owner(pfn_to_page(gmfn))->arch.mm_perdomain_pt),
__PAGE_HYPERVISOR);

if ( shadow_mode_translate(d) ) // NB: not external
@@ -670,7 +670,7 @@
set_guest_back_ptr(d, sl1e, sl1mfn, i);
}

- frame_table[sl1mfn].tlbflush_timestamp =
+ pfn_to_page(sl1mfn)->tlbflush_timestamp =
SHADOW_ENCODE_MIN_MAX(min, max);

unmap_domain_page(gpl1e);
@@ -907,7 +907,7 @@
u32 min_max = 0;
int min, max, length;

- if ( test_and_set_bit(_PGC_out_of_sync, &frame_table[gmfn].count_info) )
+ if ( test_and_set_bit(_PGC_out_of_sync, &pfn_to_page(gmfn)->count_info) )
{
ASSERT(__shadow_status(d, gpfn, PGT_snapshot));
return SHADOW_SNAPSHOT_ELSEWHERE;
@@ -953,7 +953,7 @@
unsigned long mfn)
{
struct domain *d = v->domain;
- struct pfn_info *page = &frame_table[mfn];
+ struct pfn_info *page = pfn_to_page(mfn);
struct out_of_sync_entry *entry = shadow_alloc_oos_entry(d);

ASSERT(shadow_lock_is_acquired(d));
@@ -1174,7 +1174,7 @@
&& i == PAGING_L4)
continue; /* skip the top-level for 3-level */

- if ( page_out_of_sync(&frame_table[gmfn]) &&
+ if ( page_out_of_sync(pfn_to_page(gmfn)) &&
!snapshot_entry_matches(
d, guest_pt, gpfn, table_offset_64(va, i)) )
{
@@ -1200,7 +1200,7 @@
}

/* L2 */
- if ( page_out_of_sync(&frame_table[gmfn]) &&
+ if ( page_out_of_sync(pfn_to_page(gmfn)) &&
!snapshot_entry_matches(d, guest_pt, gpfn, l2_table_offset(va)) )
{
unmap_and_return (1);
@@ -1214,7 +1214,7 @@
#undef unmap_and_return
#endif /* CONFIG_PAGING_LEVELS >= 3 */
{
- if ( page_out_of_sync(&frame_table[l2mfn]) &&
+ if ( page_out_of_sync(pfn_to_page(l2mfn)) &&
!snapshot_entry_matches(d, (guest_l1_pgentry_t *)v->arch.guest_vtable,
l2pfn, guest_l2_table_offset(va)) )
return 1;
@@ -1234,7 +1234,7 @@

guest_pt = (guest_l1_pgentry_t *) map_domain_page(l1mfn);

- if ( page_out_of_sync(&frame_table[l1mfn]) &&
+ if ( page_out_of_sync(pfn_to_page(l1mfn)) &&
!snapshot_entry_matches(
d, guest_pt, l1pfn, guest_l1_table_offset(va)) )
{
@@ -1324,18 +1324,18 @@
int i;
u32 found = 0;
int is_l1_shadow =
- ((frame_table[pt_mfn].u.inuse.type_info & PGT_type_mask) ==
+ ((pfn_to_page(pt_mfn)->u.inuse.type_info & PGT_type_mask) ==
PGT_l1_shadow);
#if CONFIG_PAGING_LEVELS == 4
is_l1_shadow |=
- ((frame_table[pt_mfn].u.inuse.type_info & PGT_type_mask) ==
+ ((pfn_to_page(pt_mfn)->u.inuse.type_info & PGT_type_mask) ==
PGT_fl1_shadow);
#endif

match = l1e_from_pfn(readonly_gmfn, flags);

if ( shadow_mode_external(d) ) {
- i = (frame_table[readonly_gmfn].u.inuse.type_info & PGT_va_mask)
+ i = (pfn_to_page(readonly_gmfn)->u.inuse.type_info & PGT_va_mask)
>> PGT_va_shift;

if ( (i >= 0 && i < L1_PAGETABLE_ENTRIES) &&
@@ -1373,7 +1373,7 @@

// If it's not a writable page, then no writable refs can be outstanding.
//
- if ( (frame_table[readonly_gmfn].u.inuse.type_info & PGT_type_mask) !=
+ if ( (pfn_to_page(readonly_gmfn)->u.inuse.type_info & PGT_type_mask) !=
PGT_writable_page )
{
perfc_incrc(remove_write_not_writable);
@@ -1383,7 +1383,7 @@
// How many outstanding writable PTEs for this page are there?
//
write_refs =
- (frame_table[readonly_gmfn].u.inuse.type_info & PGT_count_mask);
+ (pfn_to_page(readonly_gmfn)->u.inuse.type_info & PGT_count_mask);
if ( write_refs && MFN_PINNED(readonly_gmfn) )
{
write_refs--;
@@ -1401,7 +1401,7 @@

// Use the back pointer to locate the shadow page that can contain
// the PTE of interest
- if ( (predicted_smfn = frame_table[readonly_gmfn].tlbflush_timestamp) ) {
+ if ( (predicted_smfn = pfn_to_page(readonly_gmfn)->tlbflush_timestamp) ) {
found += remove_all_write_access_in_ptpage(
d, predicted_smfn, predicted_smfn, readonly_gpfn, readonly_gmfn, write_refs, 0);
if ( found == write_refs )
@@ -1670,7 +1670,7 @@
if ( !(entry_get_flags(guest_pt[i]) & _PAGE_PRESENT) &&
unlikely(entry_get_value(guest_pt[i]) != 0) &&
!unshadow &&
- (frame_table[smfn].u.inuse.type_info & PGT_pinned) )
+ (pfn_to_page(smfn)->u.inuse.type_info & PGT_pinned) )
unshadow = 1;
}
#endif
@@ -1718,7 +1718,7 @@
if ( !(guest_root_get_flags(new_root_e) & _PAGE_PRESENT) &&
unlikely(guest_root_get_intpte(new_root_e) != 0) &&
!unshadow &&
- (frame_table[smfn].u.inuse.type_info & PGT_pinned) )
+ (pfn_to_page(smfn)->u.inuse.type_info & PGT_pinned) )
unshadow = 1;
}
if ( max == -1 )
@@ -2401,7 +2401,7 @@
{
printk("eff_guest_pfn=%lx eff_guest_mfn=%lx shadow_mfn=%lx t=0x%08lx page_table_page=%d\n",
eff_guest_pfn, eff_guest_mfn, shadow_mfn,
- frame_table[eff_guest_mfn].u.inuse.type_info,
+ pfn_to_page(eff_guest_mfn)->u.inuse.type_info,
page_table_page);
FAIL("RW coherence");
}
@@ -2412,7 +2412,7 @@
{
printk("eff_guest_pfn=%lx eff_guest_mfn=%lx shadow_mfn=%lx t=0x%08lx page_table_page=%d\n",
eff_guest_pfn, eff_guest_mfn, shadow_mfn,
- frame_table[eff_guest_mfn].u.inuse.type_info,
+ pfn_to_page(eff_guest_mfn)->u.inuse.type_info,
page_table_page);
FAIL("RW2 coherence");
}
@@ -2781,7 +2781,7 @@
* When we free L2 pages, we need to tell if the page contains
* Xen private mappings. Use the va_mask part.
*/
- frame_table[s2mfn].u.inuse.type_info |=
+ pfn_to_page(s2mfn)->u.inuse.type_info |=
(unsigned long) 3 << PGT_score_shift;

memset(spl2e, 0,
@@ -2794,7 +2794,7 @@
for ( i = 0; i < PDPT_L2_ENTRIES; i++ )
spl2e[l2_table_offset(PERDOMAIN_VIRT_START) + i] =
l2e_from_page(
- virt_to_page(page_get_owner(&frame_table[gmfn])->arch.mm_perdomain_pt) + i,
+ virt_to_page(page_get_owner(pfn_to_page(gmfn))->arch.mm_perdomain_pt) + i,
__PAGE_HYPERVISOR);
for ( i = 0; i < (LINEARPT_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ )
spl2e[l2_table_offset(LINEAR_PT_VIRT_START) + i] =
@@ -2896,7 +2896,7 @@
ROOT_PAGETABLE_XEN_SLOTS * sizeof(l4_pgentry_t));

spl4e[l4_table_offset(PERDOMAIN_VIRT_START)] =
- l4e_from_paddr(__pa(page_get_owner(&frame_table[gmfn])->arch.mm_perdomain_l3),
+ l4e_from_paddr(__pa(page_get_owner(pfn_to_page(gmfn))->arch.mm_perdomain_l3),
__PAGE_HYPERVISOR);

if ( shadow_mode_translate(d) ) // NB: not external
diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/shadow32.c
--- a/xen/arch/x86/shadow32.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/shadow32.c Tue Dec 20 11:46:56 2005
@@ -30,7 +30,7 @@
#include <xen/sched.h>
#include <xen/trace.h>

-#define MFN_PINNED(_x) (frame_table[_x].u.inuse.type_info & PGT_pinned)
+#define MFN_PINNED(_x) (pfn_to_page(_x)->u.inuse.type_info & PGT_pinned)
#define va_to_l1mfn(_ed, _va) \
(l2e_get_pfn(linear_l2_table(_ed)[_va>>L2_PAGETABLE_SHIFT]))

@@ -144,11 +144,11 @@
if ( !shadow_mode_refcounts(d) )
return;

- ASSERT(frame_table[gmfn].count_info & PGC_page_table);
+ ASSERT(pfn_to_page(gmfn)->count_info & PGC_page_table);

if ( shadow_max_pgtable_type(d, gpfn, NULL) == PGT_none )
{
- clear_bit(_PGC_page_table, &frame_table[gmfn].count_info);
+ clear_bit(_PGC_page_table, &pfn_to_page(gmfn)->count_info);

if ( page_out_of_sync(pfn_to_page(gmfn)) )
{
@@ -380,7 +380,7 @@

void free_shadow_page(unsigned long smfn)
{
- struct pfn_info *page = &frame_table[smfn];
+ struct pfn_info *page = pfn_to_page(smfn);
unsigned long gmfn = page->u.inuse.type_info & PGT_mfn_mask;
struct domain *d = page_get_owner(pfn_to_page(gmfn));
unsigned long gpfn = __mfn_to_gpfn(d, gmfn);
@@ -465,8 +465,8 @@
{
struct pfn_info *page;

- page = &frame_table[entry->gmfn];
-
+ page = pfn_to_page(entry->gmfn);
+
// Decrement ref count of guest & shadow pages
//
put_page(page);
@@ -795,7 +795,7 @@
*/
mfn = pagetable_get_pfn(v->arch.monitor_table);
unmap_domain_page(v->arch.monitor_vtable);
- free_domheap_page(&frame_table[mfn]);
+ free_domheap_page(pfn_to_page(mfn));

v->arch.monitor_table = mk_pagetable(0);
v->arch.monitor_vtable = 0;
@@ -1018,8 +1018,8 @@
{
// external guests provide their own memory for their P2M maps.
//
- ASSERT( d == page_get_owner(
- &frame_table[pagetable_get_pfn(d->arch.phys_table)]) );
+ ASSERT(d == page_get_owner(pfn_to_page(pagetable_get_pfn(
+ d->arch.phys_table))));
}
}

@@ -1543,7 +1543,7 @@
l2e_from_pfn(smfn, __PAGE_HYPERVISOR);

spl2e[l2_table_offset(PERDOMAIN_VIRT_START)] =
- l2e_from_paddr(__pa(page_get_owner(&frame_table[gmfn])->arch.mm_perdomain_pt),
+ l2e_from_paddr(__pa(page_get_owner(pfn_to_page(gmfn))->arch.mm_perdomain_pt),
__PAGE_HYPERVISOR);

if ( shadow_mode_translate(d) ) // NB: not external
@@ -1675,7 +1675,7 @@
set_guest_back_ptr(d, sl1e, sl1mfn, i);
}

- frame_table[sl1mfn].tlbflush_timestamp =
+ pfn_to_page(sl1mfn)->tlbflush_timestamp =
SHADOW_ENCODE_MIN_MAX(min, max);
}
}
@@ -1758,7 +1758,7 @@
u32 min_max = 0;
int min, max, length;

- if ( test_and_set_bit(_PGC_out_of_sync, &frame_table[gmfn].count_info) )
+ if ( test_and_set_bit(_PGC_out_of_sync, &pfn_to_page(gmfn)->count_info) )
{
ASSERT(__shadow_status(d, gpfn, PGT_snapshot));
return SHADOW_SNAPSHOT_ELSEWHERE;
@@ -1809,7 +1809,7 @@

// Clear the out_of_sync bit.
//
- clear_bit(_PGC_out_of_sync, &frame_table[entry->gmfn].count_info);
+ clear_bit(_PGC_out_of_sync, &pfn_to_page(entry->gmfn)->count_info);

// XXX Need to think about how to protect the domain's
// information less expensively.
@@ -1826,7 +1826,7 @@
unsigned long mfn)
{
struct domain *d = v->domain;
- struct pfn_info *page = &frame_table[mfn];
+ struct pfn_info *page = pfn_to_page(mfn);
struct out_of_sync_entry *entry = shadow_alloc_oos_entry(d);

ASSERT(shadow_lock_is_acquired(d));
@@ -1992,7 +1992,7 @@

perfc_incrc(shadow_out_of_sync_calls);

- if ( page_out_of_sync(&frame_table[l2mfn]) &&
+ if ( page_out_of_sync(pfn_to_page(l2mfn)) &&
!snapshot_entry_matches(d, (l1_pgentry_t *)v->arch.guest_vtable,
l2pfn, l2_table_offset(va)) )
return 1;
@@ -2008,7 +2008,7 @@
if ( !VALID_MFN(l1mfn) )
return 0;

- if ( page_out_of_sync(&frame_table[l1mfn]) &&
+ if ( page_out_of_sync(pfn_to_page(l1mfn)) &&
!snapshot_entry_matches(
d, &linear_pg_table[l1_linear_offset(va) & ~(L1_PAGETABLE_ENTRIES-1)],
l1pfn, l1_table_offset(va)) )
@@ -2136,13 +2136,13 @@
int i;
u32 found = 0;
int is_l1_shadow =
- ((frame_table[pt_mfn].u.inuse.type_info & PGT_type_mask) ==
+ ((pfn_to_page(pt_mfn)->u.inuse.type_info & PGT_type_mask) ==
PGT_l1_shadow);

match = l1e_from_pfn(readonly_gmfn, flags);

if ( shadow_mode_external(d) ) {
- i = (frame_table[readonly_gmfn].u.inuse.type_info & PGT_va_mask)
+ i = (pfn_to_page(readonly_gmfn)->u.inuse.type_info & PGT_va_mask)
>> PGT_va_shift;

if ( (i >= 0 && i < L1_PAGETABLE_ENTRIES) &&
@@ -2180,7 +2180,7 @@

// If it's not a writable page, then no writable refs can be outstanding.
//
- if ( (frame_table[readonly_gmfn].u.inuse.type_info & PGT_type_mask) !=
+ if ( (pfn_to_page(readonly_gmfn)->u.inuse.type_info & PGT_type_mask) !=
PGT_writable_page )
{
perfc_incrc(remove_write_not_writable);
@@ -2190,7 +2190,7 @@
// How many outstanding writable PTEs for this page are there?
//
write_refs =
- (frame_table[readonly_gmfn].u.inuse.type_info & PGT_count_mask);
+ (pfn_to_page(readonly_gmfn)->u.inuse.type_info & PGT_count_mask);
if ( write_refs && MFN_PINNED(readonly_gmfn) )
{
write_refs--;
@@ -2208,7 +2208,7 @@

// Use the back pointer to locate the shadow page that can contain
// the PTE of interest
- if ( (predicted_smfn = frame_table[readonly_gmfn].tlbflush_timestamp) ) {
+ if ( (predicted_smfn = pfn_to_page(readonly_gmfn)->tlbflush_timestamp) ) {
found += remove_all_write_access_in_ptpage(
d, predicted_smfn, predicted_smfn, readonly_gpfn, readonly_gmfn, write_refs, 0);
if ( found == write_refs )
@@ -2249,7 +2249,7 @@
int i;
u32 count = 0;
int is_l1_shadow =
- ((frame_table[l1mfn].u.inuse.type_info & PGT_type_mask) ==
+ ((pfn_to_page(l1mfn)->u.inuse.type_info & PGT_type_mask) ==
PGT_l1_shadow);

match = l1e_from_pfn(forbidden_gmfn, flags);
@@ -2266,7 +2266,7 @@
if ( is_l1_shadow )
shadow_put_page_from_l1e(ol2e, d);
else /* must be an hl2 page */
- put_page(&frame_table[forbidden_gmfn]);
+ put_page(pfn_to_page(forbidden_gmfn));
}

unmap_domain_page(pl1e);
@@ -3156,7 +3156,7 @@
{
printk("eff_guest_pfn=%lx eff_guest_mfn=%lx shadow_mfn=%lx t=%lx page_table_page=%d\n",
eff_guest_pfn, eff_guest_mfn, shadow_mfn,
- frame_table[eff_guest_mfn].u.inuse.type_info,
+ pfn_to_page(eff_guest_mfn)->u.inuse.type_info,
page_table_page);
FAIL("RW coherence");
}
@@ -3167,7 +3167,7 @@
{
printk("eff_guest_pfn=%lx eff_guest_mfn=%lx shadow_mfn=%lx t=%lx page_table_page=%d\n",
eff_guest_pfn, eff_guest_mfn, shadow_mfn,
- frame_table[eff_guest_mfn].u.inuse.type_info,
+ pfn_to_page(eff_guest_mfn)->u.inuse.type_info,
page_table_page);
FAIL("RW2 coherence");
}
diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/shadow_public.c
--- a/xen/arch/x86/shadow_public.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/shadow_public.c Tue Dec 20 11:46:56 2005
@@ -168,14 +168,14 @@
#if CONFIG_PAGING_LEVELS >=3
if ( d->arch.ops->guest_paging_levels == PAGING_L2 )
{
- struct pfn_info *page = &frame_table[smfn];
+ struct pfn_info *page = pfn_to_page(smfn);
for ( i = 0; i < PDP_ENTRIES; i++ )
{
if ( entry_get_flags(ple[i]) & _PAGE_PRESENT )
free_fake_shadow_l2(d,entry_get_pfn(ple[i]));
}

- page = &frame_table[entry_get_pfn(ple[0])];
+ page = pfn_to_page(entry_get_pfn(ple[0]));
free_domheap_pages(page, SL2_ORDER);
unmap_domain_page(ple);
}
@@ -208,7 +208,7 @@
break;
if ( level == PAGING_L2 )
{
- struct pfn_info *page = &frame_table[smfn];
+ struct pfn_info *page = pfn_to_page(smfn);
if ( is_xen_l2_slot(page->u.inuse.type_info, i) )
continue;
}
@@ -299,7 +299,7 @@
*/
mfn = pagetable_get_pfn(v->arch.monitor_table);
unmap_domain_page(v->arch.monitor_vtable);
- free_domheap_page(&frame_table[mfn]);
+ free_domheap_page(pfn_to_page(mfn));

v->arch.monitor_table = mk_pagetable(0);
v->arch.monitor_vtable = 0;
@@ -394,7 +394,7 @@
*/
mfn = pagetable_get_pfn(v->arch.monitor_table);
unmap_domain_page(v->arch.monitor_vtable);
- free_domheap_page(&frame_table[mfn]);
+ free_domheap_page(pfn_to_page(mfn));

v->arch.monitor_table = mk_pagetable(0);
v->arch.monitor_vtable = 0;
@@ -411,7 +411,7 @@

// Clear the out_of_sync bit.
//
- clear_bit(_PGC_out_of_sync, &frame_table[entry->gmfn].count_info);
+ clear_bit(_PGC_out_of_sync, &pfn_to_page(entry->gmfn)->count_info);

// XXX Need to think about how to protect the domain's
// information less expensively.
@@ -428,7 +428,7 @@
{
struct pfn_info *page;

- page = &frame_table[entry->gmfn];
+ page = pfn_to_page(entry->gmfn);

// Decrement ref count of guest & shadow pages
//
@@ -501,11 +501,11 @@
if ( !shadow_mode_refcounts(d) )
return;

- ASSERT(frame_table[gmfn].count_info & PGC_page_table);
+ ASSERT(pfn_to_page(gmfn)->count_info & PGC_page_table);

if ( shadow_max_pgtable_type(d, gpfn, NULL) == PGT_none )
{
- clear_bit(_PGC_page_table, &frame_table[gmfn].count_info);
+ clear_bit(_PGC_page_table, &pfn_to_page(gmfn)->count_info);

if ( page_out_of_sync(pfn_to_page(gmfn)) )
{
@@ -600,7 +600,7 @@

void free_shadow_page(unsigned long smfn)
{
- struct pfn_info *page = &frame_table[smfn];
+ struct pfn_info *page = pfn_to_page(smfn);

unsigned long gmfn = page->u.inuse.type_info & PGT_mfn_mask;
struct domain *d = page_get_owner(pfn_to_page(gmfn));
@@ -1067,8 +1067,8 @@
{
// external guests provide their own memory for their P2M maps.
//
- ASSERT( d == page_get_owner(
- &frame_table[pagetable_get_pfn(d->arch.phys_table)]) );
+ ASSERT(d == page_get_owner(pfn_to_page(pagetable_get_pfn(
+ d->arch.phys_table))));
}
}

@@ -1643,7 +1643,7 @@
int i;
u32 count = 0;
int is_l1_shadow =
- ((frame_table[l1mfn].u.inuse.type_info & PGT_type_mask) ==
+ ((pfn_to_page(l1mfn)->u.inuse.type_info & PGT_type_mask) ==
PGT_l1_shadow);

match = l1e_from_pfn(forbidden_gmfn, flags);
@@ -1660,7 +1660,7 @@
if ( is_l1_shadow )
shadow_put_page_from_l1e(ol2e, d);
else /* must be an hl2 page */
- put_page(&frame_table[forbidden_gmfn]);
+ put_page(pfn_to_page(forbidden_gmfn));
}

unmap_domain_page(pl1e);
diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/x86_32/mm.c
--- a/xen/arch/x86/x86_32/mm.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/x86_32/mm.c Tue Dec 20 11:46:56 2005
@@ -177,10 +177,11 @@
idle_pg_table_l2[l2_linear_offset(RDWR_MPT_VIRT_START) + i]);
for ( j = 0; j < L2_PAGETABLE_ENTRIES; j++ )
{
- frame_table[m2p_start_mfn+j].count_info = PGC_allocated | 1;
+ struct pfn_info *page = pfn_to_page(m2p_start_mfn + j);
+ page->count_info = PGC_allocated | 1;
/* Ensure it's only mapped read-only by domains. */
- frame_table[m2p_start_mfn+j].u.inuse.type_info = PGT_gdt_page | 1;
- page_set_owner(&frame_table[m2p_start_mfn+j], dom_xen);
+ page->u.inuse.type_info = PGT_gdt_page | 1;
+ page_set_owner(page, dom_xen);
}
}
}
diff -r 1283d309a603 -r 3d1c7be170a7 xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c Sun Dec 18 19:29:43 2005
+++ b/xen/arch/x86/x86_64/mm.c Tue Dec 20 11:46:56 2005
@@ -166,11 +166,12 @@

for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
{
- frame_table[m2p_start_mfn+i].count_info = PGC_allocated | 1;
+ struct pfn_info *page = pfn_to_page(m2p_start_mfn + i);
+ page->count_info = PGC_allocated | 1;
/* gdt to make sure it's only mapped read-only by non-privileged
domains. */
- frame_table[m2p_start_mfn+i].u.inuse.type_info = PGT_gdt_page | 1;
- page_set_owner(&frame_table[m2p_start_mfn+i], dom_xen);
+ page->u.inuse.type_info = PGT_gdt_page | 1;
+ page_set_owner(page, dom_xen);
}
}
}
diff -r 1283d309a603 -r 3d1c7be170a7 xen/common/grant_table.c
--- a/xen/common/grant_table.c Sun Dec 18 19:29:43 2005
+++ b/xen/common/grant_table.c Tue Dec 20 11:46:56 2005
@@ -238,8 +238,8 @@

if ( unlikely(!pfn_valid(frame)) ||
unlikely(!((dev_hst_ro_flags & GNTMAP_readonly) ?
- get_page(&frame_table[frame], rd) :
- get_page_and_type(&frame_table[frame], rd,
+ get_page(pfn_to_page(frame), rd) :
+ get_page_and_type(pfn_to_page(frame), rd,
PGT_writable_page))) )
{
clear_bit(_GTF_writing, &sha->flags);
@@ -301,7 +301,7 @@
sflags = prev_sflags;
}

- if ( unlikely(!get_page_type(&frame_table[frame],
+ if ( unlikely(!get_page_type(pfn_to_page(frame),
PGT_writable_page)) )
{
clear_bit(_GTF_writing, &sha->flags);
@@ -347,14 +347,14 @@
if ( (act->pin & (GNTPIN_hstw_mask|GNTPIN_devw_mask)) == 0 )
{
clear_bit(_GTF_writing, &sha->flags);
- put_page_type(&frame_table[frame]);
+ put_page_type(pfn_to_page(frame));
}
}

if ( act->pin == 0 )
{
clear_bit(_GTF_reading, &sha->flags);
- put_page(&frame_table[frame]);
+ put_page(pfn_to_page(frame));
}

spin_unlock(&rd->grant_table->lock);
@@ -500,14 +500,14 @@
!(flags & GNTMAP_readonly) )
{
clear_bit(_GTF_writing, &sha->flags);
- put_page_type(&frame_table[frame]);
+ put_page_type(pfn_to_page(frame));
}

if ( act->pin == 0 )
{
act->frame = 0xdeadbeef;
clear_bit(_GTF_reading, &sha->flags);
- put_page(&frame_table[frame]);
+ put_page(pfn_to_page(frame));
}

unmap_out:
@@ -691,7 +691,7 @@
}

/* Check the passed page frame for basic validity. */
- page = &frame_table[gop.mfn];
+ page = pfn_to_page(gop.mfn);
if ( unlikely(!pfn_valid(gop.mfn) || IS_XEN_HEAP_FRAME(page)) )
{
DPRINTK("gnttab_transfer: out-of-range or xen frame %lx\n",
@@ -1016,14 +1016,14 @@
if ( (act->pin & (GNTPIN_devw_mask|GNTPIN_hstw_mask)) == 0 )
{
clear_bit(_GTF_writing, &sha->flags);
- put_page_type(&frame_table[act->frame]);
+ put_page_type(pfn_to_page(act->frame));
}
}

if ( act->pin == 0 )
{
clear_bit(_GTF_reading, &sha->flags);
- put_page(&frame_table[act->frame]);
+ put_page(pfn_to_page(act->frame));
}

spin_unlock(&rd->grant_table->lock);
diff -r 1283d309a603 -r 3d1c7be170a7 xen/common/memory.c
--- a/xen/common/memory.c Sun Dec 18 19:29:43 2005
+++ b/xen/common/memory.c Tue Dec 20 11:46:56 2005
@@ -102,7 +102,7 @@
return i;
}

- page = &frame_table[mpfn + j];
+ page = pfn_to_page(mpfn + j);
if ( unlikely(!get_page(page, d)) )
{
DPRINTK("Bad page free for domain %u\n", d->domain_id);
diff -r 1283d309a603 -r 3d1c7be170a7 xen/include/asm-x86/shadow.h
--- a/xen/include/asm-x86/shadow.h Sun Dec 18 19:29:43 2005
+++ b/xen/include/asm-x86/shadow.h Tue Dec 20 11:46:56 2005
@@ -493,9 +493,9 @@
SH_VLOG("mark_dirty OOR! mfn=%x pfn=%lx max=%x (dom %p)",
mfn, pfn, d->arch.shadow_dirty_bitmap_size, d);
SH_VLOG("dom=%p caf=%08x taf=%" PRtype_info,
- page_get_owner(&frame_table[mfn]),
- frame_table[mfn].count_info,
- frame_table[mfn].u.inuse.type_info );
+ page_get_owner(pfn_to_page(mfn)),
+ pfn_to_page(mfn)->count_info,
+ pfn_to_page(mfn)->u.inuse.type_info );
}
#endif
}
@@ -648,20 +648,20 @@

ASSERT(pfn_valid(smfn));

- x = frame_table[smfn].count_info;
+ x = pfn_to_page(smfn)->count_info;
nx = x + 1;

if ( unlikely(nx == 0) )
{
printk("get_shadow_ref overflow, gmfn=%" PRtype_info " smfn=%lx\n",
- frame_table[smfn].u.inuse.type_info & PGT_mfn_mask,
+ pfn_to_page(smfn)->u.inuse.type_info & PGT_mfn_mask,
smfn);
BUG();
}

// Guarded by the shadow lock...
//
- frame_table[smfn].count_info = nx;
+ pfn_to_page(smfn)->count_info = nx;

return 1;
}
@@ -678,7 +678,7 @@

ASSERT(pfn_valid(smfn));

- x = frame_table[smfn].count_info;
+ x = pfn_to_page(smfn)->count_info;
nx = x - 1;

if ( unlikely(x == 0) )
@@ -686,14 +686,14 @@
printk("put_shadow_ref underflow, smfn=%lx oc=%08x t=%"
PRtype_info "\n",
smfn,
- frame_table[smfn].count_info,
- frame_table[smfn].u.inuse.type_info);
+ pfn_to_page(smfn)->count_info,
+ pfn_to_page(smfn)->u.inuse.type_info);
BUG();
}

// Guarded by the shadow lock...
//
- frame_table[smfn].count_info = nx;
+ pfn_to_page(smfn)->count_info = nx;

if ( unlikely(nx == 0) )
{
@@ -704,9 +704,9 @@
static inline void
shadow_pin(unsigned long smfn)
{
- ASSERT( !(frame_table[smfn].u.inuse.type_info & PGT_pinned) );
-
- frame_table[smfn].u.inuse.type_info |= PGT_pinned;
+ ASSERT( !(pfn_to_page(smfn)->u.inuse.type_info & PGT_pinned) );
+
+ pfn_to_page(smfn)->u.inuse.type_info |= PGT_pinned;
if ( unlikely(!get_shadow_ref(smfn)) )
BUG();
}
@@ -714,9 +714,9 @@
static inline void
shadow_unpin(unsigned long smfn)
{
- ASSERT( (frame_table[smfn].u.inuse.type_info & PGT_pinned) );
-
- frame_table[smfn].u.inuse.type_info &= ~PGT_pinned;
+ ASSERT( (pfn_to_page(smfn)->u.inuse.type_info & PGT_pinned) );
+
+ pfn_to_page(smfn)->u.inuse.type_info &= ~PGT_pinned;
put_shadow_ref(smfn);
}

@@ -732,9 +732,9 @@

ASSERT(shadow_lock_is_acquired(d));
gmfn = l1e_get_pfn(spte);
- frame_table[gmfn].tlbflush_timestamp = smfn;
- frame_table[gmfn].u.inuse.type_info &= ~PGT_va_mask;
- frame_table[gmfn].u.inuse.type_info |= (unsigned long) index << PGT_va_shift;
+ pfn_to_page(gmfn)->tlbflush_timestamp = smfn;
+ pfn_to_page(gmfn)->u.inuse.type_info &= ~PGT_va_mask;
+ pfn_to_page(gmfn)->u.inuse.type_info |= (unsigned long) index << PGT_va_shift;
}
}

@@ -941,7 +941,7 @@
//
perfc_incrc(validate_pte_changes2);
if ( likely(l1e_get_flags(new_spte) & _PAGE_PRESENT) )
- shadow_put_page_type(d, &frame_table[l1e_get_pfn(new_spte)]);
+ shadow_put_page_type(d, pfn_to_page(l1e_get_pfn(new_spte)));
}
else if ( ((l1e_get_flags(old_spte) | l1e_get_flags(new_spte)) &
_PAGE_PRESENT ) &&
@@ -1216,8 +1216,8 @@
printk("d->id=%d gpfn=%lx gmfn=%lx stype=%lx c=%x t=%" PRtype_info " "
"mfn_out_of_sync(gmfn)=%d mfn_is_page_table(gmfn)=%d\n",
d->domain_id, gpfn, gmfn, stype,
- frame_table[gmfn].count_info,
- frame_table[gmfn].u.inuse.type_info,
+ pfn_to_page(gmfn)->count_info,
+ pfn_to_page(gmfn)->u.inuse.type_info,
mfn_out_of_sync(gmfn), mfn_is_page_table(gmfn));
BUG();
}
@@ -1597,7 +1597,7 @@
struct vcpu *v = current;
struct domain *d = v->domain;
unsigned long mfn = __gpfn_to_mfn(d, gpfn);
- u32 type = frame_table[mfn].u.inuse.type_info & PGT_type_mask;
+ u32 type = pfn_to_page(mfn)->u.inuse.type_info & PGT_type_mask;

if ( shadow_mode_refcounts(d) &&
(type == PGT_writable_page) )
diff -r 1283d309a603 -r 3d1c7be170a7 xen/include/asm-x86/shadow_public.h
--- a/xen/include/asm-x86/shadow_public.h Sun Dec 18 19:29:43 2005
+++ b/xen/include/asm-x86/shadow_public.h Tue Dec 20 11:46:56 2005
@@ -22,7 +22,7 @@
#ifndef _XEN_SHADOW_PUBLIC_H
#define _XEN_SHADOW_PUBLIC_H
#if CONFIG_PAGING_LEVELS >= 3
-#define MFN_PINNED(_x) (frame_table[_x].u.inuse.type_info & PGT_pinned)
+#define MFN_PINNED(_x) (pfn_to_page(_x)->u.inuse.type_info & PGT_pinned)

extern int alloc_p2m_table(struct domain *d);


_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog