summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2009-03-11 13:15:43 +0000
committerHisham Muhammad <hisham@gobolinux.org>2009-03-11 13:15:43 +0000
commit3b950e41896219c9d21f9bc13616bfc6333b345c (patch)
tree3d53d979f3fbfa92704071ee17bafcfb15002098
parentb93e5c00b6cad873942a2709f990a0626d98e7be (diff)
BSD related fixes:
* BUGFIX: Correct page size calculation for FreeBSD systems (thanks to Andrew Paulsen) * Allow compilation without PLPA on systems that don't support it (thanks to Timothy Redaelli)
-rw-r--r--ChangeLog4
-rw-r--r--Makefile.am4
-rw-r--r--Process.c21
-rw-r--r--Process.h7
-rw-r--r--ProcessList.c2
-rw-r--r--configure.ac5
-rw-r--r--htop.c6
-rw-r--r--plpa-1.1/Makefile.in1
-rw-r--r--plpa-1.1/src/Makefile.in1
9 files changed, 37 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 82dd7e8c..2c9078a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,10 @@ What's new in version 0.8.2
(thanks to Thorsten Schifferdecker)
* Corrections to the desktop entry file
(thanks by Samuli Suominen)
+* BUGFIX: Correct page size calculation for FreeBSD systems
+ (thanks to Andrew Paulsen)
+* Allow compilation without PLPA on systems that don't support it
+ (thanks to Timothy Redaelli)
* BUGFIX: Fix missing tree view when userland threads are hidden
(thanks to Josh Stone)
* BUGFIX: Fix for VPID on OpenVZ systems
diff --git a/Makefile.am b/Makefile.am
index 2e9c076f..d3fcb43b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,7 @@
+if HAVE_PLPA
SUBDIRS = plpa-1.1
+endif
bin_PROGRAMS = htop
dist_man_MANS = htop.1
@@ -35,7 +37,9 @@ SUFFIXES = .h
BUILT_SOURCES = $(myhtopheaders)
htop_SOURCES = $(myhtopheaders) $(myhtopsources) config.h debug.h
+if HAVE_PLPA
htop_LDADD = $(top_builddir)/plpa-1.1/src/libplpa_included.la
+endif
profile:
$(MAKE) all CFLAGS="-pg -O2"
diff --git a/Process.c b/Process.c
index ee954de1..6acdb46d 100644
--- a/Process.c
+++ b/Process.c
@@ -28,13 +28,16 @@ in the source distribution for its full text.
#include <pwd.h>
#include <sched.h>
+#ifdef HAVE_PLPA
#include <plpa.h>
+#endif
// This works only with glibc 2.1+. On earlier versions
// the behavior is similar to have a hardcoded page size.
#ifndef PAGE_SIZE
-#define PAGE_SIZE ( sysconf(_SC_PAGESIZE) / 1024 )
+#define PAGE_SIZE ( sysconf(_SC_PAGESIZE) )
#endif
+#define PAGE_SIZE_KB ( PAGE_SIZE / ONE_K )
#define PROCESS_COMM_LEN 300
@@ -351,13 +354,13 @@ static void Process_writeField(Process* this, RichString* str, ProcessField fiel
: attr;
break;
}
- case M_DRS: Process_printLargeNumber(this, str, this->m_drs * PAGE_SIZE); return;
- case M_DT: Process_printLargeNumber(this, str, this->m_dt * PAGE_SIZE); return;
- case M_LRS: Process_printLargeNumber(this, str, this->m_lrs * PAGE_SIZE); return;
- case M_TRS: Process_printLargeNumber(this, str, this->m_trs * PAGE_SIZE); return;
- case M_SIZE: Process_printLargeNumber(this, str, this->m_size * PAGE_SIZE); return;
- case M_RESIDENT: Process_printLargeNumber(this, str, this->m_resident * PAGE_SIZE); return;
- case M_SHARE: Process_printLargeNumber(this, str, this->m_share * PAGE_SIZE); return;
+ case M_DRS: Process_printLargeNumber(this, str, this->m_drs * PAGE_SIZE_KB); return;
+ case M_DT: Process_printLargeNumber(this, str, this->m_dt * PAGE_SIZE_KB); return;
+ case M_LRS: Process_printLargeNumber(this, str, this->m_lrs * PAGE_SIZE_KB); return;
+ case M_TRS: Process_printLargeNumber(this, str, this->m_trs * PAGE_SIZE_KB); return;
+ case M_SIZE: Process_printLargeNumber(this, str, this->m_size * PAGE_SIZE_KB); return;
+ case M_RESIDENT: Process_printLargeNumber(this, str, this->m_resident * PAGE_SIZE_KB); return;
+ case M_SHARE: Process_printLargeNumber(this, str, this->m_share * PAGE_SIZE_KB); return;
case ST_UID: snprintf(buffer, n, "%4d ", this->st_uid); break;
case USER: {
if (Process_getuid != this->st_uid)
@@ -493,6 +496,7 @@ 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);
@@ -502,6 +506,7 @@ unsigned long Process_getAffinity(Process* this) {
bool Process_setAffinity(Process* this, unsigned long mask) {
return (plpa_sched_setaffinity(this->pid, sizeof(unsigned long), (plpa_cpu_set_t*) &mask) == 0);
}
+#endif
void Process_sendSignal(Process* this, int signal) {
kill(this->pid, signal);
diff --git a/Process.h b/Process.h
index 54dbf87f..620eb75a 100644
--- a/Process.h
+++ b/Process.h
@@ -31,13 +31,16 @@ in the source distribution for its full text.
#include <pwd.h>
#include <sched.h>
+#ifdef HAVE_PLPA
#include <plpa.h>
+#endif
// This works only with glibc 2.1+. On earlier versions
// the behavior is similar to have a hardcoded page size.
#ifndef PAGE_SIZE
-#define PAGE_SIZE ( sysconf(_SC_PAGESIZE) / 1024 )
+#define PAGE_SIZE ( sysconf(_SC_PAGESIZE) )
#endif
+#define PAGE_SIZE_KB ( PAGE_SIZE / ONE_K )
#define PROCESS_COMM_LEN 300
@@ -172,9 +175,11 @@ void Process_toggleTag(Process* this);
bool Process_setPriority(Process* this, int priority);
+#ifdef HAVE_PLPA
unsigned long Process_getAffinity(Process* this);
bool Process_setAffinity(Process* this, unsigned long mask);
+#endif
void Process_sendSignal(Process* this, int signal);
diff --git a/ProcessList.c b/ProcessList.c
index 4ffd80da..24e08104 100644
--- a/ProcessList.c
+++ b/ProcessList.c
@@ -696,7 +696,7 @@ static bool ProcessList_processEntries(ProcessList* this, char* dirname, Process
period * 100.0;
process->percent_cpu = MAX(MIN(percent_cpu, processors*100.0), 0.0);
- process->percent_mem = (process->m_resident * PAGE_SIZE) /
+ process->percent_mem = (process->m_resident * PAGE_SIZE_KB) /
(float)(this->totalMem) *
100.0;
diff --git a/configure.ac b/configure.ac
index 955b32ce..979509dd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -97,8 +97,9 @@ AC_CHECK_FILE($PROCDIR/meminfo,,AC_MSG_ERROR(Cannot find /proc/meminfo. Make sur
PLPA_INCLUDED(plpa-1.1)
PLPA_INIT(plpa_happy=yes, plpa_happy=no)
-if test "x$plpa_happy" = xno; then
- AC_MSG_ERROR([Failed to initialize PLPA.])
+AM_CONDITIONAL([HAVE_PLPA], [test "$plpa_happy" = "yes"])
+if test "$plpa_happy" = "yes"; then
+ AC_DEFINE([HAVE_PLPA], [1], [Have plpa])
fi
AC_CONFIG_FILES([Makefile])
diff --git a/htop.c b/htop.c
index 9cfd2b02..6d4e09f8 100644
--- a/htop.c
+++ b/htop.c
@@ -112,9 +112,11 @@ static void showHelp(ProcessList* pl) {
mvaddstr(15, 0, " F9 k: kill process/tagged processes P: sort by CPU%");
mvaddstr(16, 0, " + [ F7: lower priority (+ nice) M: sort by MEM%");
mvaddstr(17, 0, " - ] F8: higher priority (root only) T: sort by TIME");
+#ifdef HAVE_PLPA
if (pl->processorCount > 1)
mvaddstr(18, 0, " a: set CPU affinity F4 I: invert sort order");
else
+#endif
mvaddstr(18, 0, " F4 I: invert sort order");
mvaddstr(19, 0, " F2 S: setup F6 >: select sort column");
mvaddstr(20, 0, " F1 h: show this help screen");
@@ -131,8 +133,10 @@ static void showHelp(ProcessList* pl) {
mvaddstr(16, 0, " + [ F7"); mvaddstr(16,40, " M");
mvaddstr(17, 0, " - ] F8"); mvaddstr(17,40, " T");
mvaddstr(18,40, " F4 I");
+#if HAVE_PLPA
if (pl->processorCount > 1)
mvaddstr(18, 0, " a:");
+#endif
mvaddstr(19, 0, " F2 S"); mvaddstr(19,40, " F6 >");
mvaddstr(20, 0, " F1 h");
mvaddstr(21, 0, " F10 q"); mvaddstr(21,40, " s");
@@ -630,6 +634,7 @@ int main(int argc, char** argv) {
refreshTimeout = 0;
break;
}
+#ifdef HAVE_PLPA
case 'a':
{
if (pl->processorCount == 1)
@@ -665,6 +670,7 @@ int main(int argc, char** argv) {
refreshTimeout = 0;
break;
}
+#endif
case KEY_F(10):
case 'q':
quit = 1;
diff --git a/plpa-1.1/Makefile.in b/plpa-1.1/Makefile.in
index 31dae872..a004a6a6 100644
--- a/plpa-1.1/Makefile.in
+++ b/plpa-1.1/Makefile.in
@@ -122,7 +122,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
diff --git a/plpa-1.1/src/Makefile.in b/plpa-1.1/src/Makefile.in
index 8d420b0a..e7f55f94 100644
--- a/plpa-1.1/src/Makefile.in
+++ b/plpa-1.1/src/Makefile.in
@@ -157,7 +157,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
-SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@

© 2014-2024 Faster IT GmbH | imprint | privacy policy