* [PATCH 1/1] fix 31-bit s390 checkpoint/restart wrappers
@ 2010-01-28 18:11 Serge E. Hallyn
[not found] ` <20100128181138.GA18197-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: Serge E. Hallyn @ 2010-01-28 18:11 UTC (permalink / raw)
To: Oren Laadan; +Cc: Linux Containers
This patch makes it possible to compile with CONFIG_COMPAT=y. It
also refuses checkpoint of a 31-bit task, or restart from a 31-bit
task. That's just a temporary restriction as there won't be time
to get 31-bit support for v19.
Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
---
arch/s390/kernel/checkpoint.c | 9 +++++++++
arch/s390/kernel/compat_wrapper.S | 12 +++++++-----
arch/s390/kernel/process.c | 12 ++++++++++++
arch/s390/kernel/syscalls.S | 2 +-
4 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/arch/s390/kernel/checkpoint.c b/arch/s390/kernel/checkpoint.c
index 40dd417..8ec12c6 100644
--- a/arch/s390/kernel/checkpoint.c
+++ b/arch/s390/kernel/checkpoint.c
@@ -83,6 +83,11 @@ static void s390_mm(int op, struct ckpt_hdr_mm_context *h,
int checkpoint_thread(struct ckpt_ctx *ctx, struct task_struct *t)
{
+ /* we will eventually support this, as we do on x86-64 */
+ if (test_tsk_thread_flag(t, TIF_31BIT)) {
+ ckpt_err(ctx, -EINVAL, "checkpoint of 31-bit task\n");
+ return -EINVAL;
+ }
return 0;
}
@@ -143,6 +148,10 @@ int checkpoint_mm_context(struct ckpt_ctx *ctx, struct mm_struct *mm)
int restore_thread(struct ckpt_ctx *ctx)
{
+ if (test_tsk_thread_flag(current, TIF_31BIT)) {
+ ckpt_err(ctx, -EINVAL, "restart from 31-bit task\n");
+ return -EINVAL;
+ }
return 0;
}
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index 8d0ba6a..bb38630 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -1869,11 +1869,13 @@ sys_checkpoint_wrapper:
lgfr %r2,%r2 # pid_t
lgfr %r3,%r3 # int
llgfr %r4,%r4 # unsigned long
- jg compat_sys_checkpoint
+ lgfr %r5,%r5 # int
+ jg sys_checkpoint
- .globl sys_restore_wrapper
-sys_restore_wrapper:
- lgfr %r2,%r2 # int
+ .globl sys_restart_wrapper
+sys_restart_wrapper:
+ lgfr %r2,%r2 # pid_t
lgfr %r3,%r3 # int
llgfr %r4,%r4 # unsigned long
- jg compat_sys_restore
+ lgfr %r5,%r5 # int
+ jg sys_restart
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index a7cb6bc..61b469f 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -258,6 +258,18 @@ SYSCALL_DEFINE4(restart, pid_t, pid, int, fd, unsigned long, flags,
{
return do_sys_restart(pid, fd, flags, logfd);
}
+#else
+SYSCALL_DEFINE4(checkpoint, pid_t, pid, int, fd, unsigned long, flags,
+ int, logfd)
+{
+ return -ENOSYS;
+}
+
+SYSCALL_DEFINE4(restart, pid_t, pid, int, fd, unsigned long, flags,
+ int, logfd)
+{
+ return -ENOSYS;
+}
#endif
SYSCALL_DEFINE4(eclone, unsigned int, flags_low, struct clone_args __user *,
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index ff222e1..a29f9e1 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -342,4 +342,4 @@ SYSCALL(sys_rt_tgsigqueueinfo,sys_rt_tgsigqueueinfo,compat_sys_rt_tgsigqueueinfo
SYSCALL(sys_perf_event_open,sys_perf_event_open,sys_perf_event_open_wrapper)
SYSCALL(sys_eclone,sys_eclone,sys_eclone_wrapper)
SYSCALL(sys_checkpoint,sys_checkpoint,sys_checkpoint_wrapper)
-SYSCALL(sys_restart,sys_restart,sys_restore_wrapper)
+SYSCALL(sys_restart,sys_restart,sys_restart_wrapper)
--
1.6.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 1/1] fix 31-bit s390 checkpoint/restart wrappers
[not found] ` <20100128181138.GA18197-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
@ 2010-02-05 3:31 ` Oren Laadan
0 siblings, 0 replies; 2+ messages in thread
From: Oren Laadan @ 2010-02-05 3:31 UTC (permalink / raw)
To: Serge E. Hallyn; +Cc: Linux Containers
Got it
Serge E. Hallyn wrote:
> This patch makes it possible to compile with CONFIG_COMPAT=y. It
> also refuses checkpoint of a 31-bit task, or restart from a 31-bit
> task. That's just a temporary restriction as there won't be time
> to get 31-bit support for v19.
>
> Signed-off-by: Serge E. Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> ---
> arch/s390/kernel/checkpoint.c | 9 +++++++++
> arch/s390/kernel/compat_wrapper.S | 12 +++++++-----
> arch/s390/kernel/process.c | 12 ++++++++++++
> arch/s390/kernel/syscalls.S | 2 +-
> 4 files changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/arch/s390/kernel/checkpoint.c b/arch/s390/kernel/checkpoint.c
> index 40dd417..8ec12c6 100644
> --- a/arch/s390/kernel/checkpoint.c
> +++ b/arch/s390/kernel/checkpoint.c
> @@ -83,6 +83,11 @@ static void s390_mm(int op, struct ckpt_hdr_mm_context *h,
>
> int checkpoint_thread(struct ckpt_ctx *ctx, struct task_struct *t)
> {
> + /* we will eventually support this, as we do on x86-64 */
> + if (test_tsk_thread_flag(t, TIF_31BIT)) {
> + ckpt_err(ctx, -EINVAL, "checkpoint of 31-bit task\n");
> + return -EINVAL;
> + }
> return 0;
> }
>
> @@ -143,6 +148,10 @@ int checkpoint_mm_context(struct ckpt_ctx *ctx, struct mm_struct *mm)
>
> int restore_thread(struct ckpt_ctx *ctx)
> {
> + if (test_tsk_thread_flag(current, TIF_31BIT)) {
> + ckpt_err(ctx, -EINVAL, "restart from 31-bit task\n");
> + return -EINVAL;
> + }
> return 0;
> }
>
> diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
> index 8d0ba6a..bb38630 100644
> --- a/arch/s390/kernel/compat_wrapper.S
> +++ b/arch/s390/kernel/compat_wrapper.S
> @@ -1869,11 +1869,13 @@ sys_checkpoint_wrapper:
> lgfr %r2,%r2 # pid_t
> lgfr %r3,%r3 # int
> llgfr %r4,%r4 # unsigned long
> - jg compat_sys_checkpoint
> + lgfr %r5,%r5 # int
> + jg sys_checkpoint
>
> - .globl sys_restore_wrapper
> -sys_restore_wrapper:
> - lgfr %r2,%r2 # int
> + .globl sys_restart_wrapper
> +sys_restart_wrapper:
> + lgfr %r2,%r2 # pid_t
> lgfr %r3,%r3 # int
> llgfr %r4,%r4 # unsigned long
> - jg compat_sys_restore
> + lgfr %r5,%r5 # int
> + jg sys_restart
> diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
> index a7cb6bc..61b469f 100644
> --- a/arch/s390/kernel/process.c
> +++ b/arch/s390/kernel/process.c
> @@ -258,6 +258,18 @@ SYSCALL_DEFINE4(restart, pid_t, pid, int, fd, unsigned long, flags,
> {
> return do_sys_restart(pid, fd, flags, logfd);
> }
> +#else
> +SYSCALL_DEFINE4(checkpoint, pid_t, pid, int, fd, unsigned long, flags,
> + int, logfd)
> +{
> + return -ENOSYS;
> +}
> +
> +SYSCALL_DEFINE4(restart, pid_t, pid, int, fd, unsigned long, flags,
> + int, logfd)
> +{
> + return -ENOSYS;
> +}
> #endif
>
> SYSCALL_DEFINE4(eclone, unsigned int, flags_low, struct clone_args __user *,
> diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
> index ff222e1..a29f9e1 100644
> --- a/arch/s390/kernel/syscalls.S
> +++ b/arch/s390/kernel/syscalls.S
> @@ -342,4 +342,4 @@ SYSCALL(sys_rt_tgsigqueueinfo,sys_rt_tgsigqueueinfo,compat_sys_rt_tgsigqueueinfo
> SYSCALL(sys_perf_event_open,sys_perf_event_open,sys_perf_event_open_wrapper)
> SYSCALL(sys_eclone,sys_eclone,sys_eclone_wrapper)
> SYSCALL(sys_checkpoint,sys_checkpoint,sys_checkpoint_wrapper)
> -SYSCALL(sys_restart,sys_restart,sys_restore_wrapper)
> +SYSCALL(sys_restart,sys_restart,sys_restart_wrapper)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-02-05 3:31 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-28 18:11 [PATCH 1/1] fix 31-bit s390 checkpoint/restart wrappers Serge E. Hallyn
[not found] ` <20100128181138.GA18197-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-02-05 3:31 ` Oren Laadan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox