This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Use __syscall_ulong_t for __cpu_mask
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: "Carlos O'Donell" <carlos at redhat dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 1 Dec 2015 09:01:14 -0800
- Subject: Re: [PATCH] Use __syscall_ulong_t for __cpu_mask
- Authentication-results: sourceware.org; auth=none
- References: <1448909195-12575-1-git-send-email-hjl dot tools at gmail dot com> <565DC5B6 dot 8000102 at redhat dot com> <CAMe9rOo-wky+ExS_W5XmvkhauHhkyNK0cHsAQHBOh652=JsZRA at mail dot gmail dot com> <565DCFF6 dot 1080402 at redhat dot com>
On Tue, Dec 1, 2015 at 8:51 AM, Carlos O'Donell <carlos@redhat.com> wrote:
> On 12/01/2015 11:10 AM, H.J. Lu wrote:
>> On Tue, Dec 1, 2015 at 8:07 AM, Carlos O'Donell <carlos@redhat.com> wrote:
>>> On 11/30/2015 01:46 PM, H.J. Lu wrote:
>>>> Since x86-64 and x32 use the same set of sched_XXX system call
>>>> interface:
>>>>
>>>> [hjl@gnu-6 linux-stable]$ grep sched_
>>>> arch/x86/entry/syscalls/syscall_64.tbl
>>>> 24 common sched_yield sys_sched_yield
>>>> 142 common sched_setparam sys_sched_setparam
>>>> 143 common sched_getparam sys_sched_getparam
>>>> 144 common sched_setscheduler sys_sched_setscheduler
>>>> 145 common sched_getscheduler sys_sched_getscheduler
>>>> 146 common sched_get_priority_max sys_sched_get_priority_max
>>>> 147 common sched_get_priority_min sys_sched_get_priority_min
>>>> 148 common sched_rr_get_interval sys_sched_rr_get_interval
>>>> 203 common sched_setaffinity sys_sched_setaffinity
>>>> 204 common sched_getaffinity sys_sched_getaffinity
>>>> 314 common sched_setattr sys_sched_setattr
>>>> 315 common sched_getattr sys_sched_getattr
>>>> [hjl@gnu-6 linux-stable]$
>>>>
>>>> __cpu_mask should be __syscall_ulong_t.
>>>>
>>>> [BZ #19313]
>>>> * sysdeps/unix/sysv/linux/bits/sched.h (__cpu_mask): Replace
>>>> unsigned long int with __syscall_ulong_t.
>>>
>>> How did you test this?
>>
>> I tested it on x32, i686 and x86-64. Maybe we should add
>> __CPU_MASK_TYPE to bits/typesizes.h so that each
>> architecture can define it own type for __cpu_mask.
>
> The definition of __syscall_ulong_t, AFAICT, is always
> `unsigned long int`, which means the change does nothing?
That isn't true. sysdeps/unix/sysv/linux/x86/bits/typesizes.h has
/* X32 kernel interface is 64-bit. */
#if defined __x86_64__ && defined __ILP32__
# define __SYSCALL_SLONG_TYPE __SQUAD_TYPE
# define __SYSCALL_ULONG_TYPE __UQUAD_TYPE
#else
# define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
# define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
#endif
> Aren't both of these types the same size on x86_64 and
> x32?
That is correct. But long long != long on x32.
> What exactly was the failure mode you saw in bug 19313?
>
I got
FAIL: nptl/tst-thread-affinity-pthread
FAIL: nptl/tst-thread-affinity-pthread2
FAIL: nptl/tst-thread-affinity-sched
FAIL: posix/tst-affinity
FAIL: posix/tst-affinity-pid
since size 12, which isn't multiple of 8, is passed to sched_getaffinity
syscall. We got 12 since __cpu_mask is unsigned long, instead of
unsigned long long.
--
H.J.