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: <pinskia@gmail.com>, <ddaney.cavm@gmail.com>,
<jan.dakinevich@gmail.com>, <Prasun.Kapoor@caviumnetworks.com>,
<christoph.muellner@theobroma-systems.com>,
<philipp.tomsich@theobroma-systems.com>, <broonie@kernel.org>,
<andrey.konovalov@linaro.org>, <Nathan_Lynch@mentor.com>,
<agraf@suse.de>, <bamvor.zhangjian@huawei.com>,
<klimov.linux@gmail.com>, <joseph@codesourcery.com>,
<schwab@suse.de>, Yury Norov <ynorov@caviumnetworks.com>
Subject: [PATCH v6 07/19] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat)
Date: Wed, 18 Nov 2015 00:16:47 +0300 [thread overview]
Message-ID: <1447795019-30176-8-git-send-email-ynorov@caviumnetworks.com> (raw)
In-Reply-To: <1447795019-30176-1-git-send-email-ynorov@caviumnetworks.com>
From: Andrew Pinski <apinski@cavium.com>
This patch introduces is_a32_compat_task and is_a32_thread so it is
easier
to say this is a a32 specific thread or a generic compat thread/task.
Reviewed-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
Signed-off-by: Andrew Pinski <Andrew.Pinski@caviumnetworks.com>
---
arch/arm64/include/asm/compat.h | 31 ++++++++++++++++++++++++++++---
arch/arm64/include/asm/elf.h | 2 +-
arch/arm64/include/asm/memory.h | 2 +-
arch/arm64/include/asm/processor.h | 4 ++--
arch/arm64/include/asm/thread_info.h | 2 +-
arch/arm64/kernel/hw_breakpoint.c | 7 ++++---
arch/arm64/kernel/perf_regs.c | 2 +-
arch/arm64/kernel/process.c | 4 ++--
arch/arm64/kernel/ptrace.c | 10 +++++-----
arch/arm64/kernel/signal.c | 5 +++--
arch/arm64/kernel/traps.c | 2 +-
11 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
index 7fbed69..9700e5e 100644
--- a/arch/arm64/include/asm/compat.h
+++ b/arch/arm64/include/asm/compat.h
@@ -299,19 +299,44 @@ struct compat_shmid64_ds {
compat_ulong_t __unused5;
};
-static inline int is_compat_task(void)
+#ifdef CONFIG_AARCH32_EL0
+
+static inline int is_a32_compat_task(void)
{
return test_thread_flag(TIF_32BIT);
}
-static inline int is_compat_thread(struct thread_info *thread)
+static inline int is_a32_compat_thread(struct thread_info *thread)
{
return test_ti_thread_flag(thread, TIF_32BIT);
}
+#else
+
+static inline int is_a32_compat_task(void)
+{
+ return 0;
+}
+
+static inline int is_a32_compat_thread(struct thread_info *thread)
+{
+ return 0;
+}
+#endif
+
+static inline int is_compat_task(void)
+{
+ return is_a32_compat_task();
+}
+
#else /* !CONFIG_COMPAT */
-static inline int is_compat_thread(struct thread_info *thread)
+static inline int is_a32_compat_thread(struct thread_info *thread)
+{
+ return 0;
+}
+
+static inline int is_a32_compat_task(void)
{
return 0;
}
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index 663f25d..01e032c 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -149,7 +149,7 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
/* 1GB of VA */
#ifdef CONFIG_COMPAT
-#define STACK_RND_MASK (test_thread_flag(TIF_32BIT) ? \
+#define STACK_RND_MASK (is_compat_task() ? \
0x7ff >> (PAGE_SHIFT - 12) : \
0x3ffff >> (PAGE_SHIFT - 12))
#else
diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
index 6b4c3ad..337f8e1 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -58,7 +58,7 @@
#ifdef CONFIG_COMPAT
#define TASK_SIZE_32 UL(0x100000000)
-#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
+#define TASK_SIZE (is_compat_task() ? \
TASK_SIZE_32 : TASK_SIZE_64)
#define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \
TASK_SIZE_32 : TASK_SIZE_64)
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index ff4abec..a415dd0 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -39,7 +39,7 @@
#define STACK_TOP_MAX TASK_SIZE_64
#ifdef CONFIG_COMPAT
#define AARCH32_VECTORS_BASE 0xffff0000
-#define STACK_TOP (test_thread_flag(TIF_32BIT) ? \
+#define STACK_TOP (is_compat_task() ? \
AARCH32_VECTORS_BASE : STACK_TOP_MAX)
#else
#define STACK_TOP STACK_TOP_MAX
@@ -92,7 +92,7 @@ struct thread_struct {
#define task_user_tls(t) \
({ \
unsigned long *__tls; \
- if (is_compat_thread(task_thread_info(t))) \
+ if (is_a32_compat_thread(task_thread_info(t))) \
__tls = &(t)->thread.tp2_value; \
else \
__tls = &(t)->thread.tp_value; \
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index dcd06d1..7d03565 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -110,7 +110,7 @@ static inline struct thread_info *current_thread_info(void)
#define TIF_FREEZE 19
#define TIF_RESTORE_SIGMASK 20
#define TIF_SINGLESTEP 21
-#define TIF_32BIT 22 /* 32bit process */
+#define TIF_32BIT 22 /* AARCH32 process */
#define TIF_SWITCH_MM 23 /* deferred switch_mm */
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c
index bba85c8..854fc82 100644
--- a/arch/arm64/kernel/hw_breakpoint.c
+++ b/arch/arm64/kernel/hw_breakpoint.c
@@ -28,6 +28,7 @@
#include <linux/ptrace.h>
#include <linux/smp.h>
+#include <asm/compat.h>
#include <asm/current.h>
#include <asm/debug-monitors.h>
#include <asm/hw_breakpoint.h>
@@ -420,7 +421,7 @@ static int arch_build_bp_info(struct perf_event *bp)
* Watchpoints can be of length 1, 2, 4 or 8 bytes.
*/
if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) {
- if (is_compat_task()) {
+ if (is_a32_compat_task()) {
if (info->ctrl.len != ARM_BREAKPOINT_LEN_2 &&
info->ctrl.len != ARM_BREAKPOINT_LEN_4)
return -EINVAL;
@@ -477,7 +478,7 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp)
* AArch32 tasks expect some simple alignment fixups, so emulate
* that here.
*/
- if (is_compat_task()) {
+ if (is_a32_compat_task()) {
if (info->ctrl.len == ARM_BREAKPOINT_LEN_8)
alignment_mask = 0x7;
else
@@ -664,7 +665,7 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
info = counter_arch_bp(wp);
/* AArch32 watchpoints are either 4 or 8 bytes aligned. */
- if (is_compat_task()) {
+ if (is_a32_compat_task()) {
if (info->ctrl.len == ARM_BREAKPOINT_LEN_8)
alignment_mask = 0x7;
else
diff --git a/arch/arm64/kernel/perf_regs.c b/arch/arm64/kernel/perf_regs.c
index 3f62b35..a79058f 100644
--- a/arch/arm64/kernel/perf_regs.c
+++ b/arch/arm64/kernel/perf_regs.c
@@ -45,7 +45,7 @@ int perf_reg_validate(u64 mask)
u64 perf_reg_abi(struct task_struct *task)
{
- if (is_compat_thread(task_thread_info(task)))
+ if (is_a32_compat_thread(task_thread_info(task)))
return PERF_SAMPLE_REGS_ABI_32;
else
return PERF_SAMPLE_REGS_ABI_64;
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 223b093..a6b0251 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -259,7 +259,7 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
asm("mrs %0, tpidr_el0" : "=r" (*task_user_tls(p)));
if (stack_start) {
- if (is_compat_thread(task_thread_info(p)))
+ if (is_a32_compat_thread(task_thread_info(p)))
childregs->compat_sp = stack_start;
/* 16-byte aligned stack mandatory on AArch64 */
else if (stack_start & 15)
@@ -296,7 +296,7 @@ static void tls_thread_switch(struct task_struct *next)
*task_user_tls(current) = tpidr;
tpidr = *task_user_tls(next);
- tpidrro = is_compat_thread(task_thread_info(next)) ?
+ tpidrro = is_a32_compat_thread(task_thread_info(next)) ?
next->thread.tp_value : 0;
asm(
diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
index 2a39b5d..d2e428c 100644
--- a/arch/arm64/kernel/ptrace.c
+++ b/arch/arm64/kernel/ptrace.c
@@ -79,7 +79,7 @@ static void ptrace_hbptriggered(struct perf_event *bp,
#ifdef CONFIG_AARCH32_EL0
int i;
- if (!is_compat_task())
+ if (!is_a32_compat_task())
goto send_sig;
for (i = 0; i < ARM_MAX_BRP; ++i) {
@@ -1194,7 +1194,7 @@ long compat_a32_arch_ptrace(struct task_struct *child, compat_long_t request,
long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
compat_ulong_t caddr, compat_ulong_t cdata)
{
- if (is_compat_task())
+ if (is_a32_compat_task())
return compat_a32_arch_ptrace(child, request, caddr, cdata);
return compat_ptrace_request(child, request, caddr, cdata);
}
@@ -1210,9 +1210,9 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
* 32-bit children use an extended user_aarch32_ptrace_view to allow
* access to the TLS register.
*/
- if (is_compat_task())
+ if (is_a32_compat_task())
return &user_aarch32_view;
- else if (is_compat_thread(task_thread_info(task)))
+ else if (is_a32_compat_thread(task_thread_info(task)))
return &user_aarch32_ptrace_view;
#endif
return &user_aarch64_view;
@@ -1239,7 +1239,7 @@ static void tracehook_report_syscall(struct pt_regs *regs,
* A scratch register (ip(r12) on AArch32, x7 on AArch64) is
* used to denote syscall entry/exit:
*/
- regno = (is_compat_task() ? 12 : 7);
+ regno = (is_a32_compat_task() ? 12 : 7);
saved_reg = regs->regs[regno];
regs->regs[regno] = dir;
diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
index 1e3593c..f12f8a0 100644
--- a/arch/arm64/kernel/signal.c
+++ b/arch/arm64/kernel/signal.c
@@ -29,6 +29,7 @@
#include <asm/debug-monitors.h>
#include <asm/elf.h>
#include <asm/cacheflush.h>
+#include <asm/compat.h>
#include <asm/ucontext.h>
#include <asm/unistd.h>
#include <asm/fpsimd.h>
@@ -276,7 +277,7 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
static void setup_restart_syscall(struct pt_regs *regs)
{
- if (is_compat_task())
+ if (is_a32_compat_task())
compat_setup_restart_syscall(regs);
else
regs->regs[8] = __NR_restart_syscall;
@@ -295,7 +296,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
/*
* Set up the stack frame
*/
- if (is_compat_task()) {
+ if (is_a32_compat_task()) {
if (ksig->ka.sa.sa_flags & SA_SIGINFO)
ret = compat_setup_rt_frame(usig, ksig, oldset, regs);
else
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 9ce9894..bc973d0 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -365,7 +365,7 @@ asmlinkage long do_ni_syscall(struct pt_regs *regs)
{
#ifdef CONFIG_AARCH32_EL0
long ret;
- if (is_compat_task()) {
+ if (is_a32_compat_task()) {
ret = compat_arm_syscall(regs);
if (ret != -ENOSYS)
return ret;
--
2.1.4
next prev parent reply other threads:[~2015-11-17 21:19 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-17 21:16 [RFC2 PATCH v6 00/19] ILP32 for ARM64 Yury Norov
2015-11-17 21:16 ` [PATCH v6 01/19] arm64:ilp32: add documentation on the ILP32 ABI " Yury Norov
2015-11-18 8:09 ` Zhangjian (Bamvor)
2015-11-17 21:16 ` [PATCH v6 02/19] arm64: ensure the kernel is compiled for LP64 Yury Norov
2015-11-17 21:16 ` [PATCH v6 03/19] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2015-11-17 21:16 ` [PATCH v6 04/19] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov
2015-12-03 12:02 ` Catalin Marinas
2015-12-04 21:58 ` Yury Norov
2015-11-17 21:16 ` [PATCH v6 05/19] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2015-12-03 11:31 ` Catalin Marinas
2015-12-03 11:36 ` Dr. Philipp Tomsich
2015-11-17 21:16 ` [PATCH v6 06/19] arm64:ilp32: share signal structures between ILP32 and LP64 ABIs Yury Norov
2015-11-17 22:14 ` Arnd Bergmann
2015-11-17 21:16 ` Yury Norov [this message]
2015-12-03 12:13 ` [PATCH v6 07/19] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Catalin Marinas
2015-12-04 17:05 ` Yury Norov
2015-12-05 11:00 ` Catalin Marinas
2015-11-17 21:16 ` [PATCH v6 08/19] arm64:ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Yury Norov
2015-11-17 21:16 ` [PATCH v6 09/19] arm64:ilp32: share HWCAP between LP64 and ILP32 Yury Norov
2015-11-17 21:16 ` [PATCH v6 10/19] arm64:ilp32 use the native LP64 'start_thread' for ILP32 threads Yury Norov
2015-12-03 12:20 ` Catalin Marinas
2015-11-17 21:16 ` [PATCH v6 11/19] arm64:ilp32: support core dump generation for ILP32 Yury Norov
2015-12-03 16:39 ` Catalin Marinas
2015-11-17 21:16 ` [PATCH v6 12/19] ptrace: Allow compat to use the native siginfo Yury Norov
2015-11-17 21:16 ` [PATCH v6 13/19] arm64: ilp32: common 32-bit wrappers Yury Norov
2015-11-17 21:16 ` [PATCH v6 14/19] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2015-11-17 21:57 ` Arnd Bergmann
2015-11-18 8:14 ` Arnd Bergmann
2015-11-19 13:21 ` Andreas Schwab
2015-11-19 13:32 ` Arnd Bergmann
2015-11-30 15:34 ` Arnd Bergmann
2015-11-30 20:21 ` Yury Norov
2015-11-30 21:49 ` Arnd Bergmann
2015-12-01 0:20 ` Andrew Pinski
2015-12-01 0:40 ` Yury Norov
2015-12-01 10:26 ` Arnd Bergmann
2015-12-01 9:20 ` Andreas Schwab
2015-12-01 10:22 ` Arnd Bergmann
2015-12-01 11:01 ` Andreas Schwab
2015-12-01 11:30 ` Arnd Bergmann
2015-12-02 0:24 ` Yury Norov
2015-12-02 10:03 ` Arnd Bergmann
2015-12-03 17:17 ` Catalin Marinas
2015-12-01 21:29 ` Yury Norov
2015-12-01 22:39 ` Arnd Bergmann
2015-12-01 23:35 ` Yury Norov
2015-12-02 8:37 ` Arnd Bergmann
2015-12-02 9:15 ` Yury Norov
2015-12-02 10:35 ` Yury Norov
2015-12-02 13:46 ` Arnd Bergmann
2015-12-02 13:54 ` Arnd Bergmann
2015-12-02 13:57 ` Will Deacon
2015-12-03 17:47 ` Catalin Marinas
2015-12-03 18:14 ` Yury Norov
2015-12-03 20:42 ` Arnd Bergmann
2015-12-02 10:01 ` Yury Norov
2015-12-02 11:03 ` Arnd Bergmann
2015-11-17 21:16 ` [PATCH v6 15/19] arm64: ilp32: force IPC_64 in msgctl, shmctl, semctl Yury Norov
2015-11-17 22:07 ` Arnd Bergmann
2015-11-18 8:25 ` Andreas Schwab
2015-11-18 9:23 ` Arnd Bergmann
2015-11-18 10:07 ` Geert Uytterhoeven
2015-11-18 12:04 ` Arnd Bergmann
2015-11-17 21:16 ` [PATCH v6 16/19] aarch64: ilp32: use generic stat64 structure Yury Norov
2015-11-17 22:09 ` Arnd Bergmann
2015-11-18 20:36 ` Yury Norov
2015-11-18 20:45 ` Arnd Bergmann
2015-11-17 21:16 ` [PATCH v6 17/19] arm64:ilp32: use the native siginfo instead of the compat siginfo Yury Norov
2015-11-17 21:16 ` [PATCH v6 18/19] arm64:ilp32: change COMPAT_ELF_PLATFORM to report a a subplatform for ILP32 Yury Norov
2015-11-18 8:11 ` Zhangjian (Bamvor)
2015-11-18 11:21 ` pinskia
2015-11-18 20:25 ` Yury Norov
2015-11-18 21:47 ` Dr. Philipp Tomsich
2015-11-17 21:16 ` [PATCH v6 19/19] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2015-11-18 8:00 ` [RFC2 PATCH v6 00/19] ILP32 for ARM64 Zhangjian (Bamvor)
2015-11-23 16:49 ` Andreas Schwab
2015-12-03 17:59 ` Catalin Marinas
2015-12-04 15:35 ` Yury Norov
2015-12-04 17:18 ` Catalin Marinas
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=1447795019-30176-8-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=andrey.konovalov@linaro.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®