From afa5b3666ba4c3e9133d6f6fd771e468ebee61f8 Mon Sep 17 00:00:00 2001 From: Ivana Varekova Date: Wed, 2 Dec 2009 14:42:05 +0000 Subject: [PATCH] - fix sched_setaffinity(2) page - add an EXAMPLE and new NOTES --- man-pages-3.22-sched_setaffinity.patch | 64 ++++++++++++++++++++++++++ man-pages.spec | 7 ++- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 man-pages-3.22-sched_setaffinity.patch diff --git a/man-pages-3.22-sched_setaffinity.patch b/man-pages-3.22-sched_setaffinity.patch new file mode 100644 index 0000000..4cfb49b --- /dev/null +++ b/man-pages-3.22-sched_setaffinity.patch @@ -0,0 +1,64 @@ +diff -up man-pages-3.22/man2/sched_setaffinity.2.orig man-pages-3.22/man2/sched_setaffinity.2 +--- man-pages-3.22/man2/sched_setaffinity.2.orig 2009-07-25 08:53:26.000000000 +0200 ++++ man-pages-3.22/man2/sched_setaffinity.2 2009-12-02 15:29:17.000000000 +0100 +@@ -212,6 +212,60 @@ system call returns the size (in bytes) + .I cpumask_t + data type that is used internally by the kernel to + represent the CPU set bit mask. ++ ++The \fBcpu_set_t\fR affinity mask size provided by glibc only allows for upto ++1024 CPUs. It is possible to build Linux kernels with greater than 1024 ++CPUs. Any application using the statically sized \fBcpu_set_t\fR will fail ++with \fBEINVAL\fR on such kernels. It is thus recommended that applications ++avoid using the statically sized \fBcpu_set_t\fR type, and instead dynamically ++allocate a mask using the CPU_*_S macros described in the \fBCPU_SET(3)\fR man ++page. Since it is not possible to determine ahead of time what \fBNR_CPUS\fR ++value the kernel was built with, applications must be prepared to catch ++\fBEINVAL\fR, and retry the command with a larger dynamically allocated mask. ++The example that follows illustrates portable usage. ++ ++.SH EXAMPLE ++.nf ++ #define _GNU_SOURCE ++ ++ #include ++ #include ++ #include ++ ++ int main(void) ++ { ++ cpu_set_t *mask; ++ size_t size; ++ int i; ++ int nrcpus = 1024; ++ ++realloc: ++ mask = CPU_ALLOC(nrcpus); ++ size = CPU_ALLOC_SIZE(nrcpus); ++ CPU_ZERO_S(size, mask); ++ if ( sched_getaffinity(0, size, mask) == -1 ) { ++ CPU_FREE(mask); ++ if (errno == EINVAL && ++ nrcpus < (1024 << 8)) { ++ nrcpus = nrcpus << 2; ++ goto realloc; ++ } ++ perror("sched_getaffinity"); ++ return -1; ++ } ++ ++ for ( i = 0; i < nrcpus; i++ ) { ++ if ( CPU_ISSET_S(i, size, mask) ) { ++ printf("CPU %d is set\n", (i+1)); ++ } ++ } ++ ++ CPU_FREE(mask); ++ ++ return 0; ++ } ++.fi ++ + .SH "SEE ALSO" + .BR clone (2), + .BR getcpu (2), diff --git a/man-pages.spec b/man-pages.spec index e4f9b0e..534af1b 100644 --- a/man-pages.spec +++ b/man-pages.spec @@ -4,7 +4,7 @@ Summary: Man (manual) pages from the Linux Documentation Project Name: man-pages Version: 3.23 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2+ and GPL+ and BSD and MIT and Copyright only and IEEE Group: Documentation URL: http://www.kernel.org/pub/linux/docs/manpages/ @@ -33,6 +33,7 @@ Patch56: man-pages-3.22-strcpy.patch Patch57: man-pages-3.22-nsswitch.conf.patch Patch58: man-pages-3.23-proc.patch Patch59: man-pages-3.23-ld.so.patch +Patch60: man-pages-3.22-sched_setaffinity.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Autoreq: false @@ -64,6 +65,7 @@ rmdir man-pages-posix-%{posix_version}-%{posix_release} %patch57 -p1 %patch58 -p1 %patch59 -p1 +%patch60 -p1 ### And now remove those we are not going to use: @@ -134,6 +136,9 @@ rm -rf $RPM_BUILD_ROOT %lang(en) %{_mandir}/en/man* %changelog +* Wed Dec 2 2009 Ivana Hutarova Varekova - 3.22-7 +- fix sched_setaffinity(2) page - add an EXAMPLE and new NOTES + * Wed Nov 18 2009 Ivana Varekova - 3.23-2 - fix ld.so man-page (#532629)