All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][cr]: Fix C/R of termios
@ 2010-12-22  9:15 Sukadev Bhattiprolu
       [not found] ` <20101222091559.GA32053-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 2+ messages in thread
From: Sukadev Bhattiprolu @ 2010-12-22  9:15 UTC (permalink / raw)
  To: Oren Laadan; +Cc: Containers

From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Date: Fri, 10 Dec 2010 18:36:34 -0800
Subject: [PATCH 1/1] Fix C/R of termios

The kernel uses 'struct ktermios' to represent the terminal attributes.
We should checkpoint and restart the 'struct ktermios' object rather
than the 'struct termio'.

Signed-off-by: Sukadev Bhattiprolu (sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org)
---
 arch/powerpc/include/asm/checkpoint_hdr.h |    6 +++---
 arch/x86/include/asm/checkpoint_hdr.h     |    6 +++---
 drivers/char/tty_io.c                     |    8 ++++++--
 include/linux/checkpoint_hdr.h            |   14 ++++++++------
 kernel/checkpoint/checkpoint.c            |    2 +-
 kernel/checkpoint/restart.c               |    2 +-
 6 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/arch/powerpc/include/asm/checkpoint_hdr.h b/arch/powerpc/include/asm/checkpoint_hdr.h
index fbb1705..d2e6096 100644
--- a/arch/powerpc/include/asm/checkpoint_hdr.h
+++ b/arch/powerpc/include/asm/checkpoint_hdr.h
@@ -5,7 +5,7 @@
 
 /* arch dependent constants */
 #define CKPT_ARCH_NSIG 64
-#define CKPT_TTY_NCC  10
+#define CKPT_TTY_NCCS  19
 
 #ifdef __KERNEL__
 
@@ -15,8 +15,8 @@
 #endif
 
 #include <linux/tty.h>
-#if CKPT_TTY_NCC != NCC
-#error CKPT_TTY_NCC size is wrong per asm-generic/termios.h
+#if CKPT_TTY_NCCS != NCCS
+#error CKPT_TTY_NCCS size is wrong per asm/termbits.h
 #endif
 
 #endif /* __KERNEL__ */
diff --git a/arch/x86/include/asm/checkpoint_hdr.h b/arch/x86/include/asm/checkpoint_hdr.h
index 0505329..3ac9d29 100644
--- a/arch/x86/include/asm/checkpoint_hdr.h
+++ b/arch/x86/include/asm/checkpoint_hdr.h
@@ -54,7 +54,7 @@ enum {
 
 /* arch dependent constants */
 #define CKPT_ARCH_NSIG  64
-#define CKPT_TTY_NCC  8
+#define CKPT_TTY_NCCS	19
 
 #ifdef __KERNEL__
 
@@ -64,8 +64,8 @@ enum {
 #endif
 
 #include <linux/tty.h>
-#if CKPT_TTY_NCC != NCC
-#error CKPT_TTY_NCC size is wrong per asm-generic/termios.h
+#if CKPT_TTY_NCCS != NCCS
+#error CKPT_TTY_NCCS size is wrong per asm-generic/termbits.h
 #endif
 
 #endif /* __KERNEL__ */
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index 3a2c770..857d43a 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -2882,7 +2882,9 @@ static int checkpoint_tty(struct ckpt_ctx *ctx, void *ptr)
 	h->termios.c_oflag = tty->termios->c_oflag;
 	h->termios.c_cflag = tty->termios->c_cflag;
 	h->termios.c_lflag = tty->termios->c_lflag;
-	memcpy(h->termios.c_cc, tty->termios->c_cc, NCC);
+	memcpy(h->termios.c_cc, tty->termios->c_cc, NCCS);
+	h->termios.c_ispeed = tty->termios->c_ispeed;
+	h->termios.c_ospeed = tty->termios->c_ospeed;
 	h->winsize.ws_row = tty->winsize.ws_row;
 	h->winsize.ws_col = tty->winsize.ws_col;
 	h->winsize.ws_ypixel = tty->winsize.ws_ypixel;
@@ -3099,7 +3101,9 @@ static struct tty_struct *do_restore_tty(struct ckpt_ctx *ctx)
 	tty->termios->c_oflag = h->termios.c_oflag;
 	tty->termios->c_cflag = h->termios.c_cflag;
 	tty->termios->c_lflag = h->termios.c_lflag;
-	memcpy(tty->termios->c_cc, h->termios.c_cc, NCC);
+	memcpy(tty->termios->c_cc, h->termios.c_cc, NCCS);
+	tty->termios->c_ispeed = h->termios.c_ispeed;
+	tty->termios->c_ospeed = h->termios.c_ospeed;
 	tty->winsize.ws_row = h->winsize.ws_row;
 	tty->winsize.ws_col = h->winsize.ws_col;
 	tty->winsize.ws_ypixel = h->winsize.ws_ypixel;
diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
index 4303235..2f10011 100644
--- a/include/linux/checkpoint_hdr.h
+++ b/include/linux/checkpoint_hdr.h
@@ -317,7 +317,7 @@ struct ckpt_const {
 	__u16 rlimit_nlimits;
 	/* tty */
 	__u16 n_tty_buf_size;
-	__u16 tty_termios_ncc;
+	__u16 tty_termios_nccs;
 } __attribute__((aligned(8)));
 
 /* checkpoint image header */
@@ -1138,12 +1138,14 @@ struct ckpt_hdr_tty {
 
 	/* termios */
 	struct {
-		__u16 c_iflag;
-		__u16 c_oflag;
-		__u16 c_cflag;
-		__u16 c_lflag;
+		__u32 c_iflag;
+		__u32 c_oflag;
+		__u32 c_cflag;
+		__u32 c_lflag;
 		__u8 c_line;
-		__u8 c_cc[CKPT_TTY_NCC];
+		__u8 c_cc[CKPT_TTY_NCCS];
+		__u32 c_ispeed;
+		__u32 c_ospeed;
 	} __attribute__((aligned(8))) termios;
 
 	/* winsize */
diff --git a/kernel/checkpoint/checkpoint.c b/kernel/checkpoint/checkpoint.c
index 55f4dc2..853de1b 100644
--- a/kernel/checkpoint/checkpoint.c
+++ b/kernel/checkpoint/checkpoint.c
@@ -128,7 +128,7 @@ static void fill_kernel_const(struct ckpt_const *h)
 	h->rlimit_nlimits = RLIM_NLIMITS;
 	/* tty */
 	h->n_tty_buf_size = N_TTY_BUF_SIZE;
-	h->tty_termios_ncc = NCC;
+	h->tty_termios_nccs = NCCS;
 }
 
 /* write the checkpoint header */
diff --git a/kernel/checkpoint/restart.c b/kernel/checkpoint/restart.c
index 17270b8..0e359c2 100644
--- a/kernel/checkpoint/restart.c
+++ b/kernel/checkpoint/restart.c
@@ -593,7 +593,7 @@ static int check_kernel_const(struct ckpt_const *h)
 	/* tty */
 	if (h->n_tty_buf_size != N_TTY_BUF_SIZE)
 		return -EINVAL;
-	if (h->tty_termios_ncc != NCC)
+	if (h->tty_termios_nccs != NCCS)
 		return -EINVAL;
 
 	return 0;
-- 
1.6.0.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH][cr]: Fix C/R of termios
       [not found] ` <20101222091559.GA32053-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2011-01-11  1:46   ` Oren Laadan
  0 siblings, 0 replies; 2+ messages in thread
From: Oren Laadan @ 2011-01-11  1:46 UTC (permalink / raw)
  To: Sukadev Bhattiprolu; +Cc: Containers


Pulled and merged in v23-rc1, with a slight change: NCCS is
known to userspace, so no need for CKPT_TTY_NCCS...

Thanks

Oren.

On 12/22/2010 04:15 AM, Sukadev Bhattiprolu wrote:
> From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> Date: Fri, 10 Dec 2010 18:36:34 -0800
> Subject: [PATCH 1/1] Fix C/R of termios
> 
> The kernel uses 'struct ktermios' to represent the terminal attributes.
> We should checkpoint and restart the 'struct ktermios' object rather
> than the 'struct termio'.
> 
> Signed-off-by: Sukadev Bhattiprolu (sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org)
> ---
>  arch/powerpc/include/asm/checkpoint_hdr.h |    6 +++---
>  arch/x86/include/asm/checkpoint_hdr.h     |    6 +++---
>  drivers/char/tty_io.c                     |    8 ++++++--
>  include/linux/checkpoint_hdr.h            |   14 ++++++++------
>  kernel/checkpoint/checkpoint.c            |    2 +-
>  kernel/checkpoint/restart.c               |    2 +-
>  6 files changed, 22 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/checkpoint_hdr.h b/arch/powerpc/include/asm/checkpoint_hdr.h
> index fbb1705..d2e6096 100644
> --- a/arch/powerpc/include/asm/checkpoint_hdr.h
> +++ b/arch/powerpc/include/asm/checkpoint_hdr.h
> @@ -5,7 +5,7 @@
>  
>  /* arch dependent constants */
>  #define CKPT_ARCH_NSIG 64
> -#define CKPT_TTY_NCC  10
> +#define CKPT_TTY_NCCS  19
>  
>  #ifdef __KERNEL__
>  
> @@ -15,8 +15,8 @@
>  #endif
>  
>  #include <linux/tty.h>
> -#if CKPT_TTY_NCC != NCC
> -#error CKPT_TTY_NCC size is wrong per asm-generic/termios.h
> +#if CKPT_TTY_NCCS != NCCS
> +#error CKPT_TTY_NCCS size is wrong per asm/termbits.h
>  #endif
>  
>  #endif /* __KERNEL__ */
> diff --git a/arch/x86/include/asm/checkpoint_hdr.h b/arch/x86/include/asm/checkpoint_hdr.h
> index 0505329..3ac9d29 100644
> --- a/arch/x86/include/asm/checkpoint_hdr.h
> +++ b/arch/x86/include/asm/checkpoint_hdr.h
> @@ -54,7 +54,7 @@ enum {
>  
>  /* arch dependent constants */
>  #define CKPT_ARCH_NSIG  64
> -#define CKPT_TTY_NCC  8
> +#define CKPT_TTY_NCCS	19
>  
>  #ifdef __KERNEL__
>  
> @@ -64,8 +64,8 @@ enum {
>  #endif
>  
>  #include <linux/tty.h>
> -#if CKPT_TTY_NCC != NCC
> -#error CKPT_TTY_NCC size is wrong per asm-generic/termios.h
> +#if CKPT_TTY_NCCS != NCCS
> +#error CKPT_TTY_NCCS size is wrong per asm-generic/termbits.h
>  #endif
>  
>  #endif /* __KERNEL__ */
> diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
> index 3a2c770..857d43a 100644
> --- a/drivers/char/tty_io.c
> +++ b/drivers/char/tty_io.c
> @@ -2882,7 +2882,9 @@ static int checkpoint_tty(struct ckpt_ctx *ctx, void *ptr)
>  	h->termios.c_oflag = tty->termios->c_oflag;
>  	h->termios.c_cflag = tty->termios->c_cflag;
>  	h->termios.c_lflag = tty->termios->c_lflag;
> -	memcpy(h->termios.c_cc, tty->termios->c_cc, NCC);
> +	memcpy(h->termios.c_cc, tty->termios->c_cc, NCCS);
> +	h->termios.c_ispeed = tty->termios->c_ispeed;
> +	h->termios.c_ospeed = tty->termios->c_ospeed;
>  	h->winsize.ws_row = tty->winsize.ws_row;
>  	h->winsize.ws_col = tty->winsize.ws_col;
>  	h->winsize.ws_ypixel = tty->winsize.ws_ypixel;
> @@ -3099,7 +3101,9 @@ static struct tty_struct *do_restore_tty(struct ckpt_ctx *ctx)
>  	tty->termios->c_oflag = h->termios.c_oflag;
>  	tty->termios->c_cflag = h->termios.c_cflag;
>  	tty->termios->c_lflag = h->termios.c_lflag;
> -	memcpy(tty->termios->c_cc, h->termios.c_cc, NCC);
> +	memcpy(tty->termios->c_cc, h->termios.c_cc, NCCS);
> +	tty->termios->c_ispeed = h->termios.c_ispeed;
> +	tty->termios->c_ospeed = h->termios.c_ospeed;
>  	tty->winsize.ws_row = h->winsize.ws_row;
>  	tty->winsize.ws_col = h->winsize.ws_col;
>  	tty->winsize.ws_ypixel = h->winsize.ws_ypixel;
> diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h
> index 4303235..2f10011 100644
> --- a/include/linux/checkpoint_hdr.h
> +++ b/include/linux/checkpoint_hdr.h
> @@ -317,7 +317,7 @@ struct ckpt_const {
>  	__u16 rlimit_nlimits;
>  	/* tty */
>  	__u16 n_tty_buf_size;
> -	__u16 tty_termios_ncc;
> +	__u16 tty_termios_nccs;
>  } __attribute__((aligned(8)));
>  
>  /* checkpoint image header */
> @@ -1138,12 +1138,14 @@ struct ckpt_hdr_tty {
>  
>  	/* termios */
>  	struct {
> -		__u16 c_iflag;
> -		__u16 c_oflag;
> -		__u16 c_cflag;
> -		__u16 c_lflag;
> +		__u32 c_iflag;
> +		__u32 c_oflag;
> +		__u32 c_cflag;
> +		__u32 c_lflag;
>  		__u8 c_line;
> -		__u8 c_cc[CKPT_TTY_NCC];
> +		__u8 c_cc[CKPT_TTY_NCCS];
> +		__u32 c_ispeed;
> +		__u32 c_ospeed;
>  	} __attribute__((aligned(8))) termios;
>  
>  	/* winsize */
> diff --git a/kernel/checkpoint/checkpoint.c b/kernel/checkpoint/checkpoint.c
> index 55f4dc2..853de1b 100644
> --- a/kernel/checkpoint/checkpoint.c
> +++ b/kernel/checkpoint/checkpoint.c
> @@ -128,7 +128,7 @@ static void fill_kernel_const(struct ckpt_const *h)
>  	h->rlimit_nlimits = RLIM_NLIMITS;
>  	/* tty */
>  	h->n_tty_buf_size = N_TTY_BUF_SIZE;
> -	h->tty_termios_ncc = NCC;
> +	h->tty_termios_nccs = NCCS;
>  }
>  
>  /* write the checkpoint header */
> diff --git a/kernel/checkpoint/restart.c b/kernel/checkpoint/restart.c
> index 17270b8..0e359c2 100644
> --- a/kernel/checkpoint/restart.c
> +++ b/kernel/checkpoint/restart.c
> @@ -593,7 +593,7 @@ static int check_kernel_const(struct ckpt_const *h)
>  	/* tty */
>  	if (h->n_tty_buf_size != N_TTY_BUF_SIZE)
>  		return -EINVAL;
> -	if (h->tty_termios_ncc != NCC)
> +	if (h->tty_termios_nccs != NCCS)
>  		return -EINVAL;
>  
>  	return 0;

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-01-11  1:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-22  9:15 [PATCH][cr]: Fix C/R of termios Sukadev Bhattiprolu
     [not found] ` <20101222091559.GA32053-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2011-01-11  1:46   ` Oren Laadan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.