From: Keir Fraser Date: Fri, 9 Jan 2009 11:44:35 +0000 (+0000) Subject: New XENMAPSPACE_gmfn parameter for XENMEM_add_to_physmap. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14014^2~84 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3e50af3d8776193538d9538445e62012ade10c85;p=xen.git New XENMAPSPACE_gmfn parameter for XENMEM_add_to_physmap. Signed-off-by: Keir Fraser --- diff --git a/xen/arch/ia64/xen/mm.c b/xen/arch/ia64/xen/mm.c index 66336182fe..1213f7de96 100644 --- a/xen/arch/ia64/xen/mm.c +++ b/xen/arch/ia64/xen/mm.c @@ -3295,38 +3295,40 @@ arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg) spin_unlock(&d->grant_table->lock); break; - case XENMAPSPACE_mfn: - { - if ( get_page_from_pagenr(xatp.idx, d) ) { - struct xen_ia64_memmap_info memmap_info; - efi_memory_desc_t md; - int ret; - - mfn = xatp.idx; - page = mfn_to_page(mfn); - - memmap_info.efi_memmap_size = sizeof(md); - memmap_info.efi_memdesc_size = sizeof(md); - memmap_info.efi_memdesc_version = - EFI_MEMORY_DESCRIPTOR_VERSION; - - md.type = EFI_CONVENTIONAL_MEMORY; - md.pad = 0; - md.phys_addr = xatp.gpfn << PAGE_SHIFT; - md.virt_addr = 0; - md.num_pages = 1UL << (PAGE_SHIFT - EFI_PAGE_SHIFT); - md.attribute = EFI_MEMORY_WB; - - ret = __dom0vp_add_memdesc(d, &memmap_info, (char*)&md); - if (ret != 0) { - put_page(page); - rcu_unlock_domain(d); - gdprintk(XENLOG_DEBUG, - "%s:%d td %d gpfn 0x%lx mfn 0x%lx ret %d\n", - __func__, __LINE__, - d->domain_id, xatp.gpfn, xatp.idx, ret); - return ret; - } + case XENMAPSPACE_gmfn: + xatp.idx = gmfn_to_mfn(d, xatp.idx); + case XENMAPSPACE_mfn: { + struct xen_ia64_memmap_info memmap_info; + efi_memory_desc_t md; + int ret; + + if ( !get_page_from_pagenr(xatp.idx, d) ) + break; + + mfn = xatp.idx; + page = mfn_to_page(mfn); + + memmap_info.efi_memmap_size = sizeof(md); + memmap_info.efi_memdesc_size = sizeof(md); + memmap_info.efi_memdesc_version = + EFI_MEMORY_DESCRIPTOR_VERSION; + + md.type = EFI_CONVENTIONAL_MEMORY; + md.pad = 0; + md.phys_addr = xatp.gpfn << PAGE_SHIFT; + md.virt_addr = 0; + md.num_pages = 1UL << (PAGE_SHIFT - EFI_PAGE_SHIFT); + md.attribute = EFI_MEMORY_WB; + + ret = __dom0vp_add_memdesc(d, &memmap_info, (char*)&md); + if (ret != 0) { + put_page(page); + rcu_unlock_domain(d); + gdprintk(XENLOG_DEBUG, + "%s:%d td %d gpfn 0x%lx mfn 0x%lx ret %d\n", + __func__, __LINE__, + d->domain_id, xatp.gpfn, xatp.idx, ret); + return ret; } break; } diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 15b3fe2317..142b9f1efb 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3808,14 +3808,14 @@ long arch_memory_op(int op, XEN_GUEST_HANDLE(void) arg) spin_unlock(&d->grant_table->lock); break; + case XENMAPSPACE_gmfn: + xatp.idx = gmfn_to_mfn(d, xatp.idx); case XENMAPSPACE_mfn: - { - if ( get_page_from_pagenr(xatp.idx, d) ) { - mfn = xatp.idx; - page = mfn_to_page(mfn); - } + if ( !get_page_from_pagenr(xatp.idx, d) ) + break; + mfn = xatp.idx; + page = mfn_to_page(mfn); break; - } default: break; } diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h index 6edd59b5ef..5ff7ef4447 100644 --- a/xen/include/public/memory.h +++ b/xen/include/public/memory.h @@ -206,7 +206,8 @@ struct xen_add_to_physmap { /* Source mapping space. */ #define XENMAPSPACE_shared_info 0 /* shared info page */ #define XENMAPSPACE_grant_table 1 /* grant table page */ -#define XENMAPSPACE_mfn 2 /* usual MFN */ +#define XENMAPSPACE_mfn 2 /* MFN */ +#define XENMAPSPACE_gmfn 3 /* GMFN */ unsigned int space; /* Index into source mapping space. */