summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Affinity.c36
-rw-r--r--AffinityPanel.c23
-rw-r--r--AffinityPanel.h7
-rw-r--r--DebugMemory.c1
-rw-r--r--DebugMemory.h1
-rw-r--r--Makefile.am18
-rw-r--r--Meter.h1
-rw-r--r--Process.c41
-rw-r--r--Process.h12
-rw-r--r--ProcessList.c14
-rw-r--r--ProcessList.h4
-rw-r--r--String.h1
-rw-r--r--TraceScreen.c2
-rw-r--r--TraceScreen.h2
-rw-r--r--acinclude.m43
-rw-r--r--configure.ac26
-rw-r--r--htop.c25
-rw-r--r--hwloc-1.2.1/AUTHORS8
-rw-r--r--hwloc-1.2.1/COPYING27
-rw-r--r--hwloc-1.2.1/Makefile.am27
-rw-r--r--hwloc-1.2.1/Makefile.in611
-rw-r--r--hwloc-1.2.1/NEWS361
-rw-r--r--hwloc-1.2.1/README688
-rw-r--r--hwloc-1.2.1/VERSION61
-rw-r--r--hwloc-1.2.1/aclocal.m41040
-rwxr-xr-xhwloc-1.2.1/config/compile143
-rwxr-xr-xhwloc-1.2.1/config/config.guess1501
-rwxr-xr-xhwloc-1.2.1/config/config.sub1705
-rwxr-xr-xhwloc-1.2.1/config/depcomp630
-rwxr-xr-xhwloc-1.2.1/config/distscript.csh240
-rw-r--r--hwloc-1.2.1/config/hwloc.m4707
-rw-r--r--hwloc-1.2.1/config/hwloc_check_attributes.m4533
-rw-r--r--hwloc-1.2.1/config/hwloc_check_visibility.m4122
-rwxr-xr-xhwloc-1.2.1/config/hwloc_get_version.sh173
-rw-r--r--hwloc-1.2.1/config/hwloc_internal.m4408
-rw-r--r--hwloc-1.2.1/config/hwloc_pkg.m4187
-rwxr-xr-xhwloc-1.2.1/config/install-sh520
-rw-r--r--hwloc-1.2.1/config/libtool.m47831
-rwxr-xr-xhwloc-1.2.1/config/ltmain.sh9636
-rw-r--r--hwloc-1.2.1/config/ltoptions.m4369
-rw-r--r--hwloc-1.2.1/config/ltsugar.m4123
-rw-r--r--hwloc-1.2.1/config/ltversion.m423
-rw-r--r--hwloc-1.2.1/config/lt~obsolete.m498
-rwxr-xr-xhwloc-1.2.1/config/missing376
-rwxr-xr-xhwloc-1.2.1/configure22809
-rw-r--r--hwloc-1.2.1/configure.ac156
-rw-r--r--hwloc-1.2.1/hwloc.pc.in12
-rw-r--r--hwloc-1.2.1/include/Makefile.am40
-rw-r--r--hwloc-1.2.1/include/Makefile.in566
-rw-r--r--hwloc-1.2.1/include/hwloc.h1707
-rw-r--r--hwloc-1.2.1/include/hwloc/autogen/config.h137
-rw-r--r--hwloc-1.2.1/include/hwloc/autogen/config.h.in136
-rw-r--r--hwloc-1.2.1/include/hwloc/autogen/stamp-h31
-rw-r--r--hwloc-1.2.1/include/hwloc/bitmap.h335
-rw-r--r--hwloc-1.2.1/include/hwloc/cpuset.h75
-rw-r--r--hwloc-1.2.1/include/hwloc/cuda.h90
-rw-r--r--hwloc-1.2.1/include/hwloc/cudart.h84
-rw-r--r--hwloc-1.2.1/include/hwloc/glibc-sched.h119
-rw-r--r--hwloc-1.2.1/include/hwloc/helper.h1083
-rw-r--r--hwloc-1.2.1/include/hwloc/linux-libnuma.h462
-rw-r--r--hwloc-1.2.1/include/hwloc/linux.h64
-rw-r--r--hwloc-1.2.1/include/hwloc/myriexpress.h107
-rw-r--r--hwloc-1.2.1/include/hwloc/openfabrics-verbs.h81
-rw-r--r--hwloc-1.2.1/include/hwloc/rename.h513
-rw-r--r--hwloc-1.2.1/include/private/autogen/config.h589
-rw-r--r--hwloc-1.2.1/include/private/autogen/config.h.in588
-rw-r--r--hwloc-1.2.1/include/private/autogen/stamp-h21
-rw-r--r--hwloc-1.2.1/include/private/cpuid.h72
-rw-r--r--hwloc-1.2.1/include/private/debug.h54
-rw-r--r--hwloc-1.2.1/include/private/misc.h331
-rw-r--r--hwloc-1.2.1/include/private/private.h343
-rw-r--r--hwloc-1.2.1/src/Makefile.am118
-rw-r--r--hwloc-1.2.1/src/Makefile.in702
-rw-r--r--hwloc-1.2.1/src/bind.c552
-rw-r--r--hwloc-1.2.1/src/cpuset.c1267
-rw-r--r--hwloc-1.2.1/src/distances.c719
-rw-r--r--hwloc-1.2.1/src/dolib.c37
-rw-r--r--hwloc-1.2.1/src/hwloc.dtd37
-rw-r--r--hwloc-1.2.1/src/misc.c100
-rw-r--r--hwloc-1.2.1/src/topology-aix.c602
-rw-r--r--hwloc-1.2.1/src/topology-darwin.c216
-rw-r--r--hwloc-1.2.1/src/topology-freebsd.c201
-rw-r--r--hwloc-1.2.1/src/topology-hpux.c262
-rw-r--r--hwloc-1.2.1/src/topology-linux.c2949
-rw-r--r--hwloc-1.2.1/src/topology-osf.c343
-rw-r--r--hwloc-1.2.1/src/topology-solaris.c667
-rw-r--r--hwloc-1.2.1/src/topology-synthetic.c335
-rw-r--r--hwloc-1.2.1/src/topology-windows.c706
-rw-r--r--hwloc-1.2.1/src/topology-x86.c535
-rw-r--r--hwloc-1.2.1/src/topology-xml.c700
-rw-r--r--hwloc-1.2.1/src/topology.c2468
-rw-r--r--hwloc-1.2.1/src/traversal.c350
-rw-r--r--plpa-1.3.2/AUTHORS13
-rw-r--r--plpa-1.3.2/LICENSE57
-rw-r--r--plpa-1.3.2/Makefile.am17
-rw-r--r--plpa-1.3.2/NEWS148
-rw-r--r--plpa-1.3.2/README659
-rw-r--r--plpa-1.3.2/VERSION52
-rw-r--r--plpa-1.3.2/plpa.m4364
-rw-r--r--plpa-1.3.2/src/Makefile.am15
-rw-r--r--plpa-1.3.2/src/libplpa/Makefile.am36
-rw-r--r--plpa-1.3.2/src/libplpa/plpa.h.in298
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_api_probe.c107
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_config.h.in118
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_dispatch.c193
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_internal.h30
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_map.c1055
-rw-r--r--plpa-1.3.2/src/libplpa/plpa_runtime.c73
108 files changed, 72722 insertions, 3299 deletions
diff --git a/Affinity.c b/Affinity.c
new file mode 100644
index 00000000..0b2bd465
--- /dev/null
+++ b/Affinity.c
@@ -0,0 +1,36 @@
+
+#include "config.h"
+#include "Affinity.h"
+#include <stdlib.h>
+
+/*{
+
+typedef struct Affinity_ {
+ int size;
+ int used;
+ int* cpus;
+} Affinity;
+
+}*/
+
+Affinity* Affinity_new() {
+ Affinity* this = calloc(sizeof(Affinity), 1);
+ this->size = 8;
+ this->cpus = calloc(sizeof(int), this->size);
+ return this;
+}
+
+void Affinity_delete(Affinity* this) {
+ free(this->cpus);
+ free(this);
+}
+
+void Affinity_add(Affinity* this, int id) {
+ if (this->used == this->size) {
+ this->size *= 2;
+ this->cpus = realloc(this->cpus, sizeof(int) * this->size);
+ }
+ this->cpus[this->used] = id;
+ this->used++;
+}
+
diff --git a/AffinityPanel.c b/AffinityPanel.c
index b3ea4123..504638e7 100644
--- a/AffinityPanel.c
+++ b/AffinityPanel.c
@@ -1,9 +1,8 @@
+#include "ProcessList.h"
#include "AffinityPanel.h"
-
#include "Panel.h"
#include "CheckItem.h"
-#include "ProcessList.h"
#include "debug.h"
#include <assert.h>
@@ -26,25 +25,33 @@ static HandlerResult AffinityPanel_eventHandler(Panel* this, int ch) {
return result;
}
-Panel* AffinityPanel_new(ProcessList* pl, unsigned long mask) {
+Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity) {
Panel* this = Panel_new(1, 1, 1, 1, CHECKITEM_CLASS, true, ListItem_compare);
this->eventHandler = AffinityPanel_eventHandler;
Panel_setHeader(this, "Use CPUs:");
+ int curCpu = 0;
for (int i = 0; i < pl->cpuCount; i++) {
char number[10];
snprintf(number, 9, "%d", ProcessList_cpuId(pl, i));
- Panel_add(this, (Object*) CheckItem_new(String_copy(number), NULL, mask & (1 << i)));
+ bool mode;
+ if (curCpu < affinity->used && affinity->cpus[curCpu] == i) {
+ mode = true;
+ curCpu++;
+ } else {
+ mode = false;
+ }
+ Panel_add(this, (Object*) CheckItem_new(String_copy(number), NULL, mode));
}
return this;
}
-unsigned long AffinityPanel_getAffinity(Panel* this) {
+Affinity* AffinityPanel_getAffinity(Panel* this) {
+ Affinity* affinity = Affinity_new();
int size = Panel_size(this);
- unsigned long mask = 0;
for (int i = 0; i < size; i++) {
if (CheckItem_get((CheckItem*)Panel_get(this, i)))
- mask = mask | (1 << i);
+ Affinity_add(affinity, i);
}
- return mask;
+ return affinity;
}
diff --git a/AffinityPanel.h b/AffinityPanel.h
index 4324610b..8ab39633 100644
--- a/AffinityPanel.h
+++ b/AffinityPanel.h
@@ -3,16 +3,15 @@
#ifndef HEADER_AffinityPanel
#define HEADER_AffinityPanel
-
+#include "ProcessList.h"
#include "Panel.h"
#include "CheckItem.h"
-#include "ProcessList.h"
#include "debug.h"
#include <assert.h>
-Panel* AffinityPanel_new(ProcessList* pl, unsigned long mask);
+Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity);
-unsigned long AffinityPanel_getAffinity(Panel* this);
+Affinity* AffinityPanel_getAffinity(Panel* this);
#endif
diff --git a/DebugMemory.c b/DebugMemory.c
index f9f38e70..7a0f584d 100644
--- a/DebugMemory.c
+++ b/DebugMemory.c
@@ -1,5 +1,4 @@
-#define _GNU_SOURCE
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
diff --git a/DebugMemory.h b/DebugMemory.h
index ea262089..a67a5f2b 100644
--- a/DebugMemory.h
+++ b/DebugMemory.h
@@ -3,7 +3,6 @@
#ifndef HEADER_DebugMemory
#define HEADER_DebugMemory
-#define _GNU_SOURCE
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
diff --git a/Makefile.am b/Makefile.am
index 9bf73e48..57651a93 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,9 +1,9 @@
-if HAVE_PLPA
-SUBDIRS = plpa-1.3.2
+if HAVE_HWLOC
+SUBDIRS = hwloc-1.2.1
endif
-ACLOCAL_AMFLAGS=-I m4
+ACLOCAL_AMFLAGS = -I m4 -I hwloc-1.2.1/config
bin_PROGRAMS = htop
dist_man_MANS = htop.1
@@ -15,6 +15,7 @@ pixmapdir = $(datadir)/pixmaps
pixmap_DATA = htop.png
htop_CFLAGS = -pedantic -Wall -std=c99 -rdynamic -D_XOPEN_SOURCE_EXTENDED
+AM_CFLAGS =
AM_CPPFLAGS = -DSYSCONFDIR=\"$(sysconfdir)\"
myhtopsources = AvailableMetersPanel.c CategoriesPanel.c CheckItem.c \
@@ -24,7 +25,7 @@ LoadAverageMeter.c MemoryMeter.c Meter.c MetersPanel.c Object.c Panel.c \
BatteryMeter.c Process.c ProcessList.c RichString.c ScreenManager.c Settings.c \
SignalItem.c SignalsPanel.c String.c SwapMeter.c TasksMeter.c TraceScreen.c \
UptimeMeter.c UsersTable.c Vector.c AvailableColumnsPanel.c AffinityPanel.c \
-HostnameMeter.c OpenFilesScreen.c
+HostnameMeter.c OpenFilesScreen.c Affinity.c
myhtopheaders = AvailableColumnsPanel.h AvailableMetersPanel.h \
CategoriesPanel.h CheckItem.h ClockMeter.h ColorsPanel.h ColumnsPanel.h \
@@ -33,14 +34,17 @@ Hashtable.h Header.h htop.h ListItem.h LoadAverageMeter.h MemoryMeter.h \
BatteryMeter.h Meter.h MetersPanel.h Object.h Panel.h ProcessList.h RichString.h \
ScreenManager.h Settings.h SignalItem.h SignalsPanel.h String.h \
SwapMeter.h TasksMeter.h TraceScreen.h UptimeMeter.h UsersTable.h Vector.h \
-Process.h AffinityPanel.h HostnameMeter.h OpenFilesScreen.h
+Process.h AffinityPanel.h HostnameMeter.h OpenFilesScreen.h Affinity.h
SUFFIXES = .h
BUILT_SOURCES = $(myhtopheaders)
htop_SOURCES = $(myhtopheaders) $(myhtopsources) config.h debug.h
-if HAVE_PLPA
-htop_LDADD = $(top_builddir)/plpa-1.3.2/src/libplpa/libplpa_included.la
+
+if HAVE_HWLOC
+htop_LDADD = $(HWLOC_EMBEDDED_LDADD) $(HWLOC_EMBEDDED_LIBS)
+AM_CFLAGS += $(HWLOC_EMBEDDED_CFLAGS)
+AM_CPPFLAGS += $(HWLOC_EMBEDDED_CPPFLAGS)
endif
profile:
diff --git a/Meter.h b/Meter.h
index e1cd6c3c..dc550e4d 100644
--- a/Meter.h
+++ b/Meter.h
@@ -9,7 +9,6 @@ Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
-#define _GNU_SOURCE
#include "RichString.h"
#include "Object.h"
#include "CRT.h"
diff --git a/Process.c b/Process.c
index 8cb40a8d..527db75d 100644
--- a/Process.c
+++ b/Process.c
@@ -5,13 +5,13 @@ Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
-#define _GNU_SOURCE
#include "ProcessList.h"
#include "Object.h"
#include "CRT.h"
#include "String.h"
#include "Process.h"
#include "RichString.h"
+#include "Affinity.h"
#include "debug.h"
@@ -29,8 +29,8 @@ in the source distribution for its full text.
#include <sched.h>
#include <time.h>
-#ifdef HAVE_PLPA
-#include <plpa.h>
+#ifdef HAVE_HWLOC
+#include <hwloc/linux.h>
#endif
// This works only with glibc 2.1+. On earlier versions
@@ -535,15 +535,36 @@ bool Process_setPriority(Process* this, int priority) {
return (err == 0);
}
-#ifdef HAVE_PLPA
-unsigned long Process_getAffinity(Process* this) {
- unsigned long mask = 0;
- plpa_sched_getaffinity(this->pid, sizeof(unsigned long), (plpa_cpu_set_t*) &mask);
- return mask;
+#ifdef HAVE_HWLOC
+Affinity* Process_getAffinity(Process* this) {
+ hwloc_cpuset_t cpuset = hwloc_bitmap_alloc();
+ bool ok = (hwloc_linux_get_tid_cpubind(this->pl->topology, this->pid, cpuset) == 0);
+ Affinity* affinity = NULL;
+ if (ok) {
+ affinity = Affinity_new();
+ if (hwloc_bitmap_last(cpuset) == -1) {
+ for (int i = 0; i < this->pl->cpuCount; i++) {
+ Affinity_add(affinity, i);
+ }
+ } else {
+ unsigned int id;
+ hwloc_bitmap_foreach_begin(id, cpuset);
+ Affinity_add(affinity, id);
+ hwloc_bitmap_foreach_end();
+ }
+ }
+ hwloc_bitmap_free(cpuset);
+ return affinity;
}
-bool Process_setAffinity(Process* this, unsigned long mask) {
- return (plpa_sched_setaffinity(this->pid, sizeof(unsigned long), (plpa_cpu_set_t*) &mask) == 0);
+bool Process_setAffinity(Process* this, Affinity* affinity) {
+ hwloc_cpuset_t cpuset = hwloc_bitmap_alloc();
+ for (int i = 0; i < affinity->used; i++) {
+ hwloc_bitmap_set(cpuset, affinity->cpus[i]);
+ }
+ bool ok = (hwloc_linux_set_