|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 5/5] x86/mm: only a single instance of gw_page_flags[] is needed
On 26/10/15 11:53, Jan Beulich wrote:
> None of its elements depends on GUEST_PAGING_LEVELS.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> v2: Re-base on top of earlier changes.
Acked-by: George Dunlap <george.dunlap@xxxxxxxxxx>
>
> --- a/xen/arch/x86/mm/guest_walk.c
> +++ b/xen/arch/x86/mm/guest_walk.c
> @@ -32,30 +32,32 @@ asm(".file \"" __OBJECT_FILE__ "\"");
> #include <asm/page.h>
> #include <asm/guest_pt.h>
>
> +extern const uint32_t gw_page_flags[];
> +#if GUEST_PAGING_LEVELS == CONFIG_PAGING_LEVELS
> +const uint32_t gw_page_flags[] = {
> + /* I/F - Usr Wr */
> + /* 0 0 0 0 */ _PAGE_PRESENT,
> + /* 0 0 0 1 */ _PAGE_PRESENT|_PAGE_RW,
> + /* 0 0 1 0 */ _PAGE_PRESENT|_PAGE_USER,
> + /* 0 0 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER,
> + /* 0 1 0 0 */ _PAGE_PRESENT,
> + /* 0 1 0 1 */ _PAGE_PRESENT|_PAGE_RW,
> + /* 0 1 1 0 */ _PAGE_PRESENT|_PAGE_USER,
> + /* 0 1 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER,
> + /* 1 0 0 0 */ _PAGE_PRESENT|_PAGE_NX_BIT,
> + /* 1 0 0 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_NX_BIT,
> + /* 1 0 1 0 */ _PAGE_PRESENT|_PAGE_USER|_PAGE_NX_BIT,
> + /* 1 0 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER|_PAGE_NX_BIT,
> + /* 1 1 0 0 */ _PAGE_PRESENT|_PAGE_NX_BIT,
> + /* 1 1 0 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_NX_BIT,
> + /* 1 1 1 0 */ _PAGE_PRESENT|_PAGE_USER|_PAGE_NX_BIT,
> + /* 1 1 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER|_PAGE_NX_BIT,
> +};
> +#endif
>
> /* Flags that are needed in a pagetable entry, with the sense of NX inverted
> */
> static uint32_t mandatory_flags(struct vcpu *v, uint32_t pfec)
> {
> - static const uint32_t flags[] = {
> - /* I/F - Usr Wr */
> - /* 0 0 0 0 */ _PAGE_PRESENT,
> - /* 0 0 0 1 */ _PAGE_PRESENT|_PAGE_RW,
> - /* 0 0 1 0 */ _PAGE_PRESENT|_PAGE_USER,
> - /* 0 0 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER,
> - /* 0 1 0 0 */ _PAGE_PRESENT,
> - /* 0 1 0 1 */ _PAGE_PRESENT|_PAGE_RW,
> - /* 0 1 1 0 */ _PAGE_PRESENT|_PAGE_USER,
> - /* 0 1 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER,
> - /* 1 0 0 0 */ _PAGE_PRESENT|_PAGE_NX_BIT,
> - /* 1 0 0 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_NX_BIT,
> - /* 1 0 1 0 */ _PAGE_PRESENT|_PAGE_USER|_PAGE_NX_BIT,
> - /* 1 0 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER|_PAGE_NX_BIT,
> - /* 1 1 0 0 */ _PAGE_PRESENT|_PAGE_NX_BIT,
> - /* 1 1 0 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_NX_BIT,
> - /* 1 1 1 0 */ _PAGE_PRESENT|_PAGE_USER|_PAGE_NX_BIT,
> - /* 1 1 1 1 */ _PAGE_PRESENT|_PAGE_RW|_PAGE_USER|_PAGE_NX_BIT,
> - };
> -
> /* Don't demand not-NX if the CPU wouldn't enforce it. */
> if ( !guest_supports_nx(v) )
> pfec &= ~PFEC_insn_fetch;
> @@ -65,7 +67,7 @@ static uint32_t mandatory_flags(struct v
> && !(pfec & PFEC_user_mode) )
> pfec &= ~PFEC_write_access;
>
> - return flags[(pfec & 0x1f) >> 1] | _PAGE_INVALID_BITS;
> + return gw_page_flags[(pfec & 0x1f) >> 1] | _PAGE_INVALID_BITS;
> }
>
> /* Modify a guest pagetable entry to set the Accessed and Dirty bits.
>
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |