* [PATCH 1/4] fs: always build llseek.
2019-08-27 20:21 [PATCH 0/4] Disable compat cruft on ppc64le Michal Suchanek
@ 2019-08-27 20:21 ` Michal Suchanek
2019-08-28 15:15 ` Christoph Hellwig
2019-08-28 18:13 ` Eric W. Biederman
2019-08-27 20:21 ` [PATCH 2/4] powerpc: move common register copy functions from signal_32.c to signal.c Michal Suchanek
` (2 subsequent siblings)
3 siblings, 2 replies; 12+ messages in thread
From: Michal Suchanek @ 2019-08-27 20:21 UTC (permalink / raw)
To: linuxppc-dev
Cc: Michal Suchanek, Benjamin Herrenschmidt, Paul Mackerras,
Michael Ellerman, Alexander Viro, Dmitry V. Levin,
Thomas Gleixner, Steven Rostedt, Max Filippov, Firoz Khan,
Christophe Leroy, Nicholas Piggin, Hari Bathini, Joel Stanley,
Andrew Donnellan, Breno Leitao, Eric W. Biederman,
Allison Randal, Michael Neuling, Andrew Morton,
David Hildenbrand, Greg Kroah-Hartman, linux-kernel,
linux-fsdevel
64bit !COMPAT does not build because the llseek syscall is in the tables.
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
fs/read_write.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/fs/read_write.c b/fs/read_write.c
index 5bbf587f5bc1..9db56931eb26 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -331,7 +331,6 @@ COMPAT_SYSCALL_DEFINE3(lseek, unsigned int, fd, compat_off_t, offset, unsigned i
}
#endif
-#if !defined(CONFIG_64BIT) || defined(CONFIG_COMPAT)
SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high,
unsigned long, offset_low, loff_t __user *, result,
unsigned int, whence)
@@ -360,7 +359,6 @@ SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high,
fdput_pos(f);
return retval;
}
-#endif
int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count)
{
--
2.22.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] fs: always build llseek.
2019-08-27 20:21 ` [PATCH 1/4] fs: always build llseek Michal Suchanek
@ 2019-08-28 15:15 ` Christoph Hellwig
2019-08-28 16:15 ` Michal Suchánek
2019-08-28 18:13 ` Eric W. Biederman
1 sibling, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2019-08-28 15:15 UTC (permalink / raw)
To: Michal Suchanek
Cc: linuxppc-dev, David Hildenbrand, Dmitry V. Levin, Max Filippov,
Paul Mackerras, Breno Leitao, Michael Neuling, Firoz Khan,
Hari Bathini, Joel Stanley, Nicholas Piggin, Steven Rostedt,
Thomas Gleixner, Allison Randal, Greg Kroah-Hartman,
linux-kernel, Eric W. Biederman, Andrew Donnellan, linux-fsdevel,
Andrew Morton, Alexander Viro
On Tue, Aug 27, 2019 at 10:21:06PM +0200, Michal Suchanek wrote:
> 64bit !COMPAT does not build because the llseek syscall is in the tables.
Well, this will bloat thinkgs like 64-bit RISC-V for no good reason.
Please introduce a WANT_LSEEK like symbol that ppc64 can select instead.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] fs: always build llseek.
2019-08-28 15:15 ` Christoph Hellwig
@ 2019-08-28 16:15 ` Michal Suchánek
2019-08-29 6:22 ` Christoph Hellwig
0 siblings, 1 reply; 12+ messages in thread
From: Michal Suchánek @ 2019-08-28 16:15 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Alexander Viro, Michael Neuling, David Hildenbrand,
Steven Rostedt, Greg Kroah-Hartman, linux-fsdevel,
Allison Randal, linux-kernel, Nicholas Piggin, Dmitry V. Levin,
Max Filippov, Paul Mackerras, Joel Stanley, Andrew Donnellan,
Breno Leitao, Firoz Khan, Thomas Gleixner, linuxppc-dev,
Andrew Morton, Hari Bathini, Eric W. Biederman
On Wed, 28 Aug 2019 08:15:52 -0700
Christoph Hellwig <hch@infradead.org> wrote:
> On Tue, Aug 27, 2019 at 10:21:06PM +0200, Michal Suchanek wrote:
> > 64bit !COMPAT does not build because the llseek syscall is in the tables.
>
> Well, this will bloat thinkgs like 64-bit RISC-V for no good reason.
> Please introduce a WANT_LSEEK like symbol that ppc64 can select instead.
It also builds when llseek is marked as 32bit only in syscall.tbl
It seems it was handled specially in some way before syscall.tbl was
added, though (removed in ab66dcc76d6ab8fae9d69d149ae38c42605e7fc5)
Thanks
Michal
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] fs: always build llseek.
2019-08-28 16:15 ` Michal Suchánek
@ 2019-08-29 6:22 ` Christoph Hellwig
2019-08-29 10:06 ` Michal Suchánek
0 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2019-08-29 6:22 UTC (permalink / raw)
To: Michal Suchánek
Cc: Christoph Hellwig, Alexander Viro, Michael Neuling,
David Hildenbrand, Steven Rostedt, Greg Kroah-Hartman,
linux-fsdevel, Allison Randal, linux-kernel, Nicholas Piggin,
Dmitry V. Levin, Max Filippov, Paul Mackerras, Joel Stanley,
Andrew Donnellan, Breno Leitao, Firoz Khan, Thomas Gleixner,
linuxppc-dev, Andrew Morton, Hari Bathini, Eric W. Biederman
On Wed, Aug 28, 2019 at 06:15:40PM +0200, Michal Suchánek wrote:
> On Wed, 28 Aug 2019 08:15:52 -0700
> Christoph Hellwig <hch@infradead.org> wrote:
>
> > On Tue, Aug 27, 2019 at 10:21:06PM +0200, Michal Suchanek wrote:
> > > 64bit !COMPAT does not build because the llseek syscall is in the tables.
> >
> > Well, this will bloat thinkgs like 64-bit RISC-V for no good reason.
> > Please introduce a WANT_LSEEK like symbol that ppc64 can select instead.
>
> It also builds when llseek is marked as 32bit only in syscall.tbl
>
> It seems it was handled specially in some way before syscall.tbl was
> added, though (removed in ab66dcc76d6ab8fae9d69d149ae38c42605e7fc5)
Independ of if you need it on a purely 64-bit build on powerpc (which
I'll let the experts figure out) it is not needed on a purely 64-bit
build on other platforms. So please make sure it is still built
conditional, just possibly with an opt-in for powerpc.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] fs: always build llseek.
2019-08-29 6:22 ` Christoph Hellwig
@ 2019-08-29 10:06 ` Michal Suchánek
0 siblings, 0 replies; 12+ messages in thread
From: Michal Suchánek @ 2019-08-29 10:06 UTC (permalink / raw)
To: Christoph Hellwig
Cc: David Hildenbrand, Dmitry V. Levin, Max Filippov, Paul Mackerras,
Breno Leitao, Michael Neuling, Firoz Khan, Allison Randal,
Joel Stanley, Nicholas Piggin, Steven Rostedt, Thomas Gleixner,
Hari Bathini, Greg Kroah-Hartman, linux-kernel,
Eric W. Biederman, Andrew Donnellan, linux-fsdevel,
Andrew Morton, linuxppc-dev, Alexander Viro
On Wed, 28 Aug 2019 23:22:00 -0700
Christoph Hellwig <hch@infradead.org> wrote:
> On Wed, Aug 28, 2019 at 06:15:40PM +0200, Michal Suchánek wrote:
> > On Wed, 28 Aug 2019 08:15:52 -0700
> > Christoph Hellwig <hch@infradead.org> wrote:
> >
> > > On Tue, Aug 27, 2019 at 10:21:06PM +0200, Michal Suchanek wrote:
> > > > 64bit !COMPAT does not build because the llseek syscall is in the tables.
> > >
> > > Well, this will bloat thinkgs like 64-bit RISC-V for no good reason.
> > > Please introduce a WANT_LSEEK like symbol that ppc64 can select instead.
> >
> > It also builds when llseek is marked as 32bit only in syscall.tbl
> >
> > It seems it was handled specially in some way before syscall.tbl was
> > added, though (removed in ab66dcc76d6ab8fae9d69d149ae38c42605e7fc5)
>
> Independ of if you need it on a purely 64-bit build on powerpc (which
> I'll let the experts figure out) it is not needed on a purely 64-bit
> build on other platforms. So please make sure it is still built
> conditional, just possibly with an opt-in for powerpc.
AFAICT it is needed for all 64bit platforms with unified syscall.tbl.
I modified the syscall.tbl for powerpc to not need the syscall with
64bit only build but other platforms are still broken. There are a few
platforms that use multiple tables and on those the 64bit one indeed
does not contain llseek.
Thanks
Michal
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] fs: always build llseek.
2019-08-27 20:21 ` [PATCH 1/4] fs: always build llseek Michal Suchanek
2019-08-28 15:15 ` Christoph Hellwig
@ 2019-08-28 18:13 ` Eric W. Biederman
2019-08-28 18:16 ` Eric W. Biederman
1 sibling, 1 reply; 12+ messages in thread
From: Eric W. Biederman @ 2019-08-28 18:13 UTC (permalink / raw)
To: Michal Suchanek
Cc: linuxppc-dev, Benjamin Herrenschmidt, Paul Mackerras,
Michael Ellerman, Alexander Viro, Dmitry V. Levin,
Thomas Gleixner, Steven Rostedt, Max Filippov, Firoz Khan,
Christophe Leroy, Nicholas Piggin, Hari Bathini, Joel Stanley,
Andrew Donnellan, Breno Leitao, Allison Randal, Michael Neuling,
Andrew Morton, David Hildenbrand, Greg Kroah-Hartman,
linux-kernel, linux-fsdevel
Michal Suchanek <msuchanek@suse.de> writes:
> 64bit !COMPAT does not build because the llseek syscall is in the
> tables.
Do I read this right you have a 128 bit offset to llseek on ppc64?
Looking at the signature it does not appear to make sense to build this
function on any 64bit platform.
Perhaps the proper fix to to take llseek out of your syscall tables?
Eric
> Signed-off-by: Michal Suchanek <msuchanek@suse.de>
> ---
> fs/read_write.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/fs/read_write.c b/fs/read_write.c
> index 5bbf587f5bc1..9db56931eb26 100644
> --- a/fs/read_write.c
> +++ b/fs/read_write.c
> @@ -331,7 +331,6 @@ COMPAT_SYSCALL_DEFINE3(lseek, unsigned int, fd, compat_off_t, offset, unsigned i
> }
> #endif
>
> -#if !defined(CONFIG_64BIT) || defined(CONFIG_COMPAT)
> SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high,
> unsigned long, offset_low, loff_t __user *, result,
> unsigned int, whence)
> @@ -360,7 +359,6 @@ SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high,
> fdput_pos(f);
> return retval;
> }
> -#endif
>
> int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count)
> {
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/4] fs: always build llseek.
2019-08-28 18:13 ` Eric W. Biederman
@ 2019-08-28 18:16 ` Eric W. Biederman
0 siblings, 0 replies; 12+ messages in thread
From: Eric W. Biederman @ 2019-08-28 18:16 UTC (permalink / raw)
To: Michal Suchanek
Cc: linuxppc-dev, Benjamin Herrenschmidt, Paul Mackerras,
Michael Ellerman, Alexander Viro, Dmitry V. Levin,
Thomas Gleixner, Steven Rostedt, Max Filippov, Firoz Khan,
Christophe Leroy, Nicholas Piggin, Hari Bathini, Joel Stanley,
Andrew Donnellan, Breno Leitao, Allison Randal, Michael Neuling,
Andrew Morton, David Hildenbrand, Greg Kroah-Hartman,
linux-kernel, linux-fsdevel
ebiederm@xmission.com (Eric W. Biederman) writes:
> Michal Suchanek <msuchanek@suse.de> writes:
>
>> 64bit !COMPAT does not build because the llseek syscall is in the
>> tables.
>
> Do I read this right you have a 128 bit offset to llseek on ppc64?
>
> Looking at the signature it does not appear to make sense to build this
> function on any 64bit platform.
>
> Perhaps the proper fix to to take llseek out of your syscall tables?
Sorry I missed seeing the 2 newer version of the patchset in my inbox
it seems you have already made the change I am suggesting.
Never mind.
Eric
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/4] powerpc: move common register copy functions from signal_32.c to signal.c
2019-08-27 20:21 [PATCH 0/4] Disable compat cruft on ppc64le Michal Suchanek
2019-08-27 20:21 ` [PATCH 1/4] fs: always build llseek Michal Suchanek
@ 2019-08-27 20:21 ` Michal Suchanek
2019-08-27 20:21 ` [PATCH 3/4] powerpc/64: make buildable without CONFIG_COMPAT Michal Suchanek
2019-08-27 20:21 ` [PATCH 4/4] powerpc/64: Disable COMPAT if littleendian Michal Suchanek
3 siblings, 0 replies; 12+ messages in thread
From: Michal Suchanek @ 2019-08-27 20:21 UTC (permalink / raw)
To: linuxppc-dev
Cc: Michal Suchanek, Benjamin Herrenschmidt, Paul Mackerras,
Michael Ellerman, Alexander Viro, Dmitry V. Levin,
Thomas Gleixner, Steven Rostedt, Max Filippov, Firoz Khan,
Christophe Leroy, Nicholas Piggin, Hari Bathini, Joel Stanley,
Andrew Donnellan, Breno Leitao, Eric W. Biederman,
Allison Randal, Michael Neuling, Andrew Morton,
David Hildenbrand, Greg Kroah-Hartman, linux-kernel,
linux-fsdevel
These functions are required for 64bit as well.
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
arch/powerpc/kernel/signal.c | 141 ++++++++++++++++++++++++++++++++
arch/powerpc/kernel/signal_32.c | 140 -------------------------------
2 files changed, 141 insertions(+), 140 deletions(-)
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
index e6c30cee6abf..60436432399f 100644
--- a/arch/powerpc/kernel/signal.c
+++ b/arch/powerpc/kernel/signal.c
@@ -18,12 +18,153 @@
#include <linux/syscalls.h>
#include <asm/hw_breakpoint.h>
#include <linux/uaccess.h>
+#include <asm/switch_to.h>
#include <asm/unistd.h>
#include <asm/debug.h>
#include <asm/tm.h>
#include "signal.h"
+#ifdef CONFIG_VSX
+unsigned long copy_fpr_to_user(void __user *to,
+ struct task_struct *task)
+{
+ u64 buf[ELF_NFPREG];
+ int i;
+
+ /* save FPR copy to local buffer then write to the thread_struct */
+ for (i = 0; i < (ELF_NFPREG - 1) ; i++)
+ buf[i] = task->thread.TS_FPR(i);
+ buf[i] = task->thread.fp_state.fpscr;
+ return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
+}
+
+unsigned long copy_fpr_from_user(struct task_struct *task,
+ void __user *from)
+{
+ u64 buf[ELF_NFPREG];
+ int i;
+
+ if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
+ return 1;
+ for (i = 0; i < (ELF_NFPREG - 1) ; i++)
+ task->thread.TS_FPR(i) = buf[i];
+ task->thread.fp_state.fpscr = buf[i];
+
+ return 0;
+}
+
+unsigned long copy_vsx_to_user(void __user *to,
+ struct task_struct *task)
+{
+ u64 buf[ELF_NVSRHALFREG];
+ int i;
+
+ /* save FPR copy to local buffer then write to the thread_struct */
+ for (i = 0; i < ELF_NVSRHALFREG; i++)
+ buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET];
+ return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
+}
+
+unsigned long copy_vsx_from_user(struct task_struct *task,
+ void __user *from)
+{
+ u64 buf[ELF_NVSRHALFREG];
+ int i;
+
+ if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
+ return 1;
+ for (i = 0; i < ELF_NVSRHALFREG ; i++)
+ task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
+ return 0;
+}
+
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+unsigned long copy_ckfpr_to_user(void __user *to,
+ struct task_struct *task)
+{
+ u64 buf[ELF_NFPREG];
+ int i;
+
+ /* save FPR copy to local buffer then write to the thread_struct */
+ for (i = 0; i < (ELF_NFPREG - 1) ; i++)
+ buf[i] = task->thread.TS_CKFPR(i);
+ buf[i] = task->thread.ckfp_state.fpscr;
+ return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
+}
+
+unsigned long copy_ckfpr_from_user(struct task_struct *task,
+ void __user *from)
+{
+ u64 buf[ELF_NFPREG];
+ int i;
+
+ if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
+ return 1;
+ for (i = 0; i < (ELF_NFPREG - 1) ; i++)
+ task->thread.TS_CKFPR(i) = buf[i];
+ task->thread.ckfp_state.fpscr = buf[i];
+
+ return 0;
+}
+
+unsigned long copy_ckvsx_to_user(void __user *to,
+ struct task_struct *task)
+{
+ u64 buf[ELF_NVSRHALFREG];
+ int i;
+
+ /* save FPR copy to local buffer then write to the thread_struct */
+ for (i = 0; i < ELF_NVSRHALFREG; i++)
+ buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET];
+ return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
+}
+
+unsigned long copy_ckvsx_from_user(struct task_struct *task,
+ void __user *from)
+{
+ u64 buf[ELF_NVSRHALFREG];
+ int i;
+
+ if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
+ return 1;
+ for (i = 0; i < ELF_NVSRHALFREG ; i++)
+ task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
+ return 0;
+}
+#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
+#else
+inline unsigned long copy_fpr_to_user(void __user *to,
+ struct task_struct *task)
+{
+ return __copy_to_user(to, task->thread.fp_state.fpr,
+ ELF_NFPREG * sizeof(double));
+}
+
+inline unsigned long copy_fpr_from_user(struct task_struct *task,
+ void __user *from)
+{
+ return __copy_from_user(task->thread.fp_state.fpr, from,
+ ELF_NFPREG * sizeof(double));
+}
+
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+inline unsigned long copy_ckfpr_to_user(void __user *to,
+ struct task_struct *task)
+{
+ return __copy_to_user(to, task->thread.ckfp_state.fpr,
+ ELF_NFPREG * sizeof(double));
+}
+
+inline unsigned long copy_ckfpr_from_user(struct task_struct *task,
+ void __user *from)
+{
+ return __copy_from_user(task->thread.ckfp_state.fpr, from,
+ ELF_NFPREG * sizeof(double));
+}
+#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
+#endif
+
/* Log an error when sending an unhandled signal to a process. Controlled
* through debug.exception-trace sysctl.
*/
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index 98600b276f76..c93c937ea568 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -235,146 +235,6 @@ struct rt_sigframe {
int abigap[56];
};
-#ifdef CONFIG_VSX
-unsigned long copy_fpr_to_user(void __user *to,
- struct task_struct *task)
-{
- u64 buf[ELF_NFPREG];
- int i;
-
- /* save FPR copy to local buffer then write to the thread_struct */
- for (i = 0; i < (ELF_NFPREG - 1) ; i++)
- buf[i] = task->thread.TS_FPR(i);
- buf[i] = task->thread.fp_state.fpscr;
- return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
-}
-
-unsigned long copy_fpr_from_user(struct task_struct *task,
- void __user *from)
-{
- u64 buf[ELF_NFPREG];
- int i;
-
- if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
- return 1;
- for (i = 0; i < (ELF_NFPREG - 1) ; i++)
- task->thread.TS_FPR(i) = buf[i];
- task->thread.fp_state.fpscr = buf[i];
-
- return 0;
-}
-
-unsigned long copy_vsx_to_user(void __user *to,
- struct task_struct *task)
-{
- u64 buf[ELF_NVSRHALFREG];
- int i;
-
- /* save FPR copy to local buffer then write to the thread_struct */
- for (i = 0; i < ELF_NVSRHALFREG; i++)
- buf[i] = task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET];
- return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
-}
-
-unsigned long copy_vsx_from_user(struct task_struct *task,
- void __user *from)
-{
- u64 buf[ELF_NVSRHALFREG];
- int i;
-
- if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
- return 1;
- for (i = 0; i < ELF_NVSRHALFREG ; i++)
- task->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
- return 0;
-}
-
-#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
-unsigned long copy_ckfpr_to_user(void __user *to,
- struct task_struct *task)
-{
- u64 buf[ELF_NFPREG];
- int i;
-
- /* save FPR copy to local buffer then write to the thread_struct */
- for (i = 0; i < (ELF_NFPREG - 1) ; i++)
- buf[i] = task->thread.TS_CKFPR(i);
- buf[i] = task->thread.ckfp_state.fpscr;
- return __copy_to_user(to, buf, ELF_NFPREG * sizeof(double));
-}
-
-unsigned long copy_ckfpr_from_user(struct task_struct *task,
- void __user *from)
-{
- u64 buf[ELF_NFPREG];
- int i;
-
- if (__copy_from_user(buf, from, ELF_NFPREG * sizeof(double)))
- return 1;
- for (i = 0; i < (ELF_NFPREG - 1) ; i++)
- task->thread.TS_CKFPR(i) = buf[i];
- task->thread.ckfp_state.fpscr = buf[i];
-
- return 0;
-}
-
-unsigned long copy_ckvsx_to_user(void __user *to,
- struct task_struct *task)
-{
- u64 buf[ELF_NVSRHALFREG];
- int i;
-
- /* save FPR copy to local buffer then write to the thread_struct */
- for (i = 0; i < ELF_NVSRHALFREG; i++)
- buf[i] = task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET];
- return __copy_to_user(to, buf, ELF_NVSRHALFREG * sizeof(double));
-}
-
-unsigned long copy_ckvsx_from_user(struct task_struct *task,
- void __user *from)
-{
- u64 buf[ELF_NVSRHALFREG];
- int i;
-
- if (__copy_from_user(buf, from, ELF_NVSRHALFREG * sizeof(double)))
- return 1;
- for (i = 0; i < ELF_NVSRHALFREG ; i++)
- task->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = buf[i];
- return 0;
-}
-#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
-#else
-inline unsigned long copy_fpr_to_user(void __user *to,
- struct task_struct *task)
-{
- return __copy_to_user(to, task->thread.fp_state.fpr,
- ELF_NFPREG * sizeof(double));
-}
-
-inline unsigned long copy_fpr_from_user(struct task_struct *task,
- void __user *from)
-{
- return __copy_from_user(task->thread.fp_state.fpr, from,
- ELF_NFPREG * sizeof(double));
-}
-
-#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
-inline unsigned long copy_ckfpr_to_user(void __user *to,
- struct task_struct *task)
-{
- return __copy_to_user(to, task->thread.ckfp_state.fpr,
- ELF_NFPREG * sizeof(double));
-}
-
-inline unsigned long copy_ckfpr_from_user(struct task_struct *task,
- void __user *from)
-{
- return __copy_from_user(task->thread.ckfp_state.fpr, from,
- ELF_NFPREG * sizeof(double));
-}
-#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
-#endif
-
/*
* Save the current user registers on the user stack.
* We only save the altivec/spe registers if the process has used
--
2.22.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] powerpc/64: make buildable without CONFIG_COMPAT
2019-08-27 20:21 [PATCH 0/4] Disable compat cruft on ppc64le Michal Suchanek
2019-08-27 20:21 ` [PATCH 1/4] fs: always build llseek Michal Suchanek
2019-08-27 20:21 ` [PATCH 2/4] powerpc: move common register copy functions from signal_32.c to signal.c Michal Suchanek
@ 2019-08-27 20:21 ` Michal Suchanek
2019-08-27 20:36 ` Michal Suchánek
2019-08-27 20:21 ` [PATCH 4/4] powerpc/64: Disable COMPAT if littleendian Michal Suchanek
3 siblings, 1 reply; 12+ messages in thread
From: Michal Suchanek @ 2019-08-27 20:21 UTC (permalink / raw)
To: linuxppc-dev
Cc: Michal Suchanek, Benjamin Herrenschmidt, Paul Mackerras,
Michael Ellerman, Alexander Viro, Dmitry V. Levin,
Thomas Gleixner, Steven Rostedt, Max Filippov, Firoz Khan,
Christophe Leroy, Nicholas Piggin, Hari Bathini, Joel Stanley,
Andrew Donnellan, Breno Leitao, Eric W. Biederman,
Allison Randal, Michael Neuling, Andrew Morton,
David Hildenbrand, Greg Kroah-Hartman, linux-kernel,
linux-fsdevel
There are numerous references to 32bit functions in generic and 64bit
code so ifdef them out.
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
arch/powerpc/include/asm/syscall.h | 2 ++
arch/powerpc/kernel/Makefile | 15 ++++++++++++---
arch/powerpc/kernel/entry_64.S | 2 ++
arch/powerpc/kernel/signal.c | 5 +++--
arch/powerpc/kernel/syscall_64.c | 5 +++--
arch/powerpc/kernel/vdso.c | 4 +++-
arch/powerpc/perf/callchain.c | 14 ++++++++++----
7 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h
index 38d62acfdce7..3ed3b75541a1 100644
--- a/arch/powerpc/include/asm/syscall.h
+++ b/arch/powerpc/include/asm/syscall.h
@@ -16,7 +16,9 @@
/* ftrace syscalls requires exporting the sys_call_table */
extern const unsigned long sys_call_table[];
+#ifdef CONFIG_COMPAT
extern const unsigned long compat_sys_call_table[];
+#endif
static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
{
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 1d646a94d96c..b0db365b83d8 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -44,16 +44,25 @@ CFLAGS_btext.o += -DDISABLE_BRANCH_PROFILING
endif
obj-y := cputable.o ptrace.o syscalls.o \
- irq.o align.o signal_32.o pmc.o vdso.o \
+ irq.o align.o pmc.o vdso.o \
process.o systbl.o idle.o \
signal.o sysfs.o cacheinfo.o time.o \
prom.o traps.o setup-common.o \
udbg.o misc.o io.o misc_$(BITS).o \
of_platform.o prom_parse.o
-obj-$(CONFIG_PPC64) += setup_64.o sys_ppc32.o \
- signal_64.o ptrace32.o \
+ifndef CONFIG_PPC64
+obj-y += signal_32.o
+else
+ifdef CONFIG_COMPAT
+obj-y += signal_32.o
+endif
+endif
+obj-$(CONFIG_PPC64) += setup_64.o signal_64.o \
paca.o nvram_64.o firmware.o \
syscall_64.o
+ifdef CONFIG_COMPAT
+obj-$(CONFIG_PPC64) += sys_ppc32.o ptrace32.o
+endif
obj-$(CONFIG_VDSO32) += vdso32/
obj-$(CONFIG_PPC_WATCHDOG) += watchdog.o
obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 2ec825a85f5b..a2dbf216f607 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -51,8 +51,10 @@
SYS_CALL_TABLE:
.tc sys_call_table[TC],sys_call_table
+#ifdef CONFIG_COMPAT
COMPAT_SYS_CALL_TABLE:
.tc compat_sys_call_table[TC],compat_sys_call_table
+#endif
/* This value is used to mark exception frames on the stack. */
exception_marker:
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
index 60436432399f..71f4f1794f86 100644
--- a/arch/powerpc/kernel/signal.c
+++ b/arch/powerpc/kernel/signal.c
@@ -277,14 +277,15 @@ static void do_signal(struct task_struct *tsk)
rseq_signal_deliver(&ksig, tsk->thread.regs);
+#ifdef CONFIG_COMPAT
if (is32) {
if (ksig.ka.sa.sa_flags & SA_SIGINFO)
ret = handle_rt_signal32(&ksig, oldset, tsk);
else
ret = handle_signal32(&ksig, oldset, tsk);
- } else {
+ } else
+#endif /* CONFIG_COMPAT */
ret = handle_rt_signal64(&ksig, oldset, tsk);
- }
tsk->thread.regs->trap = 0;
signal_setup_done(ret, &ksig, test_thread_flag(TIF_SINGLESTEP));
diff --git a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c
index 98ed970796d5..3f48262b512d 100644
--- a/arch/powerpc/kernel/syscall_64.c
+++ b/arch/powerpc/kernel/syscall_64.c
@@ -100,6 +100,7 @@ long system_call_exception(long r3, long r4, long r5, long r6, long r7, long r8,
/* May be faster to do array_index_nospec? */
barrier_nospec();
+#ifdef CONFIG_COMPAT
if (unlikely(ti_flags & _TIF_32BIT)) {
f = (void *)compat_sys_call_table[r0];
@@ -110,9 +111,9 @@ long system_call_exception(long r3, long r4, long r5, long r6, long r7, long r8,
r7 &= 0x00000000ffffffffULL;
r8 &= 0x00000000ffffffffULL;
- } else {
+ } else
+#endif /* CONFIG_COMPAT */
f = (void *)sys_call_table[r0];
- }
return f(r3, r4, r5, r6, r7, r8);
}
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index d60598113a9f..2ab9327e44c4 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -667,7 +667,7 @@ static void __init vdso_setup_syscall_map(void)
{
unsigned int i;
extern unsigned long *sys_call_table;
-#ifdef CONFIG_PPC64
+#if defined(CONFIG_PPC64) && defined(CONFIG_COMPAT)
extern unsigned long *compat_sys_call_table;
#endif
extern unsigned long sys_ni_syscall;
@@ -678,9 +678,11 @@ static void __init vdso_setup_syscall_map(void)
if (sys_call_table[i] != sys_ni_syscall)
vdso_data->syscall_map_64[i >> 5] |=
0x80000000UL >> (i & 0x1f);
+#ifdef CONFIG_COMPAT
if (compat_sys_call_table[i] != sys_ni_syscall)
vdso_data->syscall_map_32[i >> 5] |=
0x80000000UL >> (i & 0x1f);
+#endif /* CONFIG_COMPAT */
#else /* CONFIG_PPC64 */
if (sys_call_table[i] != sys_ni_syscall)
vdso_data->syscall_map_32[i >> 5] |=
diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c
index c84bbd4298a0..0a4565820d6c 100644
--- a/arch/powerpc/perf/callchain.c
+++ b/arch/powerpc/perf/callchain.c
@@ -15,7 +15,7 @@
#include <asm/sigcontext.h>
#include <asm/ucontext.h>
#include <asm/vdso.h>
-#ifdef CONFIG_PPC64
+#if defined(CONFIG_PPC64) && defined(CONFIG_COMPAT)
#include "../kernel/ppc32.h"
#endif
#include <asm/pte-walk.h>
@@ -165,6 +165,7 @@ static int read_user_stack_64(unsigned long __user *ptr, unsigned long *ret)
return read_user_stack_slow(ptr, ret, 8);
}
+#ifdef CONFIG_COMPAT
static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
{
if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
@@ -180,6 +181,7 @@ static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
return read_user_stack_slow(ptr, ret, 4);
}
+#endif
static inline int valid_user_sp(unsigned long sp, int is_64)
{
@@ -341,6 +343,7 @@ static inline int valid_user_sp(unsigned long sp, int is_64)
#endif /* CONFIG_PPC64 */
+#if !defined(CONFIG_PPC64) || defined(CONFIG_COMPAT)
/*
* Layout for non-RT signal frames
*/
@@ -482,12 +485,15 @@ static void perf_callchain_user_32(struct perf_callchain_entry_ctx *entry,
sp = next_sp;
}
}
+#endif /* 32bit */
void
perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs)
{
- if (current_is_64bit())
- perf_callchain_user_64(entry, regs);
- else
+#if !defined(CONFIG_PPC64) || defined(CONFIG_COMPAT)
+ if (!current_is_64bit())
perf_callchain_user_32(entry, regs);
+ else
+#endif
+ perf_callchain_user_64(entry, regs);
}
--
2.22.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 3/4] powerpc/64: make buildable without CONFIG_COMPAT
2019-08-27 20:21 ` [PATCH 3/4] powerpc/64: make buildable without CONFIG_COMPAT Michal Suchanek
@ 2019-08-27 20:36 ` Michal Suchánek
0 siblings, 0 replies; 12+ messages in thread
From: Michal Suchánek @ 2019-08-27 20:36 UTC (permalink / raw)
To: linuxppc-dev
Cc: Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman,
Alexander Viro, Dmitry V. Levin, Thomas Gleixner, Steven Rostedt,
Max Filippov, Firoz Khan, Christophe Leroy, Nicholas Piggin,
Hari Bathini, Joel Stanley, Andrew Donnellan, Breno Leitao,
Eric W. Biederman, Allison Randal, Michael Neuling,
Andrew Morton, David Hildenbrand, Greg Kroah-Hartman,
linux-kernel, linux-fsdevel
On Tue, 27 Aug 2019 22:21:08 +0200
Michal Suchanek <msuchanek@suse.de> wrote:
> There are numerous references to 32bit functions in generic and 64bit
> code so ifdef them out.
>
> Signed-off-by: Michal Suchanek <msuchanek@suse.de>
> ---
> arch/powerpc/include/asm/syscall.h | 2 ++
> arch/powerpc/kernel/Makefile | 15 ++++++++++++---
> arch/powerpc/kernel/entry_64.S | 2 ++
> arch/powerpc/kernel/signal.c | 5 +++--
> arch/powerpc/kernel/syscall_64.c | 5 +++--
> arch/powerpc/kernel/vdso.c | 4 +++-
> arch/powerpc/perf/callchain.c | 14 ++++++++++----
> 7 files changed, 35 insertions(+), 12 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h
> index 38d62acfdce7..3ed3b75541a1 100644
> --- a/arch/powerpc/include/asm/syscall.h
> +++ b/arch/powerpc/include/asm/syscall.h
> @@ -16,7 +16,9 @@
>
> /* ftrace syscalls requires exporting the sys_call_table */
> extern const unsigned long sys_call_table[];
> +#ifdef CONFIG_COMPAT
> extern const unsigned long compat_sys_call_table[];
> +#endif
>
> static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
> {
> diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
> index 1d646a94d96c..b0db365b83d8 100644
> --- a/arch/powerpc/kernel/Makefile
> +++ b/arch/powerpc/kernel/Makefile
> @@ -44,16 +44,25 @@ CFLAGS_btext.o += -DDISABLE_BRANCH_PROFILING
> endif
>
> obj-y := cputable.o ptrace.o syscalls.o \
> - irq.o align.o signal_32.o pmc.o vdso.o \
> + irq.o align.o pmc.o vdso.o \
> process.o systbl.o idle.o \
> signal.o sysfs.o cacheinfo.o time.o \
> prom.o traps.o setup-common.o \
> udbg.o misc.o io.o misc_$(BITS).o \
> of_platform.o prom_parse.o
> -obj-$(CONFIG_PPC64) += setup_64.o sys_ppc32.o \
> - signal_64.o ptrace32.o \
> +ifndef CONFIG_PPC64
> +obj-y += signal_32.o
> +else
> +ifdef CONFIG_COMPAT
> +obj-y += signal_32.o
> +endif
> +endif
> +obj-$(CONFIG_PPC64) += setup_64.o signal_64.o \
> paca.o nvram_64.o firmware.o \
> syscall_64.o
> +ifdef CONFIG_COMPAT
> +obj-$(CONFIG_PPC64) += sys_ppc32.o ptrace32.o
> +endif
> obj-$(CONFIG_VDSO32) += vdso32/
> obj-$(CONFIG_PPC_WATCHDOG) += watchdog.o
> obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
> diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
> index 2ec825a85f5b..a2dbf216f607 100644
> --- a/arch/powerpc/kernel/entry_64.S
> +++ b/arch/powerpc/kernel/entry_64.S
> @@ -51,8 +51,10 @@
> SYS_CALL_TABLE:
> .tc sys_call_table[TC],sys_call_table
>
> +#ifdef CONFIG_COMPAT
> COMPAT_SYS_CALL_TABLE:
> .tc compat_sys_call_table[TC],compat_sys_call_table
> +#endif
>
> /* This value is used to mark exception frames on the stack. */
> exception_marker:
> diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
> index 60436432399f..71f4f1794f86 100644
> --- a/arch/powerpc/kernel/signal.c
> +++ b/arch/powerpc/kernel/signal.c
> @@ -277,14 +277,15 @@ static void do_signal(struct task_struct *tsk)
>
> rseq_signal_deliver(&ksig, tsk->thread.regs);
>
> +#ifdef CONFIG_COMPAT
This is common code so it needs
#if !defined(CONFIG_PPC64) || defined(CONFIG_COMPAT)
> if (is32) {
> if (ksig.ka.sa.sa_flags & SA_SIGINFO)
> ret = handle_rt_signal32(&ksig, oldset, tsk);
> else
> ret = handle_signal32(&ksig, oldset, tsk);
> - } else {
> + } else
> +#endif /* CONFIG_COMPAT */
> ret = handle_rt_signal64(&ksig, oldset, tsk);
> - }
>
> tsk->thread.regs->trap = 0;
> signal_setup_done(ret, &ksig, test_thread_flag(TIF_SINGLESTEP));
> diff --git a/arch/powerpc/kernel/syscall_64.c b/arch/powerpc/kernel/syscall_64.c
> index 98ed970796d5..3f48262b512d 100644
> --- a/arch/powerpc/kernel/syscall_64.c
> +++ b/arch/powerpc/kernel/syscall_64.c
> @@ -100,6 +100,7 @@ long system_call_exception(long r3, long r4, long r5, long r6, long r7, long r8,
> /* May be faster to do array_index_nospec? */
> barrier_nospec();
>
> +#ifdef CONFIG_COMPAT
> if (unlikely(ti_flags & _TIF_32BIT)) {
> f = (void *)compat_sys_call_table[r0];
>
> @@ -110,9 +111,9 @@ long system_call_exception(long r3, long r4, long r5, long r6, long r7, long r8,
> r7 &= 0x00000000ffffffffULL;
> r8 &= 0x00000000ffffffffULL;
>
> - } else {
> + } else
> +#endif /* CONFIG_COMPAT */
> f = (void *)sys_call_table[r0];
> - }
>
> return f(r3, r4, r5, r6, r7, r8);
> }
> diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
> index d60598113a9f..2ab9327e44c4 100644
> --- a/arch/powerpc/kernel/vdso.c
> +++ b/arch/powerpc/kernel/vdso.c
> @@ -667,7 +667,7 @@ static void __init vdso_setup_syscall_map(void)
> {
> unsigned int i;
> extern unsigned long *sys_call_table;
> -#ifdef CONFIG_PPC64
> +#if defined(CONFIG_PPC64) && defined(CONFIG_COMPAT)
> extern unsigned long *compat_sys_call_table;
> #endif
> extern unsigned long sys_ni_syscall;
> @@ -678,9 +678,11 @@ static void __init vdso_setup_syscall_map(void)
> if (sys_call_table[i] != sys_ni_syscall)
> vdso_data->syscall_map_64[i >> 5] |=
> 0x80000000UL >> (i & 0x1f);
> +#ifdef CONFIG_COMPAT
> if (compat_sys_call_table[i] != sys_ni_syscall)
> vdso_data->syscall_map_32[i >> 5] |=
> 0x80000000UL >> (i & 0x1f);
> +#endif /* CONFIG_COMPAT */
> #else /* CONFIG_PPC64 */
> if (sys_call_table[i] != sys_ni_syscall)
> vdso_data->syscall_map_32[i >> 5] |=
> diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c
> index c84bbd4298a0..0a4565820d6c 100644
> --- a/arch/powerpc/perf/callchain.c
> +++ b/arch/powerpc/perf/callchain.c
> @@ -15,7 +15,7 @@
> #include <asm/sigcontext.h>
> #include <asm/ucontext.h>
> #include <asm/vdso.h>
> -#ifdef CONFIG_PPC64
> +#if defined(CONFIG_PPC64) && defined(CONFIG_COMPAT)
> #include "../kernel/ppc32.h"
> #endif
> #include <asm/pte-walk.h>
> @@ -165,6 +165,7 @@ static int read_user_stack_64(unsigned long __user *ptr, unsigned long *ret)
> return read_user_stack_slow(ptr, ret, 8);
> }
>
> +#ifdef CONFIG_COMPAT
> static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
> {
> if ((unsigned long)ptr > TASK_SIZE - sizeof(unsigned int) ||
> @@ -180,6 +181,7 @@ static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
>
> return read_user_stack_slow(ptr, ret, 4);
> }
> +#endif
>
> static inline int valid_user_sp(unsigned long sp, int is_64)
> {
> @@ -341,6 +343,7 @@ static inline int valid_user_sp(unsigned long sp, int is_64)
>
> #endif /* CONFIG_PPC64 */
>
> +#if !defined(CONFIG_PPC64) || defined(CONFIG_COMPAT)
> /*
> * Layout for non-RT signal frames
> */
> @@ -482,12 +485,15 @@ static void perf_callchain_user_32(struct perf_callchain_entry_ctx *entry,
> sp = next_sp;
> }
> }
> +#endif /* 32bit */
>
> void
> perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs)
> {
> - if (current_is_64bit())
> - perf_callchain_user_64(entry, regs);
> - else
> +#if !defined(CONFIG_PPC64) || defined(CONFIG_COMPAT)
> + if (!current_is_64bit())
> perf_callchain_user_32(entry, regs);
> + else
> +#endif
> + perf_callchain_user_64(entry, regs);
> }
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 4/4] powerpc/64: Disable COMPAT if littleendian.
2019-08-27 20:21 [PATCH 0/4] Disable compat cruft on ppc64le Michal Suchanek
` (2 preceding siblings ...)
2019-08-27 20:21 ` [PATCH 3/4] powerpc/64: make buildable without CONFIG_COMPAT Michal Suchanek
@ 2019-08-27 20:21 ` Michal Suchanek
3 siblings, 0 replies; 12+ messages in thread
From: Michal Suchanek @ 2019-08-27 20:21 UTC (permalink / raw)
To: linuxppc-dev
Cc: Michal Suchanek, Benjamin Herrenschmidt, Paul Mackerras,
Michael Ellerman, Alexander Viro, Dmitry V. Levin,
Thomas Gleixner, Steven Rostedt, Max Filippov, Firoz Khan,
Christophe Leroy, Nicholas Piggin, Hari Bathini, Joel Stanley,
Andrew Donnellan, Breno Leitao, Eric W. Biederman,
Allison Randal, Michael Neuling, Andrew Morton,
David Hildenbrand, Greg Kroah-Hartman, linux-kernel,
linux-fsdevel
ppc32le was never really a thing. Endian swap is already disabled by
default so this 32bit support is kind of useless on ppc64le.
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
---
arch/powerpc/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 5bab0bb6b833..67cd1c4d1bae 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -265,7 +265,7 @@ config PANIC_TIMEOUT
config COMPAT
bool
- default y if PPC64
+ default y if PPC64 && !CPU_LITTLE_ENDIAN
select COMPAT_BINFMT_ELF
select ARCH_WANT_OLD_COMPAT_IPC
select COMPAT_OLD_SIGACTION
--
2.22.0
^ permalink raw reply related [flat|nested] 12+ messages in thread