This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Use __syscall_ulong_t for __cpu_mask


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]