|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/4] x86/mm: allow for building without shadow mode support
On 28/01/15 08:11, Jan Beulich wrote:
> Considering the complexity of the code, it seems to be a reasonable
> thing to allow people to disable that code entirely even outside the
> immediate need for this by the next patch.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> There is one XXX being added to the code - while it doesn't look like
> we need to set v->arch.paging.mode in shadow_vcpu_init(), it may be
> deemed more secure to set up a table with stub function pointers.
I would agree that setting up a function pointer table is the safer
course of action to take.
>
> --- a/xen/arch/x86/Rules.mk
> +++ b/xen/arch/x86/Rules.mk
> @@ -32,9 +32,13 @@ x86 := y
> x86_32 := n
> x86_64 := y
>
> +shadow-paging ?= y
> +
> CFLAGS += -mno-red-zone -mno-sse -fpic
> CFLAGS += -fno-asynchronous-unwind-tables
> # -fvisibility=hidden reduces -fpic cost, if it's available
> ifneq ($(call cc-option,$(CC),-fvisibility=hidden,n),n)
> CFLAGS += -DGCC_HAS_VISIBILITY_ATTRIBUTE
> endif
> +
> +CFLAGS-$(shadow-paging) += -DCONFIG_SHADOW_PAGING
> --- a/xen/arch/x86/mm/paging.c
> +++ b/xen/arch/x86/mm/paging.c
> @@ -635,16 +635,16 @@ int paging_domain_init(struct domain *d,
> * don't want to leak any active log-dirty bitmaps */
> d->arch.paging.log_dirty.top = _mfn(INVALID_MFN);
>
> - /* The order of the *_init calls below is important, as the later
> - * ones may rewrite some common fields. Shadow pagetables are the
> - * default... */
> - shadow_domain_init(d, domcr_flags);
> -
> - /* ... but we will use hardware assistance if it's available. */
> + /*
> + * Shadow pagetables are the default, but we will use
> + * hardware assistance if it's available and enabled.
> + */
> if ( hap_enabled(d) )
> hap_domain_init(d);
> + else
> + rc = shadow_domain_init(d, domcr_flags);
>
> - return 0;
> + return rc;
> }
>
> /* vcpu paging struct initialization goes here */
> @@ -822,12 +822,16 @@ int paging_enable(struct domain *d, u32
> * and therefore its pagetables will soon be discarded */
> void pagetable_dying(struct domain *d, paddr_t gpa)
> {
> +#ifdef CONFIG_SHADOW_PAGING
> struct vcpu *v;
>
> ASSERT(paging_mode_shadow(d));
>
> v = d->vcpu[0];
> v->arch.paging.mode->shadow.pagetable_dying(v, gpa);
> +#else
> + BUG();
> +#endif
> }
>
> /* Print paging-assistance info to the console */
> --- a/xen/arch/x86/mm/shadow/Makefile
> +++ b/xen/arch/x86/mm/shadow/Makefile
> @@ -1,4 +1,5 @@
> -obj-$(x86_64) += common.o guest_2.o guest_3.o guest_4.o
> +obj-y := none.o
> +obj-$(shadow-paging) := common.o guest_2.o guest_3.o guest_4.o
>
Can this be
ifeq($(shadow-paging),y)
obj-y := common.o guest_2.o guest_3.o guest_4.o
else
obj-y := none.o
endif
Rather than relying on the double := to clobber none.o and prevent a
link failure ?
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |