[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Paging and memory sharing for HVM guests
Jan Beulich wrote: Grzegorz Milos <gm281@xxxxxxxxx> 17.12.09 00:14 >>>The series of 46 patches attached to this email contain the initial implementation of memory paging and sharing for Xen. Patrick Colp leads the work on the pager, and I am mostly responsible for memory sharing. We would be grateful for any comments/suggestions you might have. Individual patches are labeled with comments describing their purpose and a sign-off footnote. Of course we are happy to discuss them in more detail, as required. Assuming that there are no major objections against including them in the mainstream xen-unstable tree, we would like to move future development to that tree.So as far as I can tell we now have to colliding values in domctl.h: #define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31) #define XEN_DOMCTL_PFINFO_PAGEDTAB (0x8U<<28) Was it determined that this is not (going to be) a problem? It's just the tools interface, but it's a public header... XEN_DOMCTL_PFINFO_LPINTAB is currently only used by suspend/restore and offline page (which says the domain should be suspended first). Paging hasn't been fully tested with suspend yet. However, in xc_domain_save(), xc_map_foreign_batch() is called before xc_get_pfn_type_batch(), and xc_map_foreign_batch() ensures that all the pages in the specified range are paged in. So as far as I can tell, there should be no conflict here right now. But, that doesn't mean this couldn't cause problems in the future. Coming up with a non-conflicting solution would ultimately be preferred. Also there are several places were gmfn_to_mfn() was replaced by mfn_x(gfn_to_mfn()), but the p2m_is_valid() check that the former does was lost. Again - has it been determined that this will never cause any problem? It's been awhile since I made that decision, but I seem to recall it making sense at the time. That could have been for EPT only, though (which is what paging/mem_event was originally designed on). However, I can see no reason to not have the p2m_is_valid() check put in below the gfn_to_mfn() calls. I've attached a patch which does this (except for in hvm_set_ioreq_page, since there's already a check for !p2m_is_ram() which will cause the function to return an error). Patrick Add checks for p2m_is_valid() after calls to gfn_to_mfn() that replace calls to gmfn_to_mfn(), which does the check internally. Signed-off-by: Patrick Colp <Patrick.Colp@xxxxxxxxxx> diff -r 1a911fd65e52 xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c Fri Dec 18 07:53:27 2009 +0000 +++ b/xen/arch/x86/mm.c Fri Dec 18 09:01:05 2009 -0800 @@ -3105,6 +3105,8 @@ req.ptr -= cmd; gmfn = req.ptr >> PAGE_SHIFT; mfn = mfn_x(gfn_to_mfn(pt_owner, gmfn, &p2mt)); + if ( !p2m_is_valid(p2mt) ) + mfn = INVALID_MFN; if ( p2m_is_paged(p2mt) ) { diff -r 1a911fd65e52 xen/common/grant_table.c --- a/xen/common/grant_table.c Fri Dec 18 07:53:27 2009 +0000 +++ b/xen/common/grant_table.c Fri Dec 18 09:01:05 2009 -0800 @@ -1888,6 +1888,8 @@ { p2m_type_t p2mt; s_frame = mfn_x(gfn_to_mfn(sd, op->source.u.gmfn, &p2mt)); + if ( !p2m_is_valid(p2mt) ) + s_frame = INVALID_MFN; if ( p2m_is_paging(p2mt) ) { p2m_mem_paging_populate(sd, op->source.u.gmfn); @@ -1929,6 +1931,8 @@ { p2m_type_t p2mt; d_frame = gfn_to_mfn_private(dd, op->dest.u.gmfn, &p2mt); + if ( !p2m_is_valid(p2mt) ) + d_frame = INVALID_MFN; if ( p2m_is_paging(p2mt) ) { p2m_mem_paging_populate(dd, op->dest.u.gmfn); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |