linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 0/8] Update kernel uabi header files for x32
       [not found] ` <20131228163308.GA1638@infradead.org>
@ 2014-01-20 17:46   ` H. Peter Anvin
  2014-01-20 17:50     ` Christoph Hellwig
  2014-01-21 12:04     ` Catalin Marinas
  0 siblings, 2 replies; 13+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:46 UTC (permalink / raw)
  To: Christoph Hellwig, H.J. Lu, linux-arch
  Cc: LKML, Linus Torvalds, Ralf Baechle, Catalin Marinas, Will Deacon

On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
> On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
>> X32 uses the same kernel system call interface as x86-64 for many
>> system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
>> x32.  Where long or unsigned long are used in struct types for such
>> system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
>> long for all ABIs other than x32.  I am submitting 8 patches to replace
>> long or unsigned long with __kernel_[u]long_t so that those struct types
>> can be used with x32 system calls.
> 
> Independent on how this fixes things, how does the kernel_long_t name
> here make any sense?
> 
> On x86-64 "kernel" long always is 64 bits wide.  The userspace ABI long
> might be 32 or 64bits wide.
> 
> Currently kernel_long_t has almost no uses, so it might be a good time
> to fix the name, define the rules for it, and last but not least
> properly document the intent for thse types.
> 

This comment by Christoph was literally the only feedback on this
patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
for the native kernel for the ABI".  H.J.'s patchset only affects x86
(specifically x86-64) since on all other platforms __kernel_[u]long_t is
simply defined as long/unsigned long.

That being said, x32 is not the only ABI of this type.  In particular,
if the MIPS N32 and ARM64 ILP32 maintainers have suggestions which would
make this work more applicable to them, it would be highly useful to
receive any such feedback.

	-hpa

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:46   ` [PATCH 0/8] Update kernel uabi header files for x32 H. Peter Anvin
@ 2014-01-20 17:50     ` Christoph Hellwig
  2014-01-20 17:51       ` H.J. Lu
  2014-01-20 17:52       ` H. Peter Anvin
  2014-01-21 12:04     ` Catalin Marinas
  1 sibling, 2 replies; 13+ messages in thread
From: Christoph Hellwig @ 2014-01-20 17:50 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Christoph Hellwig, H.J. Lu, linux-arch, LKML, Linus Torvalds,
	Ralf Baechle, Catalin Marinas, Will Deacon

On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
> This comment by Christoph was literally the only feedback on this
> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
> for the native kernel for the ABI".  H.J.'s patchset only affects x86
> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
> simply defined as long/unsigned long.

Btw, sorry for the delay in getting back yo your question.  How about
__abi_long_t or __kabi_long_t instead?

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:50     ` Christoph Hellwig
@ 2014-01-20 17:51       ` H.J. Lu
  2014-01-20 17:52         ` H.J. Lu
  2014-01-20 17:52         ` H. Peter Anvin
  2014-01-20 17:52       ` H. Peter Anvin
  1 sibling, 2 replies; 13+ messages in thread
From: H.J. Lu @ 2014-01-20 17:51 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: H. Peter Anvin, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
	Catalin Marinas, Will Deacon

On Mon, Jan 20, 2014 at 9:50 AM, Christoph Hellwig <hch@infradead.org> wrote:
> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>> This comment by Christoph was literally the only feedback on this
>> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
>> for the native kernel for the ABI".  H.J.'s patchset only affects x86
>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>> simply defined as long/unsigned long.
>
> Btw, sorry for the delay in getting back yo your question.  How about
> __abi_long_t or __kabi_long_t instead?
>

FWIW, in glibc, we use __syscall_ulong_t/__syscall_ulong_t instead of
__kernel_[u]long_t.


-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:50     ` Christoph Hellwig
  2014-01-20 17:51       ` H.J. Lu
@ 2014-01-20 17:52       ` H. Peter Anvin
  2014-01-20 17:52         ` H. Peter Anvin
  1 sibling, 1 reply; 13+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:52 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: H.J. Lu, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
	Catalin Marinas, Will Deacon

On 01/20/2014 09:50 AM, Christoph Hellwig wrote:
> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>> This comment by Christoph was literally the only feedback on this
>> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
>> for the native kernel for the ABI".  H.J.'s patchset only affects x86
>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>> simply defined as long/unsigned long.
> 
> Btw, sorry for the delay in getting back yo your question.  How about
> __abi_long_t or __kabi_long_t instead?
> 

__kernel_* is the namespace that we reserve for uabi symbols/types in
user space.  Changing the prefix would break that contract.

	-hpa

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:52       ` H. Peter Anvin
@ 2014-01-20 17:52         ` H. Peter Anvin
  0 siblings, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:52 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: H.J. Lu, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
	Catalin Marinas, Will Deacon

On 01/20/2014 09:50 AM, Christoph Hellwig wrote:
> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>> This comment by Christoph was literally the only feedback on this
>> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
>> for the native kernel for the ABI".  H.J.'s patchset only affects x86
>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>> simply defined as long/unsigned long.
> 
> Btw, sorry for the delay in getting back yo your question.  How about
> __abi_long_t or __kabi_long_t instead?
> 

__kernel_* is the namespace that we reserve for uabi symbols/types in
user space.  Changing the prefix would break that contract.

	-hpa


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:51       ` H.J. Lu
@ 2014-01-20 17:52         ` H.J. Lu
  2014-01-20 17:52         ` H. Peter Anvin
  1 sibling, 0 replies; 13+ messages in thread
From: H.J. Lu @ 2014-01-20 17:52 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: H. Peter Anvin, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
	Catalin Marinas, Will Deacon

On Mon, Jan 20, 2014 at 9:51 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Jan 20, 2014 at 9:50 AM, Christoph Hellwig <hch@infradead.org> wrote:
>> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>>> This comment by Christoph was literally the only feedback on this
>>> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
>>> for the native kernel for the ABI".  H.J.'s patchset only affects x86
>>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>>> simply defined as long/unsigned long.
>>
>> Btw, sorry for the delay in getting back yo your question.  How about
>> __abi_long_t or __kabi_long_t instead?
>>
>
> FWIW, in glibc, we use __syscall_ulong_t/__syscall_ulong_t instead of

It should be __syscall_ulong_t/__syscall_slong_t.

> __kernel_[u]long_t.




-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:51       ` H.J. Lu
  2014-01-20 17:52         ` H.J. Lu
@ 2014-01-20 17:52         ` H. Peter Anvin
  1 sibling, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:52 UTC (permalink / raw)
  To: H.J. Lu, Christoph Hellwig
  Cc: linux-arch, LKML, Linus Torvalds, Ralf Baechle, Catalin Marinas,
	Will Deacon

On 01/20/2014 09:51 AM, H.J. Lu wrote:
> On Mon, Jan 20, 2014 at 9:50 AM, Christoph Hellwig <hch@infradead.org> wrote:
>> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>>> This comment by Christoph was literally the only feedback on this
>>> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
>>> for the native kernel for the ABI".  H.J.'s patchset only affects x86
>>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>>> simply defined as long/unsigned long.
>>
>> Btw, sorry for the delay in getting back yo your question.  How about
>> __abi_long_t or __kabi_long_t instead?
>>
> 
> FWIW, in glibc, we use __syscall_ulong_t/__syscall_ulong_t instead of
> __kernel_[u]long_t.
> 

Yes, but glibc defines its own headers and doesn't rely on the types
exported from the kernel.

We could rename them all, but that would *definitely* seem like breaking
the universe for no good reason.

	-hpa

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-20 17:46   ` [PATCH 0/8] Update kernel uabi header files for x32 H. Peter Anvin
  2014-01-20 17:50     ` Christoph Hellwig
@ 2014-01-21 12:04     ` Catalin Marinas
  2014-01-21 12:22       ` H.J. Lu
  2014-01-21 15:43       ` H. Peter Anvin
  1 sibling, 2 replies; 13+ messages in thread
From: Catalin Marinas @ 2014-01-21 12:04 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Christoph Hellwig, H.J. Lu, linux-arch, LKML, Linus Torvalds,
	Ralf Baechle, Will Deacon

On Mon, Jan 20, 2014 at 05:46:41PM +0000, H. Peter Anvin wrote:
> On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
> > On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
> >> X32 uses the same kernel system call interface as x86-64 for many
> >> system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
> >> x32.  Where long or unsigned long are used in struct types for such
> >> system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
> >> long for all ABIs other than x32.  I am submitting 8 patches to replace
> >> long or unsigned long with __kernel_[u]long_t so that those struct types
> >> can be used with x32 system calls.

Does this mean that you are changing the x32 ABI (or it hasn't been
declared stable yet)?

> This comment by Christoph was literally the only feedback on this
> patchset.  The definition of __kernel_[u]long_t is "the size of 'long'
> for the native kernel for the ABI".  H.J.'s patchset only affects x86
> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
> simply defined as long/unsigned long.
> 
> That being said, x32 is not the only ABI of this type.  In particular,
> if the MIPS N32 and ARM64 ILP32 maintainers have suggestions which would
> make this work more applicable to them, it would be highly useful to
> receive any such feedback.

ILP32 for arm64 is still work in progress and subject to change. So far
the preliminary ABI
(http://git.kernel.org/cgit/linux/kernel/git/cmarinas/linux-aarch64.git/log/?h=ilp32)
redefines kernel_(u)long_t is defined as (unsigned) long long. Most of
the syscalls are 64-bit generic with ~23 routed to compat. I would like
to simplify these further and even use native 64-bit signal handling but
it requires some changes to generic structures.

I'll have a look at H.J.'s patches and give comments, they may come in
handy.

-- 
Catalin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-21 12:04     ` Catalin Marinas
@ 2014-01-21 12:22       ` H.J. Lu
  2014-01-21 12:22         ` H.J. Lu
  2014-01-21 15:43       ` H. Peter Anvin
  1 sibling, 1 reply; 13+ messages in thread
From: H.J. Lu @ 2014-01-21 12:22 UTC (permalink / raw)
  To: Catalin Marinas
  Cc: H. Peter Anvin, Christoph Hellwig, linux-arch, LKML,
	Linus Torvalds, Ralf Baechle, Will Deacon

On Tue, Jan 21, 2014 at 4:04 AM, Catalin Marinas
<catalin.marinas@arm.com> wrote:
> On Mon, Jan 20, 2014 at 05:46:41PM +0000, H. Peter Anvin wrote:
>> On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
>> > On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
>> >> X32 uses the same kernel system call interface as x86-64 for many
>> >> system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
>> >> x32.  Where long or unsigned long are used in struct types for such
>> >> system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
>> >> long for all ABIs other than x32.  I am submitting 8 patches to replace
>> >> long or unsigned long with __kernel_[u]long_t so that those struct types
>> >> can be used with x32 system calls.
>
> Does this mean that you are changing the x32 ABI (or it hasn't been
> declared stable yet)?

We don't change x32 ABI.  Today kernel uabi header files are
incompatible with x32 ABI in user space.  My patches fix them
so that they can be used in user space.

-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-21 12:22       ` H.J. Lu
@ 2014-01-21 12:22         ` H.J. Lu
  0 siblings, 0 replies; 13+ messages in thread
From: H.J. Lu @ 2014-01-21 12:22 UTC (permalink / raw)
  To: Catalin Marinas
  Cc: H. Peter Anvin, Christoph Hellwig, linux-arch, LKML,
	Linus Torvalds, Ralf Baechle, Will Deacon

On Tue, Jan 21, 2014 at 4:04 AM, Catalin Marinas
<catalin.marinas@arm.com> wrote:
> On Mon, Jan 20, 2014 at 05:46:41PM +0000, H. Peter Anvin wrote:
>> On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
>> > On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
>> >> X32 uses the same kernel system call interface as x86-64 for many
>> >> system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
>> >> x32.  Where long or unsigned long are used in struct types for such
>> >> system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
>> >> long for all ABIs other than x32.  I am submitting 8 patches to replace
>> >> long or unsigned long with __kernel_[u]long_t so that those struct types
>> >> can be used with x32 system calls.
>
> Does this mean that you are changing the x32 ABI (or it hasn't been
> declared stable yet)?

We don't change x32 ABI.  Today kernel uabi header files are
incompatible with x32 ABI in user space.  My patches fix them
so that they can be used in user space.

-- 
H.J.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-21 12:04     ` Catalin Marinas
  2014-01-21 12:22       ` H.J. Lu
@ 2014-01-21 15:43       ` H. Peter Anvin
  1 sibling, 0 replies; 13+ messages in thread
From: H. Peter Anvin @ 2014-01-21 15:43 UTC (permalink / raw)
  To: Catalin Marinas
  Cc: Christoph Hellwig, H.J. Lu, linux-arch, LKML, Linus Torvalds,
	Ralf Baechle, Will Deacon

On 01/21/2014 04:04 AM, Catalin Marinas wrote:
> 
> ILP32 for arm64 is still work in progress and subject to change. So far
> the preliminary ABI
> (http://git.kernel.org/cgit/linux/kernel/git/cmarinas/linux-aarch64.git/log/?h=ilp32)
> redefines kernel_(u)long_t is defined as (unsigned) long long. Most of
> the syscalls are 64-bit generic with ~23 routed to compat. I would like
> to simplify these further and even use native 64-bit signal handling but
> it requires some changes to generic structures.
> 

That would be highly useful feedback.

	-hpa

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
       [not found] <1388182464-28428-1-git-send-email-hjl.tools@gmail.com>
       [not found] ` <20131228163308.GA1638@infradead.org>
@ 2014-01-21 17:06 ` H. Peter Anvin
  2014-01-22 15:10   ` Catalin Marinas
  1 sibling, 1 reply; 13+ messages in thread
From: H. Peter Anvin @ 2014-01-21 17:06 UTC (permalink / raw)
  To: H.J. Lu, LKML
  Cc: linux-arch, Christoph Hellwig, Ralf Baechle, Will Deacon,
	Catalin Marinas, Linus Torvalds

On 12/27/2013 02:14 PM, H.J. Lu wrote:
> X32 uses the same kernel system call interface as x86-64 for many
> system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
> x32.  Where long or unsigned long are used in struct types for such
> system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
> long for all ABIs other than x32.  I am submitting 8 patches to replace
> long or unsigned long with __kernel_[u]long_t so that those struct types
> can be used with x32 system calls.
> 
> H.J. Lu (8):
>   Use __kernel_long_t in struct timex
>   Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h>
>   Use __kernel_ulong_t in uapi struct ipc64_perm
>   Use __kernel_long_t in struct msgbuf
>   Use __kernel_ulong_t in struct msqid64_ds
>   Use __kernel_ulong_t in x86 struct semid64_ds
>   Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info
>   Use __kernel_long_t in struct mq_attr
> 

As Catalin indirectly pointed out, I had made a followup to the wrong
version of the patchset (because I commented to Christoph's feedback.)
This is threaded to the proper version (without unnecessary #if
__BITS_PER_LONG.)

	-hpa

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/8] Update kernel uabi header files for x32
  2014-01-21 17:06 ` H. Peter Anvin
@ 2014-01-22 15:10   ` Catalin Marinas
  0 siblings, 0 replies; 13+ messages in thread
From: Catalin Marinas @ 2014-01-22 15:10 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: H.J. Lu, LKML, linux-arch, Christoph Hellwig, Ralf Baechle,
	Will Deacon, Linus Torvalds

On Tue, Jan 21, 2014 at 09:06:59AM -0800, H. Peter Anvin wrote:
> On 12/27/2013 02:14 PM, H.J. Lu wrote:
> > X32 uses the same kernel system call interface as x86-64 for many
> > system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
> > x32.  Where long or unsigned long are used in struct types for such
> > system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
> > long for all ABIs other than x32.  I am submitting 8 patches to replace
> > long or unsigned long with __kernel_[u]long_t so that those struct types
> > can be used with x32 system calls.
> > 
> > H.J. Lu (8):
> >   Use __kernel_long_t in struct timex
> >   Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h>
> >   Use __kernel_ulong_t in uapi struct ipc64_perm
> >   Use __kernel_long_t in struct msgbuf
> >   Use __kernel_ulong_t in struct msqid64_ds
> >   Use __kernel_ulong_t in x86 struct semid64_ds
> >   Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info
> >   Use __kernel_long_t in struct mq_attr
> > 
> 
> As Catalin indirectly pointed out, I had made a followup to the wrong
> version of the patchset (because I commented to Christoph's feedback.)
> This is threaded to the proper version (without unnecessary #if
> __BITS_PER_LONG.)

From an arm64 ILP32 perspective (though still work in progress), the
patches look fine. We'll continue the trend with similar changes to
generic semid64_ds.

In case the series is not committed yet:

Acked-by: Catalin Marinas <catalin.marinas@arm.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-01-22 15:03 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1388182464-28428-1-git-send-email-hjl.tools@gmail.com>
     [not found] ` <20131228163308.GA1638@infradead.org>
2014-01-20 17:46   ` [PATCH 0/8] Update kernel uabi header files for x32 H. Peter Anvin
2014-01-20 17:50     ` Christoph Hellwig
2014-01-20 17:51       ` H.J. Lu
2014-01-20 17:52         ` H.J. Lu
2014-01-20 17:52         ` H. Peter Anvin
2014-01-20 17:52       ` H. Peter Anvin
2014-01-20 17:52         ` H. Peter Anvin
2014-01-21 12:04     ` Catalin Marinas
2014-01-21 12:22       ` H.J. Lu
2014-01-21 12:22         ` H.J. Lu
2014-01-21 15:43       ` H. Peter Anvin
2014-01-21 17:06 ` H. Peter Anvin
2014-01-22 15:10   ` Catalin Marinas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).