static int flush_mmu_updates(xc_interface *xch, struct xc_mmu *mmu) { int rc, err = 0; DECLARE_NAMED_HYPERCALL_BOUNCE(updates, mmu->updates, mmu->idx*sizeof(*mmu->updates), XC_HYPERCALL_BUFFER_BOUNCE_BOTH); if ( mmu->idx == 0 ) return 0; if ( xc_hypercall_bounce_pre(xch, updates) ) { PERROR("flush_mmu_updates: bounce buffer failed"); err = 1; goto out; } rc = xencall4(xch->xcall, __HYPERVISOR_mmu_update, HYPERCALL_BUFFER_AS_ARG(updates), mmu->idx, 0, mmu->subject); if ( rc < 0 ) { ERROR("Failure when submitting mmu updates"); err = 1; } mmu->idx = 0; xc_hypercall_bounce_post(xch, updates); out: return err; }
int xc_mmuext_op( xc_interface *xch, struct mmuext_op *op, unsigned int nr_ops, uint32_t dom) { DECLARE_HYPERCALL_BOUNCE(op, nr_ops*sizeof(*op), XC_HYPERCALL_BUFFER_BOUNCE_BOTH); long ret = -1; if ( xc_hypercall_bounce_pre(xch, op) ) { PERROR("Could not bounce memory for mmuext op hypercall"); goto out1; } ret = xencall4(xch->xcall, __HYPERVISOR_mmuext_op, HYPERCALL_BUFFER_AS_ARG(op), nr_ops, 0, dom); xc_hypercall_bounce_post(xch, op); out1: return ret; }
int HYPERVISOR_grant_table_op(int cmd, gnttab_setup_table_t *setup, int count) { return xencall4(__HYPERVISOR_grant_table_op, cmd, (ulong)setup, count); }
int HYPERVISOR_console_io(int cmd, int count, char *str) { return xencall4(__HYPERVISOR_console_io, cmd, count, (ulong)str); }