x86: Fix ept and vt-d co-existence issue.

For vt-d's mmio address ranges, once ept enables, they should
be added to ept page tables with p2m lock held, and then guest can
access these ranges like conventional ram, but to change the ept
entries, it should take the p2m lock first.

Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
This commit is contained in:
Keir Fraser committed 2009-10-16 08:25:17 +01:00
1 parent 242a16c3d1
commit c5ff46d8d4
2 files changed
+6

No files matched your search

+2
View File
@@ -524,6 +524,7 @@ void ept_change_entry_emt_with_range(struct domain *d, unsigned long start_gfn,
mfn_t mfn;
int order = 0;
p2m_lock(d->arch.p2m);
for ( gfn = start_gfn; gfn <= end_gfn; gfn++ )
{
e = ept_get_entry_content(d, gfn);
@@ -561,6 +562,7 @@ void ept_change_entry_emt_with_range(struct domain *d, unsigned long start_gfn,
ept_set_entry(d, gfn, mfn, order, e.avail1);
}
}
p2m_unlock(d->arch.p2m);
}
/*
+4
View File
@@ -2237,7 +2237,9 @@ set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn)
}
P2M_DEBUG("set mmio %lx %lx\n", gfn, mfn_x(mfn));
p2m_lock(d->arch.p2m);
rc = set_p2m_entry(d, gfn, mfn, 0, p2m_mmio_direct);
p2m_unlock(d->arch.p2m);
if ( 0 == rc )
gdprintk(XENLOG_ERR,
"set_mmio_p2m_entry: set_p2m_entry failed! mfn=%08lx\n",
@@ -2261,7 +2263,9 @@ clear_mmio_p2m_entry(struct domain *d, unsigned long gfn)
"clear_mmio_p2m_entry: gfn_to_mfn failed! gfn=%08lx\n", gfn);
return 0;
}
p2m_lock(d->arch.p2m);
rc = set_p2m_entry(d, gfn, _mfn(INVALID_MFN), 0, 0);
p2m_unlock(d->arch.p2m);
return rc;
}
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.