On Tue, Apr 6, 2010 at 17:36, <bgoglin_at_[hidden]> wrote:
> Author: bgoglin
> Date: 2010-04-06 11:36:17 EDT (Tue, 06 Apr 2010)
> New Revision: 1940
> URL: https://svn.open-mpi.org/trac/hwloc/changeset/1940
>
> Log:
> Stop using HWLOC_NBMAXCPUS in Linux hwloc_linux_set/get_tid_cpubind
> Text files modified:
> Â branches/dyncpusets/src/topology-linux.c | Â Â 31 ++++++++++++++++++++++---------
> Â 1 files changed, 22 insertions(+), 9 deletions(-)
>
> Modified: branches/dyncpusets/src/topology-linux.c
> ==============================================================================
> --- branches/dyncpusets/src/topology-linux.c   (original)
> +++ branches/dyncpusets/src/topology-linux.c   2010-04-06 11:36:17 EDT (Tue, 06 Apr 2010)
> @@ -192,8 +192,6 @@
> Â #endif
> Â }
>
> -#define HWLOC_NBMAXCPUS 1024 /* FIXME: drop */
> -
> Â int
> Â hwloc_linux_set_tid_cpubind(hwloc_topology_t topology __hwloc_attribute_unused, pid_t tid, hwloc_const_cpuset_t hwloc_set)
> Â {
> @@ -205,13 +203,21 @@
>
> Â /* The resulting binding is always strict */
>
> -#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY) && CPU_SETSIZE < HWLOC_NBMAXCPUS
> +#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY)
> Â cpu_set_t *plinux_set;
> Â unsigned cpu;
> - Â size_t setsize = CPU_ALLOC_SIZE(HWLOC_NBMAXCPUS);
> + Â int last;
> + Â size_t setsize;
> Â int err;
>
> - Â plinux_set = CPU_ALLOC(HWLOC_NBMAXCPUS);
> + Â last = hwloc_cpuset_last(hwloc_set);
> + Â if (last == -1) {
> + Â Â errno = -EINVAL;
> + Â Â return -1;
> + Â }
> +
> + Â setsize = CPU_ALLOC_SIZE(last+1);
> + Â plinux_set = CPU_ALLOC(last+1);
>
> Â CPU_ZERO_S(setsize, plinux_set);
> Â hwloc_cpuset_foreach_begin(cpu, hwloc_set)
> @@ -253,12 +259,17 @@
> Â int err;
> Â /* TODO Kerrighed */
>
> -#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY) && CPU_SETSIZE < HWLOC_NBMAXCPUS
> +#if defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY)
> Â cpu_set_t *plinux_set;
> Â unsigned cpu;
> - Â size_t setsize = CPU_ALLOC_SIZE(HWLOC_NBMAXCPUS);
> + Â int last;
> + Â size_t setsize;
> +
> + Â last = hwloc_cpuset_last(topology->levels[0][0]->complete_cpuset);
> + Â assert(last != -1);
>
> - Â plinux_set = CPU_ALLOC(HWLOC_NBMAXCPUS);
> + Â setsize = CPU_ALLOC_SIZE(last+1);
> + Â plinux_set = CPU_ALLOC(last+1);
>
> Â err = sched_getaffinity(tid, setsize, plinux_set);
>
> @@ -268,7 +279,7 @@
> Â }
>
> Â hwloc_cpuset_zero(hwloc_set);
> - Â for(cpu=0; cpu<HWLOC_NBMAXCPUS; cpu++)
> + Â for(cpu=0; cpu<last; cpu++)
Shouldn't this be "cpu<=last"?
Bert
|