From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sukadev Bhattiprolu Subject: [PATCH 06/14][user-cr] Create common.h Date: Thu, 18 Mar 2010 23:32:54 -0700 Message-ID: <20100319063253.GF24844@us.ibm.com> References: <20100319062659.GA23838@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <20100319062659.GA23838-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Oren Laadan Cc: Containers List-Id: containers.vger.kernel.org From: Sukadev Bhattiprolu Date: Thu, 4 Mar 2010 21:30:50 -0800 Subject: [PATCH 06/14][user-cr] Create common.h Code in common.h can be shared by checkpoint.c and restart.c for now. Signed-off-by: Sukadev Bhattiprolu --- Makefile | 4 ++ checkpoint.c | 31 +--------------- common.h | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ restart.c | 110 +-------------------------------------------------------- 4 files changed, 119 insertions(+), 138 deletions(-) create mode 100644 common.h diff --git a/Makefile b/Makefile index 64b5f73..406f685 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,8 @@ CKPT_HEADERS = include/linux/checkpoint.h \ include/linux/checkpoint_hdr.h \ include/asm/checkpoint_hdr.h +CR_OBJS = checkpoint.o restart.o + # detect architecture (for eclone) SUBARCH ?= $(patsubst i%86,x86_32,$(shell uname -m)) @@ -50,6 +52,8 @@ $(LIB_ECLONE): # restart needs to be thread-safe restart: CFLAGS += -D__REENTRANT -pthread +$(CR_OBJS): common.h + # eclone() is architecture specific ifneq ($(SUBARCH),) $(ECLONE_PROGS): $(LIB_ECLONE) diff --git a/checkpoint.c b/checkpoint.c index 86608b1..6e91149 100644 --- a/checkpoint.c +++ b/checkpoint.c @@ -21,6 +21,8 @@ #include +#include "common.h" + static char usage_str[] = "usage: ckpt [opts] PID\n" " 'checkpoint' takes a checkpoint of the task indicated by PID, and all\n" @@ -55,35 +57,6 @@ inline static int checkpoint(pid_t pid, int fd, unsigned long flags, int logfd) return syscall(__NR_checkpoint, pid, fd, flags, logfd); } -#define BUFSIZE (4 * 4096) -static inline void ckpt_msg(int fd, char *format, ...) -{ - va_list ap; - char *bufp; - if (fd < 0) - return; - - va_start(ap, format); - - bufp = malloc(BUFSIZE); - if(bufp) { - vsnprintf(bufp, BUFSIZE, format, ap); - write(fd, bufp, strlen(bufp)); - } - free(bufp); - - va_end(ap); -} - -#define ckpt_err(...) \ - ckpt_msg(global_uerrfd, __VA_ARGS__) - -#define ckpt_perror(s) \ - do { \ - ckpt_msg(global_uerrfd, s); \ - ckpt_msg(global_uerrfd, ": %s\n", strerror(errno)); \ - } while (0) - static void usage(char *str) { ckpt_err("%s", str); diff --git a/common.h b/common.h new file mode 100644 index 0000000..99b224d --- /dev/null +++ b/common.h @@ -0,0 +1,112 @@ +#include +#include + +#define BUFSIZE (4 * 4096) + +static inline void ckpt_msg(int fd, char *format, ...) +{ + va_list ap; + char *bufp; + if (fd < 0) + return; + + va_start(ap, format); + + bufp = malloc(BUFSIZE); + if(bufp) { + vsnprintf(bufp, BUFSIZE, format, ap); + write(fd, bufp, strlen(bufp)); + } + free(bufp); + + va_end(ap); +} + +#define ckpt_perror(s) \ + do { \ + ckpt_msg(global_uerrfd, s); \ + ckpt_msg(global_uerrfd, ": %s\n", strerror(errno)); \ + } while (0) + +#ifdef CHECKPOINT_DEBUG +#define ckpt_dbg(_format, _args...) \ + do { \ + if (global_debug) \ + ckpt_msg(global_uerrfd, "<%d>" _format, \ + _gettid(), ##_args); \ + } while (0) +#define ckpt_dbg_cont(_format, _args...) \ + do { \ + if (global_debug) \ + ckpt_msg(global_uerrfd, _format, ##_args); \ + } while (0) +#else +#define ckpt_dbg(_format, _args...) \ + do { } while (0) +#define ckpt_dbg_cont(_format, _args...) \ + do { } while (0) +#endif + +#define ckpt_err(...) \ + ckpt_msg(global_uerrfd, __VA_ARGS__) + +#define ckpt_verbose(...) \ + do { \ + if (global_verbose) \ + ckpt_msg(global_ulogfd, __VA_ARGS__); \ + } while(0) + +struct signal_array { + int signum; + char *sigstr; +}; + +#define SIGNAL_ENTRY(signal) { SIG ## signal, #signal } + +#define INIT_SIGNAL_ARRAY { \ + { 0, "NONE" }, \ + SIGNAL_ENTRY(ALRM), \ + SIGNAL_ENTRY(HUP), \ + SIGNAL_ENTRY(INT), \ + SIGNAL_ENTRY(KILL), \ + SIGNAL_ENTRY(PIPE), \ + SIGNAL_ENTRY(POLL), \ + SIGNAL_ENTRY(PROF), \ + SIGNAL_ENTRY(TERM), \ + SIGNAL_ENTRY(USR1), \ + SIGNAL_ENTRY(USR2), \ + SIGNAL_ENTRY(VTALRM), \ + SIGNAL_ENTRY(STKFLT), \ + SIGNAL_ENTRY(PWR), \ + SIGNAL_ENTRY(WINCH), \ + SIGNAL_ENTRY(CHLD), \ + SIGNAL_ENTRY(URG), \ + SIGNAL_ENTRY(TTIN), \ + SIGNAL_ENTRY(TTOU), \ + SIGNAL_ENTRY(STOP), \ + SIGNAL_ENTRY(CONT), \ + SIGNAL_ENTRY(ABRT), \ + SIGNAL_ENTRY(FPE), \ + SIGNAL_ENTRY(ILL), \ + SIGNAL_ENTRY(QUIT), \ + SIGNAL_ENTRY(SEGV), \ + SIGNAL_ENTRY(TRAP), \ + SIGNAL_ENTRY(SYS), \ + SIGNAL_ENTRY(BUS), \ + SIGNAL_ENTRY(XCPU), \ + SIGNAL_ENTRY(XFSZ), \ + { -1, "LAST" }, \ +} + +#define CKPT_COND_PIDZERO 0x1 +#define CKPT_COND_MNTPROC 0x2 +#define CKPT_COND_MNTPTY 0x4 + +#define CKPT_COND_NONE 0 +#define CKPT_COND_ANY ULONG_MAX + +/* default for skip/warn/fail */ +#define CKPT_COND_WARN (CKPT_COND_MNTPROC | \ + CKPT_COND_MNTPTY) +#define CKPT_COND_FAIL (CKPT_COND_NONE) + diff --git a/restart.c b/restart.c index 4cd0bad..7c9db80 100644 --- a/restart.c +++ b/restart.c @@ -40,6 +40,7 @@ #include "eclone.h" #include "genstack.h" #include "compat.h" +#include "common.h" static char usage_str[] = "usage: restart [opts]\n" @@ -102,103 +103,6 @@ static char usage_str[] = * of the checkpoint image stream. */ -#define BUFSIZE (4 * 4096) - -static inline void ckpt_msg(int fd, char *format, ...) -{ - va_list ap; - char *bufp; - if (fd < 0) - return; - - va_start(ap, format); - - bufp = malloc(BUFSIZE); - if(bufp) { - vsnprintf(bufp, BUFSIZE, format, ap); - write(fd, bufp, strlen(bufp)); - } - free(bufp); - - va_end(ap); -} - -#define ckpt_perror(s) \ - do { \ - ckpt_msg(global_uerrfd, s); \ - ckpt_msg(global_uerrfd, ": %s\n", strerror(errno)); \ - } while (0) - -#ifdef CHECKPOINT_DEBUG -#define ckpt_dbg(_format, _args...) \ - do { \ - if (global_debug) \ - ckpt_msg(global_uerrfd, "<%d>" _format, \ - _gettid(), ##_args); \ - } while (0) -#define ckpt_dbg_cont(_format, _args...) \ - do { \ - if (global_debug) \ - ckpt_msg(global_uerrfd, _format, ##_args); \ - } while (0) -#else -#define ckpt_dbg(_format, _args...) \ - do { } while (0) -#define ckpt_dbg_cont(_format, _args...) \ - do { } while (0) -#endif - -#define ckpt_err(...) \ - ckpt_msg(global_uerrfd, __VA_ARGS__) - -#define ckpt_verbose(...) \ - do { \ - if (global_verbose) \ - ckpt_msg(global_ulogfd, __VA_ARGS__); \ - } while(0) - -struct signal_array { - int signum; - char *sigstr; -}; - -#define SIGNAL_ENTRY(signal) { SIG ## signal, #signal } - -#define INIT_SIGNAL_ARRAY { \ - { 0, "NONE" }, \ - SIGNAL_ENTRY(ALRM), \ - SIGNAL_ENTRY(HUP), \ - SIGNAL_ENTRY(INT), \ - SIGNAL_ENTRY(KILL), \ - SIGNAL_ENTRY(PIPE), \ - SIGNAL_ENTRY(POLL), \ - SIGNAL_ENTRY(PROF), \ - SIGNAL_ENTRY(TERM), \ - SIGNAL_ENTRY(USR1), \ - SIGNAL_ENTRY(USR2), \ - SIGNAL_ENTRY(VTALRM), \ - SIGNAL_ENTRY(STKFLT), \ - SIGNAL_ENTRY(PWR), \ - SIGNAL_ENTRY(WINCH), \ - SIGNAL_ENTRY(CHLD), \ - SIGNAL_ENTRY(URG), \ - SIGNAL_ENTRY(TTIN), \ - SIGNAL_ENTRY(TTOU), \ - SIGNAL_ENTRY(STOP), \ - SIGNAL_ENTRY(CONT), \ - SIGNAL_ENTRY(ABRT), \ - SIGNAL_ENTRY(FPE), \ - SIGNAL_ENTRY(ILL), \ - SIGNAL_ENTRY(QUIT), \ - SIGNAL_ENTRY(SEGV), \ - SIGNAL_ENTRY(TRAP), \ - SIGNAL_ENTRY(SYS), \ - SIGNAL_ENTRY(BUS), \ - SIGNAL_ENTRY(XCPU), \ - SIGNAL_ENTRY(XFSZ), \ - { -1, "LAST" }, \ -} - static struct signal_array signal_array[] = INIT_SIGNAL_ARRAY; static char *sig2str(int sig) @@ -398,18 +302,6 @@ struct app_restart_args { int keep_lsm; }; -#define CKPT_COND_PIDZERO 0x1 -#define CKPT_COND_MNTPROC 0x2 -#define CKPT_COND_MNTPTY 0x4 - -#define CKPT_COND_NONE 0 -#define CKPT_COND_ANY ULONG_MAX - -/* default for skip/warn/fail */ -#define CKPT_COND_WARN (CKPT_COND_MNTPROC | \ - CKPT_COND_MNTPTY) -#define CKPT_COND_FAIL (CKPT_COND_NONE) - static void usage(char *str) { ckpt_err("%s", str); -- 1.6.0.4