[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.