[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch V3] expand x86 arch_shared_info to support linear p2m list
On 05/12/14 09:35, Juergen Gross wrote: > The x86 struct arch_shared_info field pfn_to_mfn_frame_list_list > currently contains the mfn of the top level page frame of the 3 level > p2m tree, which is used by the Xen tools during saving and restoring > (and live migration) of pv domains and for crash dump analysis. With > three levels of the p2m tree it is possible to support up to 512 GB of > RAM for a 64 bit pv domain. > > A 32 bit pv domain can support more, as each memory page can hold 1024 > instead of 512 entries, leading to a limit of 4 TB. > > To be able to support more RAM on x86-64 switch to an additional > virtual mapped p2m list. > > This patch expands struct arch_shared_info with a new p2m list virtual > address, the root of the page table root and a p2m generation count. > The new information is indicated by the domain to be valid by storing > a non-zero value into the page table root member. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Awesome - More documentation! Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > xen/include/public/arch-x86/xen.h | 36 +++++++++++++++++++++++++++++++++--- > 1 file changed, 33 insertions(+), 3 deletions(-) > > diff --git a/xen/include/public/arch-x86/xen.h > b/xen/include/public/arch-x86/xen.h > index f35804b..c5e880b 100644 > --- a/xen/include/public/arch-x86/xen.h > +++ b/xen/include/public/arch-x86/xen.h > @@ -220,11 +220,41 @@ typedef struct vcpu_guest_context vcpu_guest_context_t; > DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); > > struct arch_shared_info { > - unsigned long max_pfn; /* max pfn that appears in table > */ > - /* Frame containing list of mfns containing list of mfns containing p2m. > */ > + /* > + * Number of valid entries in the p2m table(s) anchored at > + * pfn_to_mfn_frame_list_list and/or p2m_vaddr. > + */ > + unsigned long max_pfn; > + /* > + * Frame containing list of mfns containing list of mfns containing p2m. > + * A value of 0 indicates it has not yet been set up, ~0 indicates it has > + * been set to invalid e.g. due to the p2m being too large for the > 3-level > + * p2m tree. In this case the linear mapper p2m list anchored at > p2m_vaddr > + * is to be used. > + */ > xen_pfn_t pfn_to_mfn_frame_list_list; > unsigned long nmi_reason; > - uint64_t pad[32]; > + /* > + * Following three fields are valid if p2m_cr3 contains a value different > + * from 0. > + * p2m_cr3 is the root of the address space where p2m_vaddr is valid. > + * p2m_cr3 is in the same format as a cr3 value in the vcpu register > state > + * and holds the folded machine frame number (via xen_pfn_to_cr3) of a > + * L3 or L4 page table. > + * p2m_vaddr holds the virtual address of the linear p2m list. All > entries > + * in the range [0...max_pfn[ are accessible via this pointer. > + * p2m_generation will be incremented by the guest before and after each > + * change of the mappings of the p2m list. p2m_generation starts at 0 and > + * a value with the least significant bit set indicates that a mapping > + * update is in progress. This allows guest external software (e.g. in > Dom0) > + * to verify that read mappings are consistent and whether they have > changed > + * since the last check. > + * Modifying a p2m element in the linear p2m list is allowed via an > atomic > + * write only. > + */ > + unsigned long p2m_cr3; /* cr3 value of the p2m address space */ > + unsigned long p2m_vaddr; /* virtual address of the p2m list */ > + unsigned long p2m_generation; /* generation count of p2m mapping */ > }; > typedef struct arch_shared_info arch_shared_info_t; > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |