[CRIU] [PATCH 2/2] page-server: Tune up the encode/decode helpers
Pavel Emelyanov
xemul at virtuozzo.com
Fri Jul 14 18:31:22 MSK 2017
Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
criu/page-xfer.c | 24 +++++++++---------------
1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/criu/page-xfer.c b/criu/page-xfer.c
index 56d1853..3ed0088 100644
--- a/criu/page-xfer.c
+++ b/criu/page-xfer.c
@@ -57,11 +57,11 @@ static void psi2iovec(struct page_server_iov *ps, struct iovec *iov)
#define PS_TYPE_PID (1)
#define PS_TYPE_SHMEM (2)
/*
- * XXX: When adding new types here check decode_pm_type for legacy
+ * XXX: When adding new types here check decode_pm for legacy
* numbers that can be met from older CRIUs
*/
-static inline u64 encode_pm_id(int type, long id)
+static inline u64 encode_pm(int type, long id)
{
if (type == CR_FD_PAGEMAP)
type = PS_TYPE_PID;
@@ -75,7 +75,7 @@ static inline u64 encode_pm_id(int type, long id)
return ((u64)id) << PS_TYPE_BITS | type;
}
-static int decode_pm_type(u64 dst_id)
+static int decode_pm(u64 dst_id, long *id)
{
int type;
@@ -92,6 +92,7 @@ static int decode_pm_type(u64 dst_id)
case 16: /* 1.2 */
case 17: /* 1.0 1.1 */
case PS_TYPE_PID:
+ *id = dst_id >> PS_TYPE_BITS;
type = CR_FD_PAGEMAP;
break;
case 27: /* 1.3 */
@@ -101,6 +102,7 @@ static int decode_pm_type(u64 dst_id)
case 33: /* 1.0 1.1 3.1 3.2 */
case 34: /* 2.* 3.0 */
case PS_TYPE_SHMEM:
+ *id = dst_id >> PS_TYPE_BITS;
type = CR_FD_SHMEM_PAGEMAP;
break;
default:
@@ -111,11 +113,6 @@ static int decode_pm_type(u64 dst_id)
return type;
}
-static long decode_pm_id(u64 dst_id)
-{
- return (long)(dst_id >> PS_TYPE_BITS);
-}
-
static inline u32 encode_ps_cmd(u32 cmd, u32 flags)
{
return flags << PS_CMD_BITS | cmd;
@@ -188,7 +185,7 @@ static int open_page_server_xfer(struct page_xfer *xfer, int fd_type, long id)
xfer->write_pagemap = write_pagemap_to_server;
xfer->write_pages = write_pages_to_server;
xfer->close = close_server_xfer;
- xfer->dst_id = encode_pm_id(fd_type, id);
+ xfer->dst_id = encode_pm(fd_type, id);
xfer->parent = NULL;
pi.dst_id = xfer->dst_id;
@@ -541,9 +538,7 @@ static int page_server_check_parent(int sk, struct page_server_iov *pi)
int type, ret;
long id;
- type = decode_pm_type(pi->dst_id);
- id = decode_pm_id(pi->dst_id);
-
+ type = decode_pm(pi->dst_id, &id);
if (type == -1) {
pr_err("Unknown pagemap type received\n");
return -1;
@@ -567,7 +562,7 @@ static int check_parent_server_xfer(int fd_type, long id)
int has_parent;
pi.cmd = PS_IOV_PARENT;
- pi.dst_id = encode_pm_id(fd_type, id);
+ pi.dst_id = encode_pm(fd_type, id);
if (send_psi(page_server_sk, &pi))
return -1;
@@ -621,8 +616,7 @@ static int page_server_open(int sk, struct page_server_iov *pi)
int type;
long id;
- type = decode_pm_type(pi->dst_id);
- id = decode_pm_id(pi->dst_id);
+ type = decode_pm(pi->dst_id, &id);
if (type == -1) {
pr_err("Unknown pagemap type received\n");
return -1;
--
2.1.4
More information about the CRIU
mailing list