Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1571217 > unrolled thread

Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures

Started byAndrew Morton <akpm@linux-foundation.org>
First post2017-02-01 01:30 +0100
Last post2017-02-05 14:20 +0100
Articles 7 — 6 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures Andrew Morton <akpm@linux-foundation.org> - 2017-02-01 01:30 +0100
    Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures Helge Deller <deller@gmx.de> - 2017-02-01 20:50 +0100
      Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures Andrew Morton <akpm@linux-foundation.org> - 2017-02-01 23:10 +0100
    Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures James Bottomley <James.Bottomley@HansenPartnership.com> - 2017-02-02 00:20 +0100
      Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures Andy Lutomirski <luto@kernel.org> - 2017-02-02 06:10 +0100
      Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures Matt Turner <mattst88@gmail.com> - 2017-02-05 12:50 +0100
        Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures "Maciej W. Rozycki" <macro@linux-mips.org> - 2017-02-05 14:20 +0100

#1571217 — Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures

FromAndrew Morton <akpm@linux-foundation.org>
Date2017-02-01 01:30 +0100
SubjectRe: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures
Message-ID<t5QY9-7lX-1@gated-at.bofh.it>
On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@gmx.de> wrote:

> The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
> implemented for PowerPC only.
> This trivial patch adds support for this syscall for all other architectures.

Seems reasonable.  I guess.  Why is this needed?

The man page will need updating.  It says "PowerPC only".

> 
> diff --git a/kernel/sys.c b/kernel/sys.c
> index 842914e..5818e5e 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -79,9 +79,6 @@
>  #ifndef GET_FPEXC_CTL
>  # define GET_FPEXC_CTL(a, b)	(-EINVAL)
>  #endif
> -#ifndef GET_ENDIAN
> -# define GET_ENDIAN(a, b)	(-EINVAL)
> -#endif
>  #ifndef SET_ENDIAN
>  # define SET_ENDIAN(a, b)	(-EINVAL)
>  #endif
> @@ -2136,7 +2133,13 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
>  			return -EFAULT;
>  		break;
>  	case PR_GET_ENDIAN:
> +#ifdef GET_ENDIAN
>  		error = GET_ENDIAN(me, arg2);
> +#elif defined(__BIG_ENDIAN)
> +		error = put_user(PR_ENDIAN_BIG, (unsigned int __user *)arg2);
> +#else
> +		error = put_user(PR_ENDIAN_LITTLE, (unsigned int __user *)arg2);
> +#endif
>  		break;
>  	case PR_SET_ENDIAN:
>  		error = SET_ENDIAN(me, arg2);

[toc] | [next] | [standalone]


#1571925

FromHelge Deller <deller@gmx.de>
Date2017-02-01 20:50 +0100
Message-ID<t694K-1Kd-23@gated-at.bofh.it>
In reply to#1571217
Hi Andrew,

On 01.02.2017 01:26, Andrew Morton wrote:
> On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@gmx.de> wrote:
> 
>> The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
>> implemented for PowerPC only.
>> This trivial patch adds support for this syscall for all other architectures.
> 
> Seems reasonable.  I guess.

Heck, I did forgot but I submitted a similar patch 8 years ago:
http://www.serverphorums.com/read.php?12,51902

> Why is this needed?

It's not actually needed beside the trivial reason of providing an interface
not just for one single architecture.

After reading the discussion from 2009 again, I'm fine if 
you would simply drop the patch. The decision up to you.

> The man page will need updating.  It says "PowerPC only".

In case you would include the patch I'd send patches to update
the manpage.

Thanks,
Helge

>> diff --git a/kernel/sys.c b/kernel/sys.c
>> index 842914e..5818e5e 100644
>> --- a/kernel/sys.c
>> +++ b/kernel/sys.c
>> @@ -79,9 +79,6 @@
>>  #ifndef GET_FPEXC_CTL
>>  # define GET_FPEXC_CTL(a, b)	(-EINVAL)
>>  #endif
>> -#ifndef GET_ENDIAN
>> -# define GET_ENDIAN(a, b)	(-EINVAL)
>> -#endif
>>  #ifndef SET_ENDIAN
>>  # define SET_ENDIAN(a, b)	(-EINVAL)
>>  #endif
>> @@ -2136,7 +2133,13 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
>>  			return -EFAULT;
>>  		break;
>>  	case PR_GET_ENDIAN:
>> +#ifdef GET_ENDIAN
>>  		error = GET_ENDIAN(me, arg2);
>> +#elif defined(__BIG_ENDIAN)
>> +		error = put_user(PR_ENDIAN_BIG, (unsigned int __user *)arg2);
>> +#else
>> +		error = put_user(PR_ENDIAN_LITTLE, (unsigned int __user *)arg2);
>> +#endif
>>  		break;
>>  	case PR_SET_ENDIAN:
>>  		error = SET_ENDIAN(me, arg2);

[toc] | [prev] | [next] | [standalone]


#1572008

FromAndrew Morton <akpm@linux-foundation.org>
Date2017-02-01 23:10 +0100
Message-ID<t6bgd-3A1-13@gated-at.bofh.it>
In reply to#1571925
On Wed, 1 Feb 2017 20:47:06 +0100 Helge Deller <deller@gmx.de> wrote:

> Hi Andrew,
> 
> On 01.02.2017 01:26, Andrew Morton wrote:
> > On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@gmx.de> wrote:
> > 
> >> The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
> >> implemented for PowerPC only.
> >> This trivial patch adds support for this syscall for all other architectures.
> > 
> > Seems reasonable.  I guess.
> 
> Heck, I did forgot but I submitted a similar patch 8 years ago:
> http://www.serverphorums.com/read.php?12,51902
> 
> > Why is this needed?
> 
> It's not actually needed beside the trivial reason of providing an interface
> not just for one single architecture.
> 
> After reading the discussion from 2009 again, I'm fine if 
> you would simply drop the patch. The decision up to you.

Can't decide.  I guess that moving it into the kernel will, over time,
eliminate some irritating ifdefs from userspace code.

The implementation itself is a bit half-assed.  The put_user() in
arch/powerpc/kernel/process.c:get_endian() should be moved into
kernel/sys.c.  So the arch code only does the "what endianness am I"
function and common code copies that out to userspace.

[toc] | [prev] | [next] | [standalone]


#1572042

FromJames Bottomley <James.Bottomley@HansenPartnership.com>
Date2017-02-02 00:20 +0100
Message-ID<t6clX-4e8-1@gated-at.bofh.it>
In reply to#1571217
On Tue, 2017-01-31 at 16:26 -0800, Andrew Morton wrote:
> On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@gmx.de>
> wrote:
> 
> > The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
> > implemented for PowerPC only. This trivial patch adds support for 
> > this syscall for all other architectures.
> 
> Seems reasonable.  I guess.  Why is this needed?

I don't think it is other than for PPC.  If you're not variable endian
(which is only PPC to date), then you should know a priori what endian
you are from the #defines in userspace.

James

[toc] | [prev] | [next] | [standalone]


#1572146

FromAndy Lutomirski <luto@kernel.org>
Date2017-02-02 06:10 +0100
Message-ID<t6hOF-7HV-3@gated-at.bofh.it>
In reply to#1572042
On Wed, Feb 1, 2017 at 3:12 PM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Tue, 2017-01-31 at 16:26 -0800, Andrew Morton wrote:
>> On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@gmx.de>
>> wrote:
>>
>> > The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
>> > implemented for PowerPC only. This trivial patch adds support for
>> > this syscall for all other architectures.
>>
>> Seems reasonable.  I guess.  Why is this needed?
>
> I don't think it is other than for PPC.  If you're not variable endian
> (which is only PPC to date), then you should know a priori what endian
> you are from the #defines in userspace.

I find it vaguely odd even on PPC.  Surely you can tell what your
endianness is directly.  (An API to query the endianness of another
task would be useful, though.)

[toc] | [prev] | [next] | [standalone]


#1573875

FromMatt Turner <mattst88@gmail.com>
Date2017-02-05 12:50 +0100
Message-ID<t7tup-6OR-3@gated-at.bofh.it>
In reply to#1572042
On Thu, Feb 2, 2017 at 12:12 AM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Tue, 2017-01-31 at 16:26 -0800, Andrew Morton wrote:
>> On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@gmx.de>
>> wrote:
>>
>> > The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
>> > implemented for PowerPC only. This trivial patch adds support for
>> > this syscall for all other architectures.
>>
>> Seems reasonable.  I guess.  Why is this needed?
>
> I don't think it is other than for PPC.  If you're not variable endian
> (which is only PPC to date), then you should know a priori what endian
> you are from the #defines in userspace.

MIPS as well, but it seems strange to require the kernel to tell you
your endianness, when you can easily determine it yourself. Unless
there's something about this I don't understand.

[toc] | [prev] | [next] | [standalone]


#1573877

From"Maciej W. Rozycki" <macro@linux-mips.org>
Date2017-02-05 14:20 +0100
Message-ID<t7uTv-7PU-1@gated-at.bofh.it>
In reply to#1573875
On Sun, 5 Feb 2017, Matt Turner wrote:

> > I don't think it is other than for PPC.  If you're not variable endian
> > (which is only PPC to date), then you should know a priori what endian
> > you are from the #defines in userspace.
> 
> MIPS as well, but it seems strange to require the kernel to tell you
> your endianness, when you can easily determine it yourself. Unless
> there's something about this I don't understand.

 Many MIPS processors do have a reverse-endian control bit, which allows a 
user process to execute in the endianness opposite to the endianness the 
kernel runs in.  The feature has been around since 1991 and the R4000 CPU, 
however support is unlikely to be ever added to the MIPS/Linux port, due 
to the complexity required for byte-swapping all the data structures 
passed in memory between the kernel and the userland.  Does the PPC/Linux 
port actually implement this swapping?

  Maciej

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web