[Devel] Re: [PATCH 08/12][user-cr] Create common.h
Serge E. Hallyn
serue at us.ibm.com
Mon Mar 8 11:44:27 PST 2010
Quoting Sukadev Bhattiprolu (sukadev at linux.vnet.ibm.com):
>
> From: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
> Date: Thu, 4 Mar 2010 21:30:50 -0800
> Subject: [PATCH 08/12][user-cr] Create common.h
>
> Code in common.h can be shared by checkpoint.c and restart.c for now.
There is already user-cr.h and restart.h... a 'common.h' filename
isn't particularly helpful. Should they all get combined?
Not NACking the patch, btw, just something to consider for a future
patch.
> Signed-off-by: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
> ---
> 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 b312358..acebdd5 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -5,6 +5,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))
>
> @@ -41,6 +43,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 ace17e2..6e91149 100644
> --- a/checkpoint.c
> +++ b/checkpoint.c
> @@ -21,6 +21,8 @@
>
> #include <linux/checkpoint.h>
>
> +#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 <stdio.h>
> +#include <signal.h>
> +
> +#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 b37bf81..f65eafb 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)
> @@ -399,18 +303,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
>
> _______________________________________________
> Containers mailing list
> Containers at lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list