|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Suggestion: Improve hypercall Interface to get real return value
Hello everyone,
I am a user of Xen and I have encountered a problem when trying to get the
return value from hypercall in TOOLS. I found that when programs in TOOLS
called hypercall and failed, it would get return value -1 instead of the real
return value given by Hypervisor.
The reason is that the hypercall interface of TOOLS uses ioctl to call
hypercall, and ioctl will only return -1 when failure occurs. The related code
is in xen-4.2.0/tools/libxc/xc_linux_osdep.c:
static int linux_privcmd_hypercall(xc_interface *xch, xc_osdep_handle h,
privcmd_hypercall_t *hypercall)
{
int fd = (int)h;
return ioctl(fd, IOCTL_PRIVCMD_HYPERCALL, hypercall);
}
While I don't think this is a good idea, because some tools may wish to use
real return value. For example, in xen-4.2.0/tools/memshr/interface.c, the
function memshr_vbd_issue_ro_request will switch variable ret which comes from
return value of hypercall do_memory_op:
switch(ret)
{
case XENMEM_SHARING_OP_S_HANDLE_INVALID:
ââ
break;
case XENMEM_SHARING_OP_C_HANDLE_INVALID:
ââ
break;
default:
break;
}
So I think if we could modify the interface a little bit to return the real
error number, it would be beneficial to many TOOLS developers including myself.
My suggested modification is simple:
static int linux_privcmd_hypercall(xc_interface *xch, xc_osdep_handle h,
privcmd_hypercall_t *hypercall)
{
int fd = (int)h;
int ret = ioctl(fd, IOCTL_PRIVCMD_HYPERCALL, hypercall);
if (ret < 0)
return -errno;
return ret;
}
Do you think this would be a good modification?
Also, I am curious why the original design didn't do that. Is it a bug or is it
designed that way intentionally?
Any suggestions and comments will be highly appreciated.
Thanks!
Best Regards,
Yanzhang Li
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |