/*****************************************************************************\ * src/plugins/task/affinity/schedutils.c - scheduling utilities ***************************************************************************** * Routines in this file are taken from the taskset utility (schedutils pkg) * Copyright (C) 2004 Robert Love * * This file is part of Slurm, a resource management program. * For details, see . * Please also read the included file: DISCLAIMER. * * Slurm is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * In addition, as a special exception, the copyright holders give permission * to link the code of portions of this program with the OpenSSL library under * certain conditions as described in each individual source file, and * distribute linked combinations including the two. You must obey the GNU * General Public License in all respects for all of the code used other than * OpenSSL. If you modify file(s) with this exception, you may extend this * exception to your version of the file(s), but you are not obligated to do * so. If you do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source files in * the program, then also delete it here. * * Slurm is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along * with Slurm; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. \*****************************************************************************/ #define _GNU_SOURCE #include #include "affinity.h" /* * taskset.c - taskset * Command-line utility for setting and retrieving a task's CPU affinity * * Robert Love 25 April 2002 * * Linux kernels as of 2.5.8 provide the needed syscalls for * working with a task's cpu affinity. Currently 2.4 does not * support these syscalls, but patches are available at: * * http://www.kernel.org/pub/linux/kernel/people/rml/cpu-affinity/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, v2, as * published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Copyright (C) 2004 Robert Love */ int str_to_cnt(const char* str) { int len = strlen(str); const char *ptr = str + len - 1; int cnt = 0; /* skip 0x, it's all hex anyway */ if (len > 1 && !memcmp(str, "0x", 2L)) str += 2; while (ptr >= str) { char val = slurm_char_to_hex(*ptr); if (val == (char) -1) return -1; if (val & 1) cnt++; if (val & 2) cnt++; if (val & 4) cnt++; if (val & 8) cnt++; len--; ptr--; } return cnt; }