[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
At 11:10 +0000 on 28 Jan (1422439811), Andrew Cooper wrote: > 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. +1. > > --- 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 ? +1 to this too, for readability. Or else define a $(shadow-dummy) that's set appropriately and use obj-$(shadow-dummy) := none.o ? Cheers, Tim _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |