From d74014b39f89e477fbd7a8d026b7109a2f4c4728 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Mon, 29 Jun 2009 11:23:16 +0900 Subject: [PATCH] [IA64] xencomm: tmem support. add tmem support to xencomm. Signed-off-by: Isaku Yamahata --- arch/ia64/xen/xcom_hcall.c | 13 +++++++++++++ arch/ia64/xen/xcom_privcmd.c | 19 +++++++++++++++++++ include/asm-ia64/hypercall.h | 7 +++++++ 3 files changed, 39 insertions(+) diff --git a/arch/ia64/xen/xcom_hcall.c b/arch/ia64/xen/xcom_hcall.c index b6d98d77..575c5b27 100644 --- a/arch/ia64/xen/xcom_hcall.c +++ b/arch/ia64/xen/xcom_hcall.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -739,3 +740,15 @@ xencomm_hypercall_kexec_op(int cmd, void *arg) return xencomm_arch_hypercall_kexec_op(cmd, desc); } + +int +xencomm_hypercall_tmem_op(struct tmem_op *op) +{ + struct xencomm_handle *desc; + + desc = xencomm_map_no_alloc(op, sizeof(*op)); + if (desc == NULL) + return -EINVAL; + + return xencomm_arch_hypercall_tmem_op(desc); +} diff --git a/arch/ia64/xen/xcom_privcmd.c b/arch/ia64/xen/xcom_privcmd.c index ec222572..909a8c19 100644 --- a/arch/ia64/xen/xcom_privcmd.c +++ b/arch/ia64/xen/xcom_privcmd.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -897,6 +898,22 @@ xencomm_privcmd_ia64_physdev_op(privcmd_hypercall_t *hypercall) return ret; } +static int +xencomm_privcmd_tmem_op(privcmd_hypercall_t *hypercall) +{ + struct xencomm_handle *desc; + int ret; + + desc = xencomm_map((void *)hypercall->arg[0], sizeof(struct tmem_op)); + if (desc == NULL) + return -ENOMEM; + + ret = xencomm_arch_hypercall_tmem_op(desc); + + xencomm_free(desc); + return ret; +} + int privcmd_hypercall(privcmd_hypercall_t *hypercall) { @@ -925,6 +942,8 @@ privcmd_hypercall(privcmd_hypercall_t *hypercall) return xencomm_privcmd_ia64_debug_op(hypercall); case __HYPERVISOR_physdev_op: return xencomm_privcmd_ia64_physdev_op(hypercall); + case __HYPERVISOR_tmem_op: + return xencomm_privcmd_tmem_op(hypercall); default: printk("%s: unknown hcall (%ld)\n", __func__, hypercall->op); return -ENOSYS; diff --git a/include/asm-ia64/hypercall.h b/include/asm-ia64/hypercall.h index 2e64e561..dad5e8f5 100644 --- a/include/asm-ia64/hypercall.h +++ b/include/asm-ia64/hypercall.h @@ -435,6 +435,12 @@ xencomm_arch_hypercall_kexec_op(int cmd, struct xencomm_handle *arg) return _hypercall2(int, kexec_op, cmd, arg); } +static inline int +xencomm_arch_hypercall_tmem_op(struct xencomm_handle *arg) +{ + return _hypercall1(int, tmem_op, arg); +} + // for balloon driver #define HYPERVISOR_update_va_mapping(va, new_val, flags) (0) @@ -455,6 +461,7 @@ xencomm_arch_hypercall_kexec_op(int cmd, struct xencomm_handle *arg) #define HYPERVISOR_vcpu_op xencomm_hypercall_vcpu_op #define HYPERVISOR_opt_feature xencomm_hypercall_opt_feature #define HYPERVISOR_kexec_op xencomm_hypercall_kexec_op +#define HYPERVISOR_tmem_op xencomm_hypercall_tmem_op /* to compile gnttab_copy_grant_page() in drivers/xen/core/gnttab.c */ #define HYPERVISOR_mmu_update(req, count, success_count, domid) ({BUG();0;}) -- 2.39.5