diff options
author | Jennifer Herbert <jennifer.herbert@citrix.com> | 2014-12-24 14:03:16 +0000 |
---|---|---|
committer | David Vrabel <david.vrabel@citrix.com> | 2015-01-28 14:03:11 +0000 |
commit | 0ae65f49af64d68f0daca37b83383115cae5e690 (patch) | |
tree | 9c55a3b138a4f3fcccf1b6b6c7ab82c16ca699e4 /arch/x86/xen | |
parent | 0bb599fd30108883b00c7d4a226eeb49111e6932 (diff) |
x86/xen: require ballooned pages for grant maps
Ballooned pages are always used for grant maps which means the
original frame does not need to be saved in page->index nor restored
after the grant unmap.
This allows the workaround in netback for the conflicting use of the
(unionized) page->index and page->pfmemalloc to be removed.
Signed-off-by: Jennifer Herbert <jennifer.herbert@citrix.com>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Diffstat (limited to 'arch/x86/xen')
-rw-r--r-- | arch/x86/xen/p2m.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index c9bc53f64359..a8691cb08420 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -682,9 +682,10 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops, pfn = page_to_pfn(pages[i]); WARN_ON(PagePrivate(pages[i])); + WARN(pfn_to_mfn(pfn) != INVALID_P2M_ENTRY, "page must be ballooned"); + SetPagePrivate(pages[i]); set_page_private(pages[i], mfn); - pages[i]->index = pfn_to_mfn(pfn); if (unlikely(!set_phys_to_machine(pfn, FOREIGN_FRAME(mfn)))) { ret = -ENOMEM; @@ -718,7 +719,7 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, set_page_private(pages[i], INVALID_P2M_ENTRY); WARN_ON(!PagePrivate(pages[i])); ClearPagePrivate(pages[i]); - set_phys_to_machine(pfn, pages[i]->index); + set_phys_to_machine(pfn, INVALID_P2M_ENTRY); } if (kunmap_ops) ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, |