All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <ynorov@caviumnetworks.com>
To: <arnd@arndb.de>, <catalin.marinas@arm.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>
Cc: <ynorov@caviumnetworks.com>, <pinskia@gmail.com>,
	<Prasun.Kapoor@caviumnetworks.com>, <schwab@suse.de>,
	<Nathan_Lynch@mentor.com>, <agraf@suse.de>,
	<klimov.linux@gmail.com>, <broonie@kernel.org>,
	<jan.dakinevich@gmail.com>, <ddaney.cavm@gmail.com>,
	<bamvor.zhangjian@huawei.com>,
	<philipp.tomsich@theobroma-systems.com>,
	<joseph@codesourcery.com>,
	<christoph.muellner@theobroma-systems.com>
Subject: [PATCH v6 14/20] arm64: signal: wrap struct ucontext, fp and lr with struct sigframe
Date: Wed, 16 Dec 2015 00:42:40 +0300	[thread overview]
Message-ID: <1450215766-14765-15-git-send-email-ynorov@caviumnetworks.com> (raw)
In-Reply-To: <1450215766-14765-1-git-send-email-ynorov@caviumnetworks.com>

It helps to move common code for lp64 and ilp32 to separated header.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 arch/arm64/kernel/signal.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
index 65baaef..20dca65 100644
--- a/arch/arm64/kernel/signal.c
+++ b/arch/arm64/kernel/signal.c
@@ -35,14 +35,18 @@
 #include <asm/signal32.h>
 #include <asm/vdso.h>
 
+struct sigframe {
+	struct ucontext uc;
+	u64 fp;
+	u64 lr;
+};
+
 /*
  * Do a signal return; undo the signal stack. These are aligned to 128-bit.
  */
 struct rt_sigframe {
 	struct siginfo info;
-	struct ucontext uc;
-	u64 fp;
-	u64 lr;
+	struct sigframe sig;
 };
 
 static int preserve_fpsimd_context(struct fpsimd_context __user *ctx)
@@ -93,7 +97,7 @@ static int restore_fpsimd_context(struct fpsimd_context __user *ctx)
 }
 
 static int restore_sigframe(struct pt_regs *regs,
-			    struct rt_sigframe __user *sf)
+			    struct sigframe __user *sf)
 {
 	sigset_t set;
 	int i, err;
@@ -145,10 +149,10 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
 	if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
 		goto badframe;
 
-	if (restore_sigframe(regs, frame))
+	if (restore_sigframe(regs, &frame->sig))
 		goto badframe;
 
-	if (restore_altstack(&frame->uc.uc_stack))
+	if (restore_altstack(&frame->sig.uc.uc_stack))
 		goto badframe;
 
 	return regs->regs[0];
@@ -162,7 +166,7 @@ badframe:
 	return 0;
 }
 
-static int setup_sigframe(struct rt_sigframe __user *sf,
+static int setup_sigframe(struct sigframe __user *sf,
 			  struct pt_regs *regs, sigset_t *set)
 {
 	int i, err = 0;
@@ -230,13 +234,13 @@ static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig,
 }
 
 static void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
-			 void __user *frame, int usig)
+			 void __user *frame, off_t sigframe_off, int usig)
 {
 	__sigrestore_t sigtramp;
 
 	regs->regs[0] = usig;
 	regs->sp = (unsigned long)frame;
-	regs->regs[29] = regs->sp + offsetof(struct rt_sigframe, fp);
+	regs->regs[29] = regs->sp + sigframe_off + offsetof(struct sigframe, fp);
 	regs->pc = (unsigned long)ka->sa.sa_handler;
 
 	if (ka->sa.sa_flags & SA_RESTORER)
@@ -257,17 +261,18 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
 	if (!frame)
 		return 1;
 
-	__put_user_error(0, &frame->uc.uc_flags, err);
-	__put_user_error(NULL, &frame->uc.uc_link, err);
+	__put_user_error(0, &frame->sig.uc.uc_flags, err);
+	__put_user_error(NULL, &frame->sig.uc.uc_link, err);
 
-	err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
-	err |= setup_sigframe(frame, regs, set);
+	err |= __save_altstack(&frame->sig.uc.uc_stack, regs->sp);
+	err |= setup_sigframe(&frame->sig, regs, set);
 	if (err == 0) {
-		setup_return(regs, &ksig->ka, frame, usig);
+		setup_return(regs, &ksig->ka, frame,
+			offsetof(struct rt_sigframe, sig), usig);
 		if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
 			err |= copy_siginfo_to_user(&frame->info, &ksig->info);
 			regs->regs[1] = (unsigned long)&frame->info;
-			regs->regs[2] = (unsigned long)&frame->uc;
+			regs->regs[2] = (unsigned long)&frame->sig.uc;
 		}
 	}
 
-- 
2.5.0


WARNING: multiple messages have this Message-ID (diff)
From: ynorov@caviumnetworks.com (Yury Norov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 14/20] arm64: signal: wrap struct ucontext, fp and lr with struct sigframe
Date: Wed, 16 Dec 2015 00:42:40 +0300	[thread overview]
Message-ID: <1450215766-14765-15-git-send-email-ynorov@caviumnetworks.com> (raw)
In-Reply-To: <1450215766-14765-1-git-send-email-ynorov@caviumnetworks.com>

It helps to move common code for lp64 and ilp32 to separated header.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 arch/arm64/kernel/signal.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
index 65baaef..20dca65 100644
--- a/arch/arm64/kernel/signal.c
+++ b/arch/arm64/kernel/signal.c
@@ -35,14 +35,18 @@
 #include <asm/signal32.h>
 #include <asm/vdso.h>
 
+struct sigframe {
+	struct ucontext uc;
+	u64 fp;
+	u64 lr;
+};
+
 /*
  * Do a signal return; undo the signal stack. These are aligned to 128-bit.
  */
 struct rt_sigframe {
 	struct siginfo info;
-	struct ucontext uc;
-	u64 fp;
-	u64 lr;
+	struct sigframe sig;
 };
 
 static int preserve_fpsimd_context(struct fpsimd_context __user *ctx)
@@ -93,7 +97,7 @@ static int restore_fpsimd_context(struct fpsimd_context __user *ctx)
 }
 
 static int restore_sigframe(struct pt_regs *regs,
-			    struct rt_sigframe __user *sf)
+			    struct sigframe __user *sf)
 {
 	sigset_t set;
 	int i, err;
@@ -145,10 +149,10 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
 	if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
 		goto badframe;
 
-	if (restore_sigframe(regs, frame))
+	if (restore_sigframe(regs, &frame->sig))
 		goto badframe;
 
-	if (restore_altstack(&frame->uc.uc_stack))
+	if (restore_altstack(&frame->sig.uc.uc_stack))
 		goto badframe;
 
 	return regs->regs[0];
@@ -162,7 +166,7 @@ badframe:
 	return 0;
 }
 
-static int setup_sigframe(struct rt_sigframe __user *sf,
+static int setup_sigframe(struct sigframe __user *sf,
 			  struct pt_regs *regs, sigset_t *set)
 {
 	int i, err = 0;
@@ -230,13 +234,13 @@ static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig,
 }
 
 static void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
-			 void __user *frame, int usig)
+			 void __user *frame, off_t sigframe_off, int usig)
 {
 	__sigrestore_t sigtramp;
 
 	regs->regs[0] = usig;
 	regs->sp = (unsigned long)frame;
-	regs->regs[29] = regs->sp + offsetof(struct rt_sigframe, fp);
+	regs->regs[29] = regs->sp + sigframe_off + offsetof(struct sigframe, fp);
 	regs->pc = (unsigned long)ka->sa.sa_handler;
 
 	if (ka->sa.sa_flags & SA_RESTORER)
@@ -257,17 +261,18 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
 	if (!frame)
 		return 1;
 
-	__put_user_error(0, &frame->uc.uc_flags, err);
-	__put_user_error(NULL, &frame->uc.uc_link, err);
+	__put_user_error(0, &frame->sig.uc.uc_flags, err);
+	__put_user_error(NULL, &frame->sig.uc.uc_link, err);
 
-	err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
-	err |= setup_sigframe(frame, regs, set);
+	err |= __save_altstack(&frame->sig.uc.uc_stack, regs->sp);
+	err |= setup_sigframe(&frame->sig, regs, set);
 	if (err == 0) {
-		setup_return(regs, &ksig->ka, frame, usig);
+		setup_return(regs, &ksig->ka, frame,
+			offsetof(struct rt_sigframe, sig), usig);
 		if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
 			err |= copy_siginfo_to_user(&frame->info, &ksig->info);
 			regs->regs[1] = (unsigned long)&frame->info;
-			regs->regs[2] = (unsigned long)&frame->uc;
+			regs->regs[2] = (unsigned long)&frame->sig.uc;
 		}
 	}
 
-- 
2.5.0

  parent reply	other threads:[~2015-12-15 21:49 UTC|newest]

Thread overview: 156+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15 21:42 [RFC3 PATCH v6 00/20] ILP32 for ARM64 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 01/20] arm64: ilp32: add documentation on the ILP32 ABI " Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 02/20] arm64: ensure the kernel is compiled for LP64 Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 03/20] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-17 11:23   ` Catalin Marinas
2015-12-17 11:23     ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 04/20] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-23 14:15   ` Yury Norov
2015-12-23 14:15     ` Yury Norov
2015-12-28  8:43   ` > diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile Bamvor Jian Zhang
2015-12-28  8:43     ` Bamvor Jian Zhang
2015-12-28  9:01     ` [PATCH v6 04/20] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Zhangjian (Bamvor)
2015-12-28  9:01       ` Zhangjian (Bamvor)
2015-12-29 12:27       ` Yury Norov
2015-12-29 12:27         ` Yury Norov
2015-12-29 14:59         ` [PATCH] arm64: compat: fix wrong dependency Bamvor Jian Zhang
2015-12-29 14:59           ` Bamvor Jian Zhang
2015-12-29 13:12       ` [PATCH v6 04/20] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov
2015-12-29 13:12         ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 05/20] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 06/20] thread: move thread bits accessors to separated file Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 07/20] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-17 11:38   ` Catalin Marinas
2015-12-17 11:38     ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 08/20] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Yury Norov
2015-12-15 21:42   ` [PATCH v6 08/20] arm64: ilp32: add is_ilp32_compat_{task, thread} " Yury Norov
2015-12-17 11:41   ` Catalin Marinas
2015-12-17 11:41     ` Catalin Marinas
2015-12-18 14:11     ` Yury Norov
2015-12-18 14:11       ` Yury Norov
2015-12-18 14:44       ` Yury Norov
2015-12-18 14:44         ` Yury Norov
2015-12-21 17:42         ` Catalin Marinas
2015-12-21 17:42           ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 09/20] arm64:ilp32: share HWCAP between LP64 and ILP32 Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-16 15:54   ` Arnd Bergmann
2015-12-16 15:54     ` Arnd Bergmann
2015-12-16 16:58     ` Catalin Marinas
2015-12-16 16:58       ` Catalin Marinas
2015-12-16 17:19       ` Catalin Marinas
2015-12-16 17:19         ` Catalin Marinas
2015-12-16 19:17         ` Arnd Bergmann
2015-12-16 19:17           ` Arnd Bergmann
2015-12-17 10:54           ` Catalin Marinas
2015-12-17 10:54             ` Catalin Marinas
2015-12-17 13:56             ` Arnd Bergmann
2015-12-17 13:56               ` Arnd Bergmann
2015-12-15 21:42 ` [PATCH v6 10/20] arm64:ilp32 use the native LP64 'start_thread' for ILP32 threads Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-16 15:50   ` Arnd Bergmann
2015-12-16 15:50     ` Arnd Bergmann
2015-12-18 13:57     ` Yury Norov
2015-12-18 13:57       ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 11/20] arm64:ilp32: support core dump generation for ILP32 Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-17 14:05   ` Catalin Marinas
2015-12-17 14:05     ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 12/20] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-16 16:07   ` Arnd Bergmann
2015-12-16 16:07     ` Arnd Bergmann
2015-12-17 18:27   ` Catalin Marinas
2015-12-17 18:27     ` Catalin Marinas
2015-12-17 20:10     ` Arnd Bergmann
2015-12-17 20:10       ` Arnd Bergmann
2015-12-17 20:14       ` Andrew Pinski
2015-12-17 20:14         ` Andrew Pinski
2015-12-17 20:50         ` Arnd Bergmann
2015-12-17 20:50           ` Arnd Bergmann
2016-01-05 15:26           ` Yury Norov
2016-01-05 15:26             ` Yury Norov
2016-01-05 21:12             ` Arnd Bergmann
2016-01-05 21:12               ` Arnd Bergmann
2016-01-06 17:10               ` Catalin Marinas
2016-01-06 17:10                 ` Catalin Marinas
2016-01-07 14:13                 ` Arnd Bergmann
2016-01-07 14:13                   ` Arnd Bergmann
2016-01-07 15:42                   ` Yury Norov
2016-01-07 15:42                     ` Yury Norov
2016-01-07 17:23                   ` Catalin Marinas
2016-01-07 17:23                     ` Catalin Marinas
2015-12-18 11:42         ` Catalin Marinas
2015-12-18 11:42           ` Catalin Marinas
2015-12-18 12:47           ` Arnd Bergmann
2015-12-18 12:47             ` Arnd Bergmann
2015-12-21 18:31             ` Catalin Marinas
2015-12-21 18:31               ` Catalin Marinas
2015-12-21 22:19               ` Arnd Bergmann
2015-12-21 22:19                 ` Arnd Bergmann
2015-12-21 18:39             ` Dr. Philipp Tomsich
2015-12-21 18:39               ` Dr. Philipp Tomsich
2015-12-21 22:13               ` Arnd Bergmann
2015-12-21 22:13                 ` Arnd Bergmann
2015-12-21 22:31   ` Arnd Bergmann
2015-12-21 22:31     ` Arnd Bergmann
2015-12-23 18:31     ` Yury Norov
2015-12-23 18:31       ` Yury Norov
2015-12-23 21:48       ` Arnd Bergmann
2015-12-23 21:48         ` Arnd Bergmann
2015-12-15 21:42 ` [PATCH v6 13/20] arm64: ilp32: share aarch32 syscall wrappers to ilp32 Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-17 14:38   ` Andreas Schwab
2015-12-17 14:38     ` Andreas Schwab
2015-12-18 13:49     ` Yury Norov
2015-12-18 13:49       ` Yury Norov
2015-12-22 12:25   ` Catalin Marinas
2015-12-22 12:25     ` Catalin Marinas
2015-12-22 21:44     ` Arnd Bergmann
2015-12-22 21:44       ` Arnd Bergmann
2015-12-23 13:37       ` Catalin Marinas
2015-12-23 13:37         ` Catalin Marinas
2015-12-23 20:41         ` Arnd Bergmann
2015-12-23 20:41           ` Arnd Bergmann
2015-12-30 17:29           ` Yury Norov
2015-12-30 17:29             ` Yury Norov
2015-12-30 22:36             ` Arnd Bergmann
2015-12-30 22:36               ` Arnd Bergmann
2015-12-23  4:21     ` Yury Norov
2015-12-23  4:21       ` Yury Norov
2015-12-15 21:42 ` Yury Norov [this message]
2015-12-15 21:42   ` [PATCH v6 14/20] arm64: signal: wrap struct ucontext, fp and lr with struct sigframe Yury Norov
2015-12-15 21:42 ` [PATCH v6 15/20] arm64: signal: move ilp32 and lp64 common code to separated file Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-16 16:08   ` Arnd Bergmann
2015-12-16 16:08     ` Arnd Bergmann
2015-12-18 13:48     ` Yury Norov
2015-12-18 13:48       ` Yury Norov
2015-12-18 14:09       ` Arnd Bergmann
2015-12-18 14:09         ` Arnd Bergmann
2015-12-22 17:11   ` Catalin Marinas
2015-12-22 17:11     ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 16/20] arm64: signal32: move ilp32 and aarch32 " Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-22 14:29   ` Catalin Marinas
2015-12-22 14:29     ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 17/20] arm64: ilp32: introduce ilp32-specific handlers for sigframe Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-22 17:08   ` Catalin Marinas
2015-12-22 17:08     ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 18/20] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 19/20] arm64:ilp32: change COMPAT_ELF_PLATFORM to report a a subplatform for ILP32 Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 20/20] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2015-12-15 21:42   ` Yury Norov
2015-12-16 16:24 ` [RFC3 PATCH v6 00/20] ILP32 for ARM64 Arnd Bergmann
2015-12-16 16:24   ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1450215766-14765-15-git-send-email-ynorov@caviumnetworks.com \
    --to=ynorov@caviumnetworks.com \
    --cc=Nathan_Lynch@mentor.com \
    --cc=Prasun.Kapoor@caviumnetworks.com \
    --cc=agraf@suse.de \
    --cc=arnd@arndb.de \
    --cc=bamvor.zhangjian@huawei.com \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoph.muellner@theobroma-systems.com \
    --cc=ddaney.cavm@gmail.com \
    --cc=jan.dakinevich@gmail.com \
    --cc=joseph@codesourcery.com \
    --cc=klimov.linux@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=philipp.tomsich@theobroma-systems.com \
    --cc=pinskia@gmail.com \
    --cc=schwab@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.