add tmem support to xencomm.
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
#include <xen/interface/xenoprof.h>
#include <xen/interface/vcpu.h>
#include <xen/interface/kexec.h>
+#include <xen/interface/tmem.h>
#include <asm/hypervisor.h>
#include <asm/page.h>
#include <asm/uaccess.h>
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);
+}
#include <xen/interface/xsm/acm_ops.h>
#include <xen/interface/hvm/params.h>
#include <xen/interface/arch-ia64/debug_op.h>
+#include <xen/interface/tmem.h>
#include <xen/public/privcmd.h>
#include <asm/hypercall.h>
#include <asm/page.h>
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)
{
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;
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)
#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;})