[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86: allow set_mmio_p2m_entry to specify access type
commit 8cb60dd0f1fd34813bceb309f11a57a00f3f91f5 Author: Roger Pau Monné <roger.pau@xxxxxxxxxx> AuthorDate: Fri Jan 23 15:14:56 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Jan 23 15:14:56 2015 +0100 x86: allow set_mmio_p2m_entry to specify access type Preparatory change that allows setting the access type to set_mmio_p2m_entry. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Acked-by: Tim Deegan <tim@xxxxxxx> --- xen/arch/x86/domain_build.c | 4 +++- xen/arch/x86/hvm/vmx/vmx.c | 2 +- xen/arch/x86/mm/p2m.c | 15 +++++++++------ xen/include/asm-x86/p2m.h | 3 ++- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 7a912e9..01cfa58 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -319,11 +319,13 @@ static __init void pvh_add_mem_mapping(struct domain *d, unsigned long gfn, unsigned long mfn, unsigned long nr_mfns) { unsigned long i; + p2m_access_t a; int rc; + a = p2m_get_hostp2m(d)->default_access; for ( i = 0; i < nr_mfns; i++ ) { - if ( (rc = set_mmio_p2m_entry(d, gfn + i, _mfn(mfn + i))) ) + if ( (rc = set_mmio_p2m_entry(d, gfn + i, _mfn(mfn + i), a)) ) panic("pvh_add_mem_mapping: gfn:%lx mfn:%lx i:%ld rc:%d\n", gfn, mfn, i, rc); if ( !(i & 0xfffff) ) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 8612601..88b7821 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2185,7 +2185,7 @@ static int vmx_alloc_vlapic_mapping(struct domain *d) share_xen_page_with_guest(virt_to_page(apic_va), d, XENSHARE_writable); d->arch.hvm_domain.vmx.apic_access_mfn = virt_to_mfn(apic_va); set_mmio_p2m_entry(d, paddr_to_pfn(APIC_DEFAULT_PHYS_BASE), - _mfn(virt_to_mfn(apic_va))); + _mfn(virt_to_mfn(apic_va)), p2m_get_hostp2m(d)->default_access); return 0; } diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index efa49dd..c1b7545 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -810,7 +810,7 @@ void p2m_change_type_range(struct domain *d, /* Returns: 0 for success, -errno for failure */ static int set_typed_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, - p2m_type_t gfn_p2mt) + p2m_type_t gfn_p2mt, p2m_access_t access) { int rc = 0; p2m_access_t a; @@ -837,7 +837,7 @@ static int set_typed_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, P2M_DEBUG("set %d %lx %lx\n", gfn_p2mt, gfn, mfn_x(mfn)); rc = p2m_set_entry(p2m, gfn, mfn, PAGE_ORDER_4K, gfn_p2mt, - p2m->default_access); + access); gfn_unlock(p2m, gfn, 0); if ( rc ) gdprintk(XENLOG_ERR, @@ -850,12 +850,14 @@ static int set_typed_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, static int set_foreign_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) { - return set_typed_p2m_entry(d, gfn, mfn, p2m_map_foreign); + return set_typed_p2m_entry(d, gfn, mfn, p2m_map_foreign, + p2m_get_hostp2m(d)->default_access); } -int set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn) +int set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, + p2m_access_t access) { - return set_typed_p2m_entry(d, gfn, mfn, p2m_mmio_direct); + return set_typed_p2m_entry(d, gfn, mfn, p2m_mmio_direct, access); } /* Returns: 0 for success, -errno for failure */ @@ -1858,7 +1860,8 @@ int map_mmio_regions(struct domain *d, for ( i = 0; !ret && i < nr; i++ ) { - ret = set_mmio_p2m_entry(d, start_gfn + i, _mfn(mfn + i)); + ret = set_mmio_p2m_entry(d, start_gfn + i, _mfn(mfn + i), + p2m_get_hostp2m(d)->default_access); if ( ret ) { unmap_mmio_regions(d, start_gfn, i, mfn); diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 2cf73ca..e86e26f 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -513,7 +513,8 @@ int p2m_is_logdirty_range(struct p2m_domain *, unsigned long start, unsigned long end); /* Set mmio addresses in the p2m table (for pass-through) */ -int set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn); +int set_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn, + p2m_access_t access); int clear_mmio_p2m_entry(struct domain *d, unsigned long gfn, mfn_t mfn); /* Add foreign mapping to the guest's p2m table. */ -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |