x86/paging: Update paging_mark_dirty() to use mfn_t

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Tim Deegan <tim@xen.org>
This commit is contained in:
Andrew Cooper committed 2016-12-15 15:52:50 +00:00
1 parent 6e616a3cef
commit f2a0a0db4a
13 files changed
+30 -33

No files matched your search

+1 -1
View File
@@ -181,7 +181,7 @@ unsigned int dbg_rw_guest_mem(struct domain *dp, void * __user gaddr,
if ( toaddr )
{
copy_from_user(va, buf, pagecnt); /* va = buf */
paging_mark_dirty(dp, mfn_x(mfn));
paging_mark_dirty(dp, mfn);
}
else
{
+6 -6
View File
@@ -1943,7 +1943,7 @@ int hvm_hap_nested_page_fault(paddr_t gpa, unsigned long gla,
*/
if ( npfec.write_access )
{
paging_mark_dirty(currd, mfn_x(mfn));
paging_mark_dirty(currd, mfn);
/*
* If p2m is really an altp2m, unlock here to avoid lock ordering
* violation when the change below is propagated from host p2m.
@@ -2633,7 +2633,7 @@ static void *_hvm_map_guest_frame(unsigned long gfn, bool_t permanent,
if ( unlikely(p2m_is_discard_write(p2mt)) )
*writable = 0;
else if ( !permanent )
paging_mark_dirty(d, page_to_mfn(page));
paging_mark_dirty(d, _mfn(page_to_mfn(page)));
}
if ( !permanent )
@@ -2696,7 +2696,7 @@ void hvm_unmap_guest_frame(void *p, bool_t permanent)
list_for_each_entry(track, &d->arch.hvm_domain.write_map.list, list)
if ( track->page == page )
{
paging_mark_dirty(d, mfn);
paging_mark_dirty(d, _mfn(mfn));
list_del(&track->list);
xfree(track);
break;
@@ -2713,7 +2713,7 @@ void hvm_mapped_guest_frames_mark_dirty(struct domain *d)
spin_lock(&d->arch.hvm_domain.write_map.lock);
list_for_each_entry(track, &d->arch.hvm_domain.write_map.list, list)
paging_mark_dirty(d, page_to_mfn(track->page));
paging_mark_dirty(d, _mfn(page_to_mfn(track->page)));
spin_unlock(&d->arch.hvm_domain.write_map.lock);
}
@@ -3230,7 +3230,7 @@ static enum hvm_copy_result __hvm_copy(
memcpy(p, buf, count);
else
memset(p, 0, count);
paging_mark_dirty(curr->domain, page_to_mfn(page));
paging_mark_dirty(curr->domain, _mfn(page_to_mfn(page)));
}
}
else
@@ -5807,7 +5807,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg)
page = get_page_from_gfn(d, pfn, NULL, P2M_UNSHARE);
if ( page )
{
paging_mark_dirty(d, page_to_mfn(page));
paging_mark_dirty(d, _mfn(page_to_mfn(page)));
/* These are most probably not page tables any more */
/* don't take a long time and don't die either */
sh_remove_shadows(d, _mfn(page_to_mfn(page)), 1, 0);
+1 -1
View File
@@ -282,7 +282,7 @@ static int hvm_add_ioreq_gmfn(
rc = guest_physmap_add_page(d, _gfn(iorp->gmfn),
_mfn(page_to_mfn(iorp->page)), 0);
if ( rc == 0 )
paging_mark_dirty(d, page_to_mfn(iorp->page));
paging_mark_dirty(d, _mfn(page_to_mfn(iorp->page)));
return rc;
}
+8 -8
View File
@@ -2251,7 +2251,7 @@ static int alloc_page_type(struct page_info *page, unsigned long type,
/* A page table is dirtied when its type count becomes non-zero. */
if ( likely(owner != NULL) )
paging_mark_dirty(owner, page_to_mfn(page));
paging_mark_dirty(owner, _mfn(page_to_mfn(page)));
switch ( type & PGT_type_mask )
{
@@ -2325,7 +2325,7 @@ int free_page_type(struct page_info *page, unsigned long type,
if ( likely(owner != NULL) && unlikely(paging_mode_enabled(owner)) )
{
/* A page table is dirtied when its type count becomes zero. */
paging_mark_dirty(owner, page_to_mfn(page));
paging_mark_dirty(owner, _mfn(page_to_mfn(page)));
if ( shadow_mode_refcounts(owner) )
return 0;
@@ -3247,7 +3247,7 @@ long do_mmuext_op(
goto pin_drop;
/* A page is dirtied when its pin status is set. */
paging_mark_dirty(pg_owner, page_to_mfn(page));
paging_mark_dirty(pg_owner, _mfn(page_to_mfn(page)));
/* We can race domain destruction (domain_relinquish_resources). */
if ( unlikely(pg_owner != d) )
@@ -3307,7 +3307,7 @@ long do_mmuext_op(
put_page(page);
/* A page is dirtied when its pin status is cleared. */
paging_mark_dirty(pg_owner, page_to_mfn(page));
paging_mark_dirty(pg_owner, _mfn(page_to_mfn(page)));
break;
}
@@ -3516,7 +3516,7 @@ long do_mmuext_op(
}
/* A page is dirtied when it's being cleared. */
paging_mark_dirty(pg_owner, page_to_mfn(page));
paging_mark_dirty(pg_owner, _mfn(page_to_mfn(page)));
clear_domain_page(_mfn(page_to_mfn(page)));
@@ -3551,7 +3551,7 @@ long do_mmuext_op(
}
/* A page is dirtied when it's being copied to. */
paging_mark_dirty(pg_owner, page_to_mfn(dst_page));
paging_mark_dirty(pg_owner, _mfn(page_to_mfn(dst_page)));
copy_domain_page(_mfn(page_to_mfn(dst_page)),
_mfn(page_to_mfn(src_page)));
@@ -3894,7 +3894,7 @@ long do_mmu_update(
set_gpfn_from_mfn(mfn, gpfn);
paging_mark_dirty(pg_owner, mfn);
paging_mark_dirty(pg_owner, _mfn(mfn));
put_page(mfn_to_page(mfn));
break;
@@ -4700,7 +4700,7 @@ long do_update_descriptor(u64 pa, u64 desc)
break;
}
paging_mark_dirty(dom, mfn);
paging_mark_dirty(dom, _mfn(mfn));
/* All is good so make the update. */
gdt_pent = map_domain_page(_mfn(mfn));
+4 -4
View File
@@ -392,21 +392,21 @@ set_ad:
{
#if GUEST_PAGING_LEVELS == 4 /* 64-bit only... */
if ( set_ad_bits(l4p + guest_l4_table_offset(va), &gw->l4e, 0) )
paging_mark_dirty(d, mfn_x(gw->l4mfn));
paging_mark_dirty(d, gw->l4mfn);
if ( set_ad_bits(l3p + guest_l3_table_offset(va), &gw->l3e,
(pse1G && (pfec & PFEC_write_access))) )
paging_mark_dirty(d, mfn_x(gw->l3mfn));
paging_mark_dirty(d, gw->l3mfn);
#endif
if ( !pse1G )
{
if ( set_ad_bits(l2p + guest_l2_table_offset(va), &gw->l2e,
(pse2M && (pfec & PFEC_write_access))) )
paging_mark_dirty(d, mfn_x(gw->l2mfn));
paging_mark_dirty(d, gw->l2mfn);
if ( !pse2M )
{
if ( set_ad_bits(l1p + guest_l1_table_offset(va), &gw->l1e,
(pfec & PFEC_write_access)) )
paging_mark_dirty(d, mfn_x(gw->l1mfn));
paging_mark_dirty(d, gw->l1mfn);
}
}
}
+1 -1
View File
@@ -1210,7 +1210,7 @@ private_page_found:
/* Now that the gfn<->mfn map is properly established,
* marking dirty is feasible */
paging_mark_dirty(d, mfn_x(page_to_mfn(page)));
paging_mark_dirty(d, page_to_mfn(page));
/* We do not need to unlock a private page */
put_gfn(d, gfn);
return 0;
+1 -1
View File
@@ -1112,7 +1112,7 @@ p2m_pod_demand_populate(struct p2m_domain *p2m, unsigned long gfn,
for( i = 0; i < (1UL << order); i++ )
{
set_gpfn_from_mfn(mfn_x(mfn) + i, gfn_aligned + i);
paging_mark_dirty(d, mfn_x(mfn) + i);
paging_mark_dirty(d, mfn_add(mfn, i));
}
p2m->pod.entry_count -= (1 << order);
+1 -4
View File
@@ -343,12 +343,9 @@ out:
}
/* Mark a page as dirty */
void paging_mark_dirty(struct domain *d, unsigned long guest_mfn)
void paging_mark_dirty(struct domain *d, mfn_t gmfn)
{
unsigned long pfn;
mfn_t gmfn;
gmfn = _mfn(guest_mfn);
if ( !paging_mode_log_dirty(d) || !mfn_valid(gmfn) ||
page_get_owner(mfn_to_page(gmfn)) != d )
+3 -3
View File
@@ -999,7 +999,7 @@ sh_validate_guest_entry(struct vcpu *v, mfn_t gmfn, void *entry, u32 size)
int result = 0;
struct page_info *page = mfn_to_page(gmfn);
paging_mark_dirty(v->domain, mfn_x(gmfn));
paging_mark_dirty(v->domain, gmfn);
// Determine which types of shadows are affected, and update each.
//
@@ -1818,11 +1818,11 @@ void sh_emulate_unmap_dest(struct vcpu *v, void *addr, unsigned int bytes,
sh_validate_guest_pt_write(v, sh_ctxt->mfn[1], addr + b1, b2);
}
paging_mark_dirty(v->domain, mfn_x(sh_ctxt->mfn[0]));
paging_mark_dirty(v->domain, sh_ctxt->mfn[0]);
if ( unlikely(mfn_valid(sh_ctxt->mfn[1])) )
{
paging_mark_dirty(v->domain, mfn_x(sh_ctxt->mfn[1]));
paging_mark_dirty(v->domain, sh_ctxt->mfn[1]);
vunmap((void *)((unsigned long)addr & PAGE_MASK));
}
else
+1 -1
View File
@@ -675,7 +675,7 @@ _sh_propagate(struct vcpu *v,
{
if ( mfn_valid(target_mfn) ) {
if ( ft & FETCH_TYPE_WRITE )
paging_mark_dirty(d, mfn_x(target_mfn));
paging_mark_dirty(d, target_mfn);
else if ( !paging_mfn_is_dirty(d, target_mfn) )
sflags &= ~_PAGE_RW;
}
+1 -1
View File
@@ -80,7 +80,7 @@ static inline void cli_put_page(void *cli_va, struct page_info *cli_pfp,
if ( mark_dirty )
{
put_page_and_type(cli_pfp);
paging_mark_dirty(current->domain,cli_mfn);
paging_mark_dirty(current->domain, _mfn(cli_mfn));
}
else
put_page(cli_pfp);
+1 -1
View File
@@ -46,7 +46,7 @@ int replace_grant_host_mapping(
#define gnttab_status_gmfn(d, t, i) \
(mfn_to_gmfn(d, gnttab_status_mfn(t, i)))
#define gnttab_mark_dirty(d, f) paging_mark_dirty((d), (f))
#define gnttab_mark_dirty(d, f) paging_mark_dirty((d), _mfn(f))
static inline void gnttab_clear_flag(unsigned int nr, uint16_t *st)
{
+1 -1
View File
@@ -157,7 +157,7 @@ void paging_log_dirty_init(struct domain *d,
void (*clean_dirty_bitmap)(struct domain *d));
/* mark a page as dirty */
void paging_mark_dirty(struct domain *d, unsigned long guest_mfn);
void paging_mark_dirty(struct domain *d, mfn_t gmfn);
/* mark a page as dirty with taking guest pfn as parameter */
void paging_mark_gfn_dirty(struct domain *d, unsigned long pfn);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.