From: root root@localhost.localdomain
Add 'clear-pin-mem' option for clearing pin memory data, and 'init-page-map' option for initializationing buffer for reading page map info.
Conflict:NA Reference:https://gitee.com/src-openeuler/criu/pulls/21 Signed-off-by: Jingxian He hejingxian@huawei.com --- criu/crtools.c | 30 ++++++++++++++++++++++++++++++ criu/include/restorer.h | 4 ++++ 2 files changed, 34 insertions(+)
diff --git a/criu/crtools.c b/criu/crtools.c index 4954f0c..bac2992 100644 --- a/criu/crtools.c +++ b/criu/crtools.c @@ -46,6 +46,7 @@
#include "setproctitle.h" #include "sysctl.h" +#include "restorer.h"
void flush_early_log_to_stderr(void) __attribute__((destructor));
@@ -68,6 +69,25 @@ static int image_dir_mode(char *argv[], int optind) return -1; }
+int init_pagemap_read(int para) +{ + int fd, ret; + + fd = open(PIN_MEM_FILE, O_RDWR, 0); + if (fd < 0) { + pr_warn("error open file: %s\n", PIN_MEM_FILE); + return -1; + } + + ret = ioctl(fd, INIT_PAGEMAP_READ, (unsigned long) ¶); + if (ret < 0) { + pr_warn("Init pagemap read fail, errno: %s\n", strerror(errno)); + } + + close(fd); + return ret; +} + int main(int argc, char *argv[], char *envp[]) { int ret = -1; @@ -173,6 +193,14 @@ int main(int argc, char *argv[], char *envp[]) goto usage; }
+ if (!strcmp(argv[optind], "clear-pin-memory")) { + return clear_pin_mem(0); + } + + if (!strcmp(argv[optind], "init-pagemap-read")) { + return init_pagemap_read(0); + } + /* We must not open imgs dir, if service is called */ if (strcmp(argv[optind], "service")) { ret = open_image_dir(opts.imgs_dir, image_dir_mode(argv, optind)); @@ -324,6 +352,8 @@ usage: " dedup remove duplicates in memory dump\n" " cpuinfo dump writes cpu information into image file\n" " cpuinfo check validates cpu information read from image file\n" +" clear-pin-memory clear pin memory manage data\n" +" init-pagemap-read init data buffer for reading page map info\n" );
if (usage_error) { diff --git a/criu/include/restorer.h b/criu/include/restorer.h index f6b45d6..affc155 100644 --- a/criu/include/restorer.h +++ b/criu/include/restorer.h @@ -334,12 +334,14 @@ enum { #define _SET_PIN_MEM_AREA 1 #define _CLEAR_PIN_MEM_AREA 2 #define _REMAP_PIN_MEM_AREA 3 +#define _INIT_PAGEMAP_READ 5 #define _DUMP_SEPCIAL_PAGES 6 #define _RETORE_SEPCIAL_PAGES 7 #define _SET_FORK_PID 8 #define SET_PIN_MEM_AREA _IOW(PIN_MEM_MAGIC, _SET_PIN_MEM_AREA, struct pin_mem_area_set) #define CLEAR_PIN_MEM_AREA _IOW(PIN_MEM_MAGIC, _CLEAR_PIN_MEM_AREA, int) #define REMAP_PIN_MEM_AREA _IOW(PIN_MEM_MAGIC, _REMAP_PIN_MEM_AREA, int) +#define INIT_PAGEMAP_READ _IOW(PIN_MEM_MAGIC, _INIT_PAGEMAP_READ, int) #define DUMP_SEPCIAL_PAGES _IOW(PIN_MEM_MAGIC, _DUMP_SEPCIAL_PAGES, int) #define RETORE_SEPCIAL_PAGES _IOW(PIN_MEM_MAGIC, _RETORE_SEPCIAL_PAGES, int) #define SET_FORK_PID _IOW(PIN_MEM_MAGIC, _SET_FORK_PID, int) @@ -358,4 +360,6 @@ struct pin_mem_area_set { struct pin_mem_area mem_area[MAX_PIN_MEM_AREA_NUM]; };
+int clear_pin_mem(int pid); + #endif /* __CR_RESTORER_H__ */