int xc_perfc_query(xc_interface *xch, struct xc_hypercall_buffer *desc, struct xc_hypercall_buffer *val) { DECLARE_SYSCTL; DECLARE_HYPERCALL_BUFFER_ARGUMENT(desc); DECLARE_HYPERCALL_BUFFER_ARGUMENT(val); sysctl.cmd = XEN_SYSCTL_perfc_op; sysctl.u.perfc_op.cmd = XEN_SYSCTL_PERFCOP_query; set_xen_guest_handle(sysctl.u.perfc_op.desc, desc); set_xen_guest_handle(sysctl.u.perfc_op.val, val); return do_sysctl(xch, &sysctl); }
int gcov_sysctl(int op, struct xen_sysctl *sysctl, struct xc_hypercall_buffer *buf, uint32_t buf_size) { DECLARE_HYPERCALL_BUFFER_ARGUMENT(buf); memset(sysctl, 0, sizeof(*sysctl)); sysctl->cmd = XEN_SYSCTL_gcov_op; sysctl->u.gcov_op.cmd = op; sysctl->u.gcov_op.size = buf_size; set_xen_guest_handle(sysctl->u.gcov_op.buffer, buf); return xc_sysctl(xch, sysctl); }
int xc_lockprof_query(xc_interface *xch, uint32_t *n_elems, uint64_t *time, struct xc_hypercall_buffer *data) { int rc; DECLARE_SYSCTL; DECLARE_HYPERCALL_BUFFER_ARGUMENT(data); sysctl.cmd = XEN_SYSCTL_lockprof_op; sysctl.u.lockprof_op.cmd = XEN_SYSCTL_LOCKPROF_query; sysctl.u.lockprof_op.max_elem = *n_elems; set_xen_guest_handle(sysctl.u.lockprof_op.data, data); rc = do_sysctl(xch, &sysctl); *n_elems = sysctl.u.lockprof_op.nr_elem; return rc; }
int xc_shadow_control(xc_interface *xch, uint32_t domid, unsigned int sop, xc_hypercall_buffer_t *dirty_bitmap, unsigned long pages, unsigned long *mb, uint32_t mode, xc_shadow_op_stats_t *stats) { int rc; DECLARE_DOMCTL; DECLARE_HYPERCALL_BUFFER_ARGUMENT(dirty_bitmap); memset(&domctl, 0, sizeof(domctl)); domctl.cmd = XEN_DOMCTL_shadow_op; domctl.domain = (domid_t)domid; domctl.u.shadow_op.op = sop; domctl.u.shadow_op.pages = pages; domctl.u.shadow_op.mb = mb ? *mb : 0; domctl.u.shadow_op.mode = mode; if (dirty_bitmap != NULL) set_xen_guest_handle(domctl.u.shadow_op.dirty_bitmap, dirty_bitmap); rc = do_domctl(xch, &domctl); if ( stats ) memcpy(stats, &domctl.u.shadow_op.stats, sizeof(xc_shadow_op_stats_t)); if ( mb ) *mb = domctl.u.shadow_op.mb; return (rc == 0) ? domctl.u.shadow_op.pages : rc; }