[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC for next] xen: make grant table configurable
Introduce CONFIG_GRANT_TABLE. Provide stubs and make sure x86 and arm hypervisors build with grant table disabled. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- I did this when I worked on splitting PV and HVM and thought this might be useful and it was simple enough to get done. RFC because I can envisage some configurations in the distant future do away with grant table and event channel. There is small a benefit to consider accepting this patch now so that Gitlab's randconf build can start testing with grant table turned off right away. --- xen/arch/arm/setup.c | 3 ++- xen/arch/arm/traps.c | 2 ++ xen/arch/x86/hvm/Makefile | 2 +- xen/arch/x86/hvm/hypercall.c | 4 ++++ xen/arch/x86/hypercall.c | 2 ++ xen/arch/x86/pv/Makefile | 2 +- xen/arch/x86/pv/hypercall.c | 2 ++ xen/arch/x86/setup.c | 6 +++-- xen/common/Kconfig | 11 +++++++++ xen/common/Makefile | 2 +- xen/include/asm-arm/grant_table.h | 4 +++- xen/include/xen/grant_table.h | 49 +++++++++++++++++++++++++++++++++++++-- 12 files changed, 80 insertions(+), 9 deletions(-) diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 444857a967..3cd3513928 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -740,7 +740,8 @@ void __init start_xen(unsigned long boot_phys_offset, .flags = XEN_DOMCTL_CDF_hvm_guest | XEN_DOMCTL_CDF_hap, .max_evtchn_port = -1, .max_grant_frames = gnttab_dom0_frames(), - .max_maptrack_frames = opt_max_maptrack_frames, + .max_maptrack_frames = IS_ENABLED(CONFIG_GRANT_TABLE) ? + opt_max_maptrack_frames : 0, }; dcache_line_bytes = read_dcache_line_bytes(); diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 221c762ada..0f1c1b6431 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -1392,7 +1392,9 @@ static arm_hypercall_t arm_hypercall_table[] = { HYPERCALL_DEPRECATED(physdev_op_compat, 1), HYPERCALL(sysctl, 2), HYPERCALL(hvm_op, 2), +#ifdef CONFIG_GRANT_TABLE HYPERCALL(grant_table_op, 3), +#endif HYPERCALL(multicall, 2), HYPERCALL(platform_op, 1), HYPERCALL_ARM(vcpu_op, 3), diff --git a/xen/arch/x86/hvm/Makefile b/xen/arch/x86/hvm/Makefile index 86b106f8e7..43e5f3a21f 100644 --- a/xen/arch/x86/hvm/Makefile +++ b/xen/arch/x86/hvm/Makefile @@ -7,7 +7,7 @@ obj-y += dm.o obj-bin-y += dom0_build.init.o obj-y += domain.o obj-y += emulate.o -obj-y += grant_table.o +obj-$(CONFIG_GRANT_TABLE) += grant_table.o obj-y += hpet.o obj-y += hvm.o obj-y += hypercall.o diff --git a/xen/arch/x86/hvm/hypercall.c b/xen/arch/x86/hvm/hypercall.c index 19d126377a..1f667efc36 100644 --- a/xen/arch/x86/hvm/hypercall.c +++ b/xen/arch/x86/hvm/hypercall.c @@ -47,6 +47,7 @@ static long hvm_memory_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) return rc; } +#ifdef CONFIG_GRANT_TABLE static long hvm_grant_table_op( unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count) { @@ -71,6 +72,7 @@ static long hvm_grant_table_op( else return compat_grant_table_op(cmd, uop, count); } +#endif static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) { @@ -119,7 +121,9 @@ static long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) static const hypercall_table_t hvm_hypercall_table[] = { HVM_CALL(memory_op), +#ifdef CONFIG_GRANT_TABLE HVM_CALL(grant_table_op), +#endif COMPAT_CALL(vcpu_op), HVM_CALL(physdev_op), COMPAT_CALL(xen_version), diff --git a/xen/arch/x86/hypercall.c b/xen/arch/x86/hypercall.c index 032de8f8f8..9311b63c1e 100644 --- a/xen/arch/x86/hypercall.c +++ b/xen/arch/x86/hypercall.c @@ -47,7 +47,9 @@ const hypercall_args_t hypercall_args_table[NR_hypercalls] = ARGS(xen_version, 2), ARGS(console_io, 3), ARGS(physdev_op_compat, 1), +#ifdef CONFIG_GRANT_TABLE ARGS(grant_table_op, 3), +#endif ARGS(vm_assist, 2), COMP(update_va_mapping_otherdomain, 4, 5), ARGS(vcpu_op, 3), diff --git a/xen/arch/x86/pv/Makefile b/xen/arch/x86/pv/Makefile index 65bca04175..cf28434ba9 100644 --- a/xen/arch/x86/pv/Makefile +++ b/xen/arch/x86/pv/Makefile @@ -5,7 +5,7 @@ obj-y += emulate.o obj-y += emul-gate-op.o obj-y += emul-inv-op.o obj-y += emul-priv-op.o -obj-y += grant_table.o +obj-$(CONFIG_GRANT_TABLE) += grant_table.o obj-y += hypercall.o obj-y += iret.o obj-y += misc-hypercalls.o diff --git a/xen/arch/x86/pv/hypercall.c b/xen/arch/x86/pv/hypercall.c index 5d11911735..ee0a6da515 100644 --- a/xen/arch/x86/pv/hypercall.c +++ b/xen/arch/x86/pv/hypercall.c @@ -53,7 +53,9 @@ const hypercall_table_t pv_hypercall_table[] = { COMPAT_CALL(xen_version), HYPERCALL(console_io), COMPAT_CALL(physdev_op_compat), +#ifdef CONFIG_GRANT_TABLE COMPAT_CALL(grant_table_op), +#endif COMPAT_CALL(vm_assist), COMPAT_CALL(update_va_mapping_otherdomain), COMPAT_CALL(iret), diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 06eb483cb4..09ef0e90df 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -686,8 +686,10 @@ void __init noreturn __start_xen(unsigned long mbi_p) struct xen_domctl_createdomain dom0_cfg = { .flags = XEN_DOMCTL_CDF_s3_integrity, .max_evtchn_port = -1, - .max_grant_frames = opt_max_grant_frames, - .max_maptrack_frames = opt_max_maptrack_frames, + .max_grant_frames = IS_ENABLED(CONFIG_GRANT_TABLE) ? + opt_max_grant_frames : 0, + .max_maptrack_frames = IS_ENABLED(CONFIG_GRANT_TABLE) ? + opt_max_maptrack_frames : 0, }; /* Critical region without IDT or TSS. Any fault is deadly! */ diff --git a/xen/common/Kconfig b/xen/common/Kconfig index a79cd40441..18e0be3d98 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -11,6 +11,17 @@ config COMPAT config CORE_PARKING bool +config GRANT_TABLE + bool "Grant table support" + default y + ---help--- + Grant table provides a generic mechanism to memory sharing + between domains. This shared memory interface underpins the + split device drivers for block and network IO in a classic + Xen setup. + + If unsure, say Y. + config HAS_ALTERNATIVE bool diff --git a/xen/common/Makefile b/xen/common/Makefile index 56fc201b6b..e748554a44 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -10,7 +10,7 @@ obj-y += event_2l.o obj-y += event_channel.o obj-y += event_fifo.o obj-$(CONFIG_CRASH_DEBUG) += gdbstub.o -obj-y += grant_table.o +obj-$(CONFIG_GRANT_TABLE) += grant_table.o obj-y += guestcopy.o obj-bin-y += gunzip.init.o obj-y += irq.o diff --git a/xen/include/asm-arm/grant_table.h b/xen/include/asm-arm/grant_table.h index 816e3c6d68..50a07b8b17 100644 --- a/xen/include/asm-arm/grant_table.h +++ b/xen/include/asm-arm/grant_table.h @@ -31,7 +31,9 @@ void gnttab_mark_dirty(struct domain *d, mfn_t mfn); * enough space for a large grant table */ #define gnttab_dom0_frames() \ - min_t(unsigned int, opt_max_grant_frames, PFN_DOWN(_etext - _stext)) + min_t(unsigned int, \ + IS_ENABLED(CONFIG_GRANT_TABLE) ? opt_max_grant_frames : 0, \ + PFN_DOWN(_etext - _stext)) #define gnttab_init_arch(gt) \ ({ \ diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h index 12e8a4b80b..f0498df727 100644 --- a/xen/include/xen/grant_table.h +++ b/xen/include/xen/grant_table.h @@ -29,11 +29,12 @@ #include <asm/page.h> #include <asm/grant_table.h> -struct grant_table; - extern unsigned int opt_max_grant_frames; extern unsigned int opt_max_maptrack_frames; +#ifdef CONFIG_GRANT_TABLE +struct grant_table; + /* Create/destroy per-domain grant table context. */ int grant_table_init(struct domain *d, unsigned int max_grant_frames, unsigned int max_maptrack_frames); @@ -61,4 +62,48 @@ int gnttab_get_shared_frame(struct domain *d, unsigned long idx, int gnttab_get_status_frame(struct domain *d, unsigned long idx, mfn_t *mfn); +#else + +static inline int grant_table_init(struct domain *d, + unsigned int max_grant_frames, + unsigned int max_maptrack_frames) +{ + return 0; +} + +static inline void grant_table_destroy(struct domain *d) {} + +static inline void grant_table_init_vcpu(struct vcpu *v) {} + +static inline void grant_table_warn_active_grants(struct domain *d) {} + +static inline void gnttab_release_mappings(struct domain *d) {} + +static inline int mem_sharing_gref_to_gfn(struct grant_table *gt, + grant_ref_t ref, + gfn_t *gfn, uint16_t *status) +{ + return -EINVAL; +} + +static inline int gnttab_map_frame(struct domain *d, unsigned long idx, + gfn_t gfn, mfn_t *mfn) +{ + return -EINVAL; +} + +static inline int gnttab_get_shared_frame(struct domain *d, unsigned long idx, + mfn_t *mfn) +{ + return -EINVAL; +} + +static inline int gnttab_get_status_frame(struct domain *d, unsigned long idx, + mfn_t *mfn) +{ + return -EINVAL; +} + +#endif /* CONFIG_GRANT_TABLE */ + #endif /* __XEN_GRANT_TABLE_H__ */ -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |