libxencall: introduce variant of xencall2() returning long

Some hypercalls, memory-op in particular, can return values requiring
more than 31 bits to represent. Hence the underlying layers need to make
sure they won't truncate such values.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Jackson <iwj@xenproject.org>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2021-06-24 16:39:02 +02:00
1 parent 6409210a5f
commit bef64f2c00
3 files changed
+20

No files matched your search

+4
View File
@@ -113,6 +113,10 @@ int xencall5(xencall_handle *xcall, unsigned int op,
uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg1, uint64_t arg2, uint64_t arg3,
uint64_t arg4, uint64_t arg5); uint64_t arg4, uint64_t arg5);
/* Variant(s) of the above, as needed, returning "long" instead of "int". */
long xencall2L(xencall_handle *xcall, unsigned int op,
uint64_t arg1, uint64_t arg2);
/* /*
* Allocate and free memory which is suitable for use as a pointer * Allocate and free memory which is suitable for use as a pointer
* argument to a hypercall. * argument to a hypercall.
+11
View File
@@ -127,6 +127,17 @@ int xencall2(xencall_handle *xcall, unsigned int op,
return osdep_hypercall(xcall, &call); return osdep_hypercall(xcall, &call);
} }
long xencall2L(xencall_handle *xcall, unsigned int op,
uint64_t arg1, uint64_t arg2)
{
privcmd_hypercall_t call = {
.op = op,
.arg = { arg1, arg2 },
};
return osdep_hypercall(xcall, &call);
}
int xencall3(xencall_handle *xcall, unsigned int op, int xencall3(xencall_handle *xcall, unsigned int op,
uint64_t arg1, uint64_t arg2, uint64_t arg3) uint64_t arg1, uint64_t arg2, uint64_t arg3)
{ {
+5
View File
@@ -27,3 +27,8 @@ VERS_1.2 {
global: global:
xencall_fd; xencall_fd;
} VERS_1.1; } VERS_1.1;
VERS_1.3 {
global:
xencall2L;
} VERS_1.2;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.