[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [IA64] linux: grant table hypercall work around
# HG changeset patch # User awilliam@xxxxxxxxxxx # Node ID e502007031f4d6a8f6705713a225fa1d55e44450 # Parent 423bee6351299bfda90781cc018f5d21c16ff0ed [IA64] linux: grant table hypercall work around Current xen/ia64 grant table ignores some GNTMAP_xxx flags. work around for that. This patch will be removed once the flags are supported. Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx> --- linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c | 53 ++++++++++++++++++++++ linux-2.6-xen-sparse/include/asm-ia64/hypercall.h | 11 +++- 2 files changed, 62 insertions(+), 2 deletions(-) diff -r 423bee635129 -r e502007031f4 linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Tue May 09 11:40:00 2006 -0600 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Tue May 09 11:41:06 2006 -0600 @@ -201,6 +201,59 @@ out: /////////////////////////////////////////////////////////////////////////// +// grant table hack +// cmd: GNTTABOP_xxx + +#include <linux/mm.h> +#include <xen/interface/xen.h> +#include <xen/gnttab.h> + +static void +gnttab_map_grant_ref_pre(struct gnttab_map_grant_ref *uop) +{ + uint32_t flags; + + flags = uop->flags; + if (flags & GNTMAP_readonly) { +#if 0 + xprintd("GNTMAP_readonly is not supported yet\n"); +#endif + flags &= ~GNTMAP_readonly; + } + + if (flags & GNTMAP_host_map) { + if (flags & GNTMAP_application_map) { + xprintd("GNTMAP_application_map is not supported yet: flags 0x%x\n", flags); + BUG(); + } + if (flags & GNTMAP_contains_pte) { + xprintd("GNTMAP_contains_pte is not supported yet flags 0x%x\n", flags); + BUG(); + } + } else if (flags & GNTMAP_device_map) { + xprintd("GNTMAP_device_map is not supported yet 0x%x\n", flags); + BUG();//XXX not yet. actually this flag is not used. + } else { + BUG(); + } +} + +int +HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count) +{ + if (cmd == GNTTABOP_map_grant_ref) { + unsigned int i; + for (i = 0; i < count; i++) { + gnttab_map_grant_ref_pre( + (struct gnttab_map_grant_ref*)uop + i); + } + } + + return ____HYPERVISOR_grant_table_op(cmd, uop, count); +} + + +/////////////////////////////////////////////////////////////////////////// //XXX taken from balloon.c // temporal hack until balloon driver support. #include <linux/module.h> diff -r 423bee635129 -r e502007031f4 linux-2.6-xen-sparse/include/asm-ia64/hypercall.h --- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Tue May 09 11:40:00 2006 -0600 +++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Tue May 09 11:41:06 2006 -0600 @@ -244,12 +244,19 @@ HYPERVISOR_physdev_op( return rc; } -static inline int -HYPERVISOR_grant_table_op( +//XXX __HYPERVISOR_grant_table_op is used for this hypercall constant. +static inline int +____HYPERVISOR_grant_table_op( unsigned int cmd, void *uop, unsigned int count) { return _hypercall3(int, grant_table_op, cmd, uop, count); } +#ifndef CONFIG_XEN_IA64_DOM0_VP +#define HYPERVISOR_grant_table_op(cmd, uop, count) \ + ____HYPERVISOR_grant_table_op((cmd), (uop), (count)) +#else +int HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count); +#endif static inline int HYPERVISOR_vcpu_op( _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |