Skip to content

Commit

Permalink
xen: make grant table support configurable
Browse files Browse the repository at this point in the history
Introduce CONFIG_GRANT_TABLE. Provide stubs and make sure x86 and arm
hypervisors build with grant table disabled.

Signed-off-by: Wei Liu <[email protected]>
Acked-by: Jan Beulich <[email protected]>
Acked-by: Julien Grall <[email protected]>
  • Loading branch information
Wei Liu committed Mar 13, 2019
1 parent 38a85fe commit d215115
Show file tree
Hide file tree
Showing 9 changed files with 72 additions and 3 deletions.
2 changes: 2 additions & 0 deletions xen/arch/arm/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1396,7 +1396,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),
Expand Down
2 changes: 1 addition & 1 deletion xen/arch/x86/hvm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions xen/arch/x86/hvm/hypercall.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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)
{
Expand Down Expand Up @@ -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),
Expand Down
2 changes: 2 additions & 0 deletions xen/arch/x86/hypercall.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
2 changes: 1 addition & 1 deletion xen/arch/x86/pv/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions xen/arch/x86/pv/hypercall.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
11 changes: 11 additions & 0 deletions xen/common/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,17 @@ config COMPAT
config CORE_PARKING
bool

config GRANT_TABLE
bool "Grant table support" if EXPERT = "y"
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

Expand Down
2 changes: 1 addition & 1 deletion xen/common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,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
Expand Down
48 changes: 48 additions & 0 deletions xen/include/xen/grant_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <asm/page.h>
#include <asm/grant_table.h>

#ifdef CONFIG_GRANT_TABLE
struct grant_table;

extern unsigned int opt_max_grant_frames;
Expand Down Expand Up @@ -61,4 +62,51 @@ 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

#define opt_max_grant_frames 0
#define opt_max_maptrack_frames 0

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__ */

0 comments on commit d215115

Please sign in to comment.