This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

[gomp4] Another affinity-1.c testcase fix


Hi!

As reported by Vincenzo, the testcase didn't try to verify affinity behavior
if _SC_NPROCESSORS_CONF returned value was smaller than kernel's internal
mask size (e.g. because of CPU hotplug support).  Fixed thusly:

2013-10-08  Jakub Jelinek  <jakub@redhat.com>

	* testsuite/libgomp.c/affinity-1.c (min_cpusetsize): New variable.
	(pthread_getaffinity_np): Set it when setting contig_cpucount.
	(print_affinity): Use it for size, only use sysconf value if that is not
	set and if it is smaller than sizeof (cpu_set_t), use sizeof (cpu_set_t).

--- libgomp/testsuite/libgomp.c/affinity-1.c.jj	2013-10-07 14:09:52.000000000 +0200
+++ libgomp/testsuite/libgomp.c/affinity-1.c	2013-10-08 09:10:26.439380189 +0200
@@ -65,6 +65,7 @@ struct places
 };
 
 unsigned long contig_cpucount;
+unsigned long min_cpusetsize;
 
 #if defined (HAVE_PTHREAD_AFFINITY_NP) && defined (_SC_NPROCESSORS_CONF) \
     && defined (CPU_ALLOC_SIZE)
@@ -94,6 +95,7 @@ pthread_getaffinity_np (pthread_t thread
 	if (!CPU_ISSET_S (i, cpusetsize, cpuset))
 	  break;
       contig_cpucount = i;
+      min_cpusetsize = cpusetsize;
     }
   return ret;
 }
@@ -105,8 +107,15 @@ print_affinity (struct place p)
   static unsigned long size;
   if (size == 0)
     {
-      size = sysconf (_SC_NPROCESSORS_CONF);
-      size = CPU_ALLOC_SIZE (size);
+      if (min_cpusetsize)
+	size = min_cpusetsize;
+      else
+	{
+	  size = sysconf (_SC_NPROCESSORS_CONF);
+	  size = CPU_ALLOC_SIZE (size);
+	  if (size < sizeof (cpu_set_t))
+	    size = sizeof (cpu_set_t);
+	}
     }
   cpu_set_t *cpusetp = (cpu_set_t *) alloca (size);
   if (pthread_getaffinity_np (pthread_self (), size, cpusetp) == 0)

	Jakub


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