Le 05/05/2019 à 20:05, Michael Kerrisk (man-pages) a écrit : > Hello Brice, > > On 5/5/19 12:19 PM, Brice Goglin wrote: >> sched_setaffinity.2: sched_getaffinity returns the number of bytes >> copied >> >> On success, it returns min(len, cpumask_size()) where len is >> the output buffer size (see the syscall definition in >> kernel/sched/core.c). >> >> Signed-off-by: Brice Goglin <Brice.Goglin@xxxxxxxx> >> --- >> man2/sched_setaffinity.2 | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/man2/sched_setaffinity.2 b/man2/sched_setaffinity.2 >> index 74bbde81c..277edd0fb 100644 >> --- a/man2/sched_setaffinity.2 >> +++ b/man2/sched_setaffinity.2 >> @@ -107,9 +107,9 @@ is zero, then the mask of the calling thread is >> returned. >> .SH RETURN VALUE >> On success, >> .BR sched_setaffinity () >> -and >> +returns 0, while >> .BR sched_getaffinity () >> -return 0. >> +returns the number of bytes copied to the destination mask. >> On error, \-1 is returned, and >> .I errno >> is set appropriately. > > Thanks for adding some detail. However, did you take a look at the > glibc wrapper, and also this text in the manual page: > > C library/kernel differences > [...] On success, the raw sched_getaffinity() system call > returns the size (in bytes) of the cpumask_t data type that is > used internally by the kernel to represent the CPU set bit mask. > > Of course, looking at your patch, it's clear that that text is no longer > fully accurate (since Linux 2.6.34, commit cd3d8031eb4311e). I've now > adjusted it to say: > > On success, the raw sched_getaffinity() system call returns the > number of bytes placed copied into the mask buffer; this will be > the minimum of cpusetsize and the size (in bytes) of the cpumask_t > data type that is used internally by the kernel to represent the > CPU set bit mask. > Oh, good point. I discovered the issue when playing with the raw syscall for ugly reasons. I didn't expect the wrapper to change that return value. Thanks for the clarification. Brice