[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] gnttab: fix/adjust gnttab_transfer()
commit 213f14511446de8eb6c4756aee505e914a3e3a16 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Jun 16 12:28:11 2015 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Jun 16 12:28:11 2015 +0200 gnttab: fix/adjust gnttab_transfer() - don't update shared entry's frame number for translated domains (as MFNs shouldn't be exposed to such guests) - for v1 grant table format, force copying of the page also when the intended MFN doesn't fit in 32 bits (and the domain isn't translated) - fix an apparent off-by-one error (it's unclear to me why commit 5cc77f9098 ("32-on-64: Fix domain address-size clamping, implement") uses BITS_PER_LONG-1 here, while using BITS_PER_LONG in the two other invocations of domain_clamp_alloc_bitsize()) - adjust comments accompanying the shared entry's frame field Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- xen/common/grant_table.c | 11 ++++++++--- xen/include/public/grant_table.h | 6 ++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 0538803..51500bf 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -1708,7 +1708,8 @@ gnttab_transfer( } max_bitsize = domain_clamp_alloc_bitsize( - e, BITS_PER_LONG+PAGE_SHIFT-1); + e, e->grant_table->gt_version > 1 || paging_mode_translate(e) + ? BITS_PER_LONG + PAGE_SHIFT : 32 + PAGE_SHIFT); if ( (1UL << (max_bitsize - PAGE_SHIFT)) <= mfn ) { struct page_info *new_page; @@ -1806,14 +1807,18 @@ gnttab_transfer( if ( e->grant_table->gt_version == 1 ) { grant_entry_v1_t *sha = &shared_entry_v1(e->grant_table, gop.ref); + guest_physmap_add_page(e, sha->frame, mfn, 0); - sha->frame = mfn; + if ( !paging_mode_translate(e) ) + sha->frame = mfn; } else { grant_entry_v2_t *sha = &shared_entry_v2(e->grant_table, gop.ref); + guest_physmap_add_page(e, sha->full_page.frame, mfn, 0); - sha->full_page.frame = mfn; + if ( !paging_mode_translate(e) ) + sha->full_page.frame = mfn; } smp_wmb(); shared_entry_header(e->grant_table, gop.ref)->flags |= diff --git a/xen/include/public/grant_table.h b/xen/include/public/grant_table.h index f516a57..e9393fd 100644 --- a/xen/include/public/grant_table.h +++ b/xen/include/public/grant_table.h @@ -134,8 +134,10 @@ struct grant_entry_v1 { /* The domain being granted foreign privileges. [GST] */ domid_t domid; /* - * GTF_permit_access: Frame that @domid is allowed to map and access. [GST] - * GTF_accept_transfer: Frame whose ownership transferred by @domid. [XEN] + * GTF_permit_access: GFN that @domid is allowed to map and access. [GST] + * GTF_accept_transfer: GFN that @domid is allowed to transfer into. [GST] + * GTF_transfer_completed: MFN whose ownership transferred by @domid + * (non-translated guests only). [XEN] */ uint32_t frame; }; -- 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 |