DECLARE_DOMCTL;
domctl.cmd = XEN_DOMCTL_settscinfo;
domctl.domain = (domid_t)domid;
- domctl.u.tsc_info.info.tsc_mode = tsc_mode;
- domctl.u.tsc_info.info.elapsed_nsec = elapsed_nsec;
- domctl.u.tsc_info.info.gtsc_khz = gtsc_khz;
- domctl.u.tsc_info.info.incarnation = incarnation;
+ domctl.u.tsc_info.tsc_mode = tsc_mode;
+ domctl.u.tsc_info.elapsed_nsec = elapsed_nsec;
+ domctl.u.tsc_info.gtsc_khz = gtsc_khz;
+ domctl.u.tsc_info.incarnation = incarnation;
return do_domctl(xch, &domctl);
}
{
int rc;
DECLARE_DOMCTL;
- DECLARE_HYPERCALL_BUFFER(xen_guest_tsc_info_t, info);
-
- info = xc_hypercall_buffer_alloc(xch, info, sizeof(*info));
- if ( info == NULL )
- return -1;
domctl.cmd = XEN_DOMCTL_gettscinfo;
domctl.domain = (domid_t)domid;
- set_xen_guest_handle(domctl.u.tsc_info.out_info, info);
rc = do_domctl(xch, &domctl);
if ( rc == 0 )
{
- *tsc_mode = info->tsc_mode;
- *elapsed_nsec = info->elapsed_nsec;
- *gtsc_khz = info->gtsc_khz;
- *incarnation = info->incarnation;
+ *tsc_mode = domctl.u.tsc_info.tsc_mode;
+ *elapsed_nsec = domctl.u.tsc_info.elapsed_nsec;
+ *gtsc_khz = domctl.u.tsc_info.gtsc_khz;
+ *incarnation = domctl.u.tsc_info.incarnation;
}
- xc_hypercall_buffer_free(xch, info);
return rc;
}
ret = -EINVAL;
else
{
- xen_guest_tsc_info_t info = { 0 };
-
domain_pause(d);
- tsc_get_info(d, &info.tsc_mode,
- &info.elapsed_nsec,
- &info.gtsc_khz,
- &info.incarnation);
+ tsc_get_info(d, &domctl->u.tsc_info.tsc_mode,
+ &domctl->u.tsc_info.elapsed_nsec,
+ &domctl->u.tsc_info.gtsc_khz,
+ &domctl->u.tsc_info.incarnation);
domain_unpause(d);
- if ( copy_to_guest(domctl->u.tsc_info.out_info, &info, 1) )
- ret = -EFAULT;
+ copyback = 1;
}
break;
else
{
domain_pause(d);
- tsc_set_info(d, domctl->u.tsc_info.info.tsc_mode,
- domctl->u.tsc_info.info.elapsed_nsec,
- domctl->u.tsc_info.info.gtsc_khz,
- domctl->u.tsc_info.info.incarnation);
+ tsc_set_info(d, domctl->u.tsc_info.tsc_mode,
+ domctl->u.tsc_info.elapsed_nsec,
+ domctl->u.tsc_info.gtsc_khz,
+ domctl->u.tsc_info.incarnation);
domain_unpause(d);
}
break;
/* XEN_DOMCTL_gettscinfo */
/* XEN_DOMCTL_settscinfo */
-struct xen_guest_tsc_info {
+typedef struct xen_domctl_tsc_info {
+ /* IN/OUT */
uint32_t tsc_mode;
uint32_t gtsc_khz;
uint32_t incarnation;
uint32_t pad;
uint64_aligned_t elapsed_nsec;
-};
-typedef struct xen_guest_tsc_info xen_guest_tsc_info_t;
-DEFINE_XEN_GUEST_HANDLE(xen_guest_tsc_info_t);
-typedef struct xen_domctl_tsc_info {
- XEN_GUEST_HANDLE_64(xen_guest_tsc_info_t) out_info; /* OUT */
- xen_guest_tsc_info_t info; /* IN */
} xen_domctl_tsc_info_t;
/* XEN_DOMCTL_gdbsx_guestmemio guest mem io */