]> granicus.if.org Git - procps-ng/log
procps-ng
9 years agolibrary: privatize two with <pids> select/fill changes
Jim Warner [Thu, 1 Oct 2015 05:00:00 +0000 (00:00 -0500)]
library: privatize two with <pids> select/fill changes

After simplifying that select/fill interface, there is
no longer a need for public 'alloc' & 'dealloc' stacks
functions. There is now only one instance of stacks as
an input parameter found in procps_pids_stacks_sort().
But sorting 'empty' stacks serves no possible purpose.

So this commit retains both functions, since they will
still be needed, but designates them private (static).

Additionally, with their demise we will eliminate that
pids_stacks structure from the header file, internally
using what always was the true 'stacks_extent' struct.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: normalize the <pids> fill/selection interface
Jim Warner [Thu, 1 Oct 2015 05:00:00 +0000 (00:00 -0500)]
library: normalize the <pids> fill/selection interface

After wrestling with the conversion of both top and ps
the differences between reap (all) & fill (select) has
become increasingly inconvenient. So this patch simply
normalizes that API making returned results identical.

The former procps_pids_stacks_fill identifier will now
be known as procps_pids_select which serves as logical
counterpart to the existing procps_pids_reap function.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: add <pids> TIME_ALL/TIME_ELAPSED needed by ps
Jim Warner [Wed, 30 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: add <pids> TIME_ALL/TIME_ELAPSED needed by ps

Shoot, here's yet another bow to ps needs. But it's ok
because it makes a lot of sense. Rather than force all
users into their own calculations do but it once here.

As an aside this need arose during ps testing when the
sorts were using TIME_START or TICS_ALL. That was just
fine for almost every need except 'etime' plus 'time'.

That 'etime' was sorting the opposite of what's wanted
when using TIME_START (of course) while 'time' yielded
some weird ordering because TICS_ALL was too granular.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: add abbreviated TTY_NUMBER to that <pids> API
Jim Warner [Wed, 30 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: add abbreviated TTY_NUMBER to that <pids> API

While not documented in the man page, ps allows 'tty4'
as a valid output specifier complimenting 'tty8' & its
derivatives. So, in order to eliminate a dev_to_name()
call in the ps program the library will now offer this
abbreviated tty version (consisting of a number only).

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: the <pids> API now supports 'extra' enum sort
Jim Warner [Tue, 29 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: the <pids> API now supports 'extra' enum sort

The 'PROCPS_PIDS_extra' enumerator already enjoys some
special place wherein it's zeroed with each iteration.

This patch simply extends the special handling to also
include support for sorting. It will be treated as the
'ull_int' data type, since that encompasses the entire
scope of that union within all pids_result structures.

[ plus, we've also corrected the actual 'extra' name ]

This change was prompted by the conversion of ps which
needs that enumerator to store the former 'pcpu' data,
so it will be available for sorting (not for display).

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: strengthen <pids> sort order parameter checks
Jim Warner [Mon, 28 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: strengthen <pids> sort order parameter checks

The way that the passed sort order was validated would
allow the invalid 0 to fall between the sofa cushions.
So this patch will simply close that former oversight.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: streamline the approach to tracking relative enum
Jim Warner [Sun, 27 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: streamline the approach to tracking relative enum

Two separate entries under the Fieldstab were employed
to manage 'relative' enumerators under that new <pids>
interface. However, just a single entry could actually
serve both needs with a negative 'not selected' value.

So this commit just borrows the approach used with the
ps conversion where -1 is now representing unselected.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: eliminate an unused error message and its support
Jim Warner [Sat, 26 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: eliminate an unused error message and its support

This commit just eliminates an error message no longer
needed under that newlib <pids> interface. Plus, a few
enumerators in the header weren't in alphabetic order.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopgrep: a few tweaks to the <pids> interface conversion
Jim Warner [Sun, 4 Oct 2015 16:00:00 +0000 (11:00 -0500)]
pgrep: a few tweaks to the <pids> interface conversion

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopgrep:Remove the a?b:c for threads or no threads
Craig Small [Sat, 26 Sep 2015 04:47:56 +0000 (14:47 +1000)]
pgrep:Remove the a?b:c for threads or no threads

9 years agolibrary: Removed unused methods.
Craig Small [Sat, 26 Sep 2015 04:39:37 +0000 (14:39 +1000)]
library: Removed unused methods.

As part of the push to remove the old API, 3 more old calls were
deleted from the library. Now all someone needs to do is fix ps
and we're largely done.

9 years agopidof: remove unrequired includes
Craig Small [Sat, 26 Sep 2015 04:37:38 +0000 (14:37 +1000)]
pidof: remove unrequired includes

pidof was including readproc.h only because one length was used
and it didn't include some system headers.

9 years agopgrep: remove commented old code
Craig Small [Sat, 26 Sep 2015 04:34:51 +0000 (14:34 +1000)]
pgrep: remove commented old code

pgrep had old API code commented out, its now removed.

9 years agoskill: use library for process scanning
Craig Small [Sat, 26 Sep 2015 04:32:56 +0000 (14:32 +1000)]
skill: use library for process scanning

skill is one of the older and more unloved programs. It was still
scanning readdir /proc. It now will use the procps library like the
rest of the programs.

Signed-off-by: Craig Small <csmall@enc.com.au>
9 years agobuild-sys: unlink kill from procps
Craig Small [Fri, 25 Sep 2015 23:19:28 +0000 (09:19 +1000)]
build-sys: unlink kill from procps

kill doesn't use any symbols from libprocps so we don't need to
link to it.

9 years agokill: split out from skill/snice
Craig Small [Fri, 25 Sep 2015 23:13:13 +0000 (09:13 +1000)]
kill: split out from skill/snice

The first part of fixing skill/snice to use the library instead
of directly readdir()ing /proc which is what it does now.

Remove the kill code from the skill/snice code and put common
elements into lib/signals.c Not 100% sure that is the right
destination instead of a new lib file, but ok for now.

kill shares some parsing logic with skill/snice but mainly
around signal specifications. The "do it" code is very different.

Signed-off-by: Craig Small <csmall@enc.com.au>
9 years agopgrep: use tty_name
Craig Small [Fri, 25 Sep 2015 22:31:06 +0000 (08:31 +1000)]
pgrep: use tty_name

pgrep used to extract tty and then convert to a name. As the library
does this for you now there is no need for the double step.

9 years agopgrep: Use new library API
Craig Small [Fri, 25 Sep 2015 22:19:32 +0000 (08:19 +1000)]
pgrep: Use new library API

Change pgrep to use new library API. Threads now use their own
name instead of parent process.  Updated man page to make note
of it.

9 years agolibrary: make the pids_sort_order enums more intuitive
Jim Warner [Sun, 13 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: make the pids_sort_order enums more intuitive

The values of PROCPS_SORT_ASCEND & PROCPS_SORT_DESCEND
were a tad unintuitive. This patch will just make them
a more natural +1 for ascending and -1 for descending.

[ plus it still allows that fast path multiplication ]
[ instead of a comparison for signed numbers/strings ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: trade 'look_up_our_self' for a new API equivalent
Jim Warner [Fri, 11 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: trade 'look_up_our_self' for a new API equivalent

With the advent of the 'fatal_proc_unmounted' function
in the <pids.h> API to ensure the /proc filesystem was
mounted, we will finally get rid of the last remaining
vestiges of the former libprocps <readproc> interface.

[ also play a little catch up and whack some headers ]
[ that are not necessary now, beyond that readproc.h ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: introduce a fatal 'proc not mounted' function
Jim Warner [Fri, 11 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: introduce a fatal 'proc not mounted' function

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: enable an 'invariant' stack for that pids API
Jim Warner [Thu, 10 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: enable an 'invariant' stack for that pids API

After peeking at possible conversion of the ps program
it appeared that we may ultimately need the concept of
a 'static' pids_stack in suport of look_up_our_self().
In other words, one not impacted by procps_pids_reset.

This patch simply sets the stage for that possibility.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: abandon long/long long distinction with KLONG
Jim Warner [Wed, 9 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: abandon long/long long distinction with KLONG

With this patch the distinction between a 'long' KLONG
and a 'long long' KLONG is being abandoned in favor of
a consistent declaration as 'long' only. Plus we would
have also defined it as 'unsigned' except there exists
much code already explicitly specifying the qualifier.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopmap: adapt to changes in <pids> API regarding address
Jim Warner [Wed, 9 Sep 2015 05:00:00 +0000 (00:00 -0500)]
pmap: adapt to changes in <pids> API regarding address

This commit was prompted by that change from 'addr' to
'ul_int' in the <pids> interface. Along the way, KLONG
was removed as having long ago outlived its usefulness
as performance optimizations for weird configurations.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: exchange <pids> 'addr' for that 'ul_int' type
Jim Warner [Wed, 9 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: exchange <pids> 'addr' for that 'ul_int' type

Work on converting ps has revealed the desirability of
trading a void pointer for that ul_int type. There was
much arithmetic employed against such values and casts
would otherwise have been required. Even pmap needed a
cast on occasions when comparing an internal variable.

Besides, there is much to be said for reducing demands
on (and the complexity of) the result structure union.

[ we choose ul_int over ull_int since that former is ]
[ the exact same size and capacity as a void pointer ]
[ regardless of whether compiled as 32-bit or 64-bit ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: update the man document reporting bugs suggestion
Jim Warner [Tue, 8 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: update the man document reporting bugs suggestion

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: with valgrind help, fix faulty meminfo assign
Jim Warner [Tue, 8 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: with valgrind help, fix faulty meminfo assign

Not sure how this one has gone unnoticed until now but
with valgrind's help it's going bye-bye lickety-split.

Reference(s):
==26533== Conditional jump or move depends on uninitialised value(s)
==26533==    at 0x4E4082B: procps_meminfo_stack_fill (meminfo.c:408)

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agomiscellaneous: silence a whole bunch of clang warnings
Jim Warner [Mon, 7 Sep 2015 05:00:00 +0000 (00:00 -0500)]
miscellaneous: silence a whole bunch of clang warnings

[ but most definitely not all of them by a long shot ]

Reference(s):
proc/diskstat.c:186:17: warning: unused variable 'is_disk' [-Wunused-variable]
    int retval, is_disk;
                ^
proc/namespace.c:110:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
proc/readproc.c:1131:50: warning: address of array 'ent->d_name' will always evaluate to 'true' [-Wpointer-bo
    if(unlikely(unlikely(!ent) || unlikely(!ent->d_name))) return 0;
                                           ~~~~~~^~~~~~
proc/readproc.c:1158:50: warning: address of array 'ent->d_name' will always evaluate to 'true' [-Wpointer-bo
    if(unlikely(unlikely(!ent) || unlikely(!ent->d_name))) return 0;
                                           ~~~~~~^~~~~~
proc/sysinfo.c:45:12: warning: unused variable 'stat_fd' [-Wunused-variable]
static int stat_fd = -1;
           ^
proc/sysinfo.c:49:12: warning: unused variable 'meminfo_fd' [-Wunused-variable]
static int meminfo_fd = -1;
           ^
proc/sysinfo.c:51:12: warning: unused variable 'vminfo_fd' [-Wunused-variable]
static int vminfo_fd = -1;
           ^
proc/sysinfo.c:53:12: warning: unused variable 'vm_min_free_fd' [-Wunused-variable]
static int vm_min_free_fd = -1;
           ^
proc/uptime.c:157:12: warning: unused variable 'realseconds' [-Wunused-variable]
    time_t realseconds;
           ^
proc/uptime.c:158:16: warning: unused variable 'realtime' [-Wunused-variable]
    struct tm *realtime;
               ^
vmstat.c:574:20: warning: format specifies type 'unsigned int' but the argument has type 'unsigned long' [-Wformat]
                   DSTAT(PROCPS_DISKSTAT_READ_TIME),
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vmstat.c:578:20: warning: format specifies type 'unsigned int' but the argument has type 'unsigned long' [-Wformat]
                   DSTAT(PROCPS_DISKSTAT_WRITE_TIME),
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
watch.c:230:7: warning: variable 'endptr' is uninitialized when used here [-Wuninitialized]
        if (*endptr == '\0') set_ansi_attribute(0); /* [m treated as [0m */
             ^~~~~~

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agomiscellaneous: cleanup accumulated trailing whitespace
Jim Warner [Mon, 7 Sep 2015 05:00:00 +0000 (00:00 -0500)]
miscellaneous: cleanup accumulated trailing whitespace

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: plug a rather big hole in the display fields dike
Jim Warner [Mon, 7 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: plug a rather big hole in the display fields dike

Whoa, guess what field got overlooked in that march to
the newlib conversion? It was the TTY guy. However, it
wasn't completely top's fault - that newlib must share
at least some responsibility, for only offering a num.

[ and while we're at it, let's touch up the man page ]
[ to agree with ol' newlib's current implementation. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: add PROCPS_PIDS_TTY_NAME to compliment number
Jim Warner [Mon, 7 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: add PROCPS_PIDS_TTY_NAME to compliment number

OK, ok, this was kind of a huge omission. So please do
not select the TTY field for display in top quite yet,
at least until a next patch has been pushed to GitLab.

And to produce a correct sort order for this new field
the GNU 'strverscmp' routine was a necessary addition.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: Add space after days for uptime
Craig Small [Mon, 7 Sep 2015 08:38:39 +0000 (18:38 +1000)]
library: Add space after days for uptime

Uptime output for both w and uptime command were showing no
comma or space after days.

$ ./uptime
 18:32:21 up 22 days7 min,  6 users,  load average: 0.23, 0.46, 0.64

Minor tweak to fix this.

9 years agow: correct program help & man page regarding arguments
Jim Warner [Sun, 6 Sep 2015 05:00:00 +0000 (00:00 -0500)]
w: correct program help & man page regarding arguments

This commit is an outgrowth of the research into a bug
involving the recently added enum 'PROCPS_PIDS_extra'.

Since this program is not equipped to filter more than
one user, the help text and man document were updated.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agow: eliminate inappropriate cmdline padding with spaces
Jim Warner [Sun, 6 Sep 2015 05:00:00 +0000 (00:00 -0500)]
w: eliminate inappropriate cmdline padding with spaces

This commit is an outgrowth of the research into a bug
involving the recently added enum 'PROCPS_PIDS_extra'.

The WHAT portion of output is being padded with spaces
since the printf field width format specifier was used
in combination with a precision specifier. This commit
reduces the format string to just that precision part.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: ensure any 'flags' is consistently 'unsigned'
Jim Warner [Sun, 6 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: ensure any 'flags' is consistently 'unsigned'

This commit is an outgrowth of the research into a bug
that recently surfaced with the 'w' program. And while
that program was just a victim several inconsistencies
were found in the handling of library flags during the
research. This patch just address such irregularities.

Reference(s):
http://www.freelists.org/post/procps/newlib-at-the-precipice,4

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: swat (now) obvious bug from PROCPS_PIDS_extra
Jim Warner [Sun, 6 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: swat (now) obvious bug from PROCPS_PIDS_extra

I can't remember during what sleepy hour that enum was
added to pids.h, but it damn sure fell short of a full
implementation by approximately 1,000,000 miles or so.

Strangely it surfaced on Craig's system seemingly ggdb
related whereas on mine, a segmentation fault was only
seen when that -h (no header) argument was being used.

Oh well, the road to its resolution also offered us an
opportunity to cleanup some other items along the way.

Reference(s):
http://www.freelists.org/post/procps/newlib-at-the-precipice,4

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: suppress zero 'days' under the <uptime.h> API
Jim Warner [Fri, 4 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: suppress zero 'days' under the <uptime.h> API

The former whattime logic used to suppress that 'days'
output when the system had been up less than 24 hours.

But since the refactor for newlib, '0 days' was always
output under those conditions. So this commit restores
the former expected behavior of suppressing that item.

[ plus an erroneous calculation of uphours was fixed ]

[ and the clang warnings shown below were also fixed ]

Reference(s):
proc/uptime.c:74:10: warning: unused variable 'buf' [-Wunused-variable]
    char buf[256];
         ^
proc/uptime.c:131:58: warning: data argument not used by format string [-Wformat-extra-args]
        pos += sprintf(upbuf + pos, "%d min, ", uphours, upminutes);
                                    ~~~~~~~~~~           ^
proc/uptime.c:175:15: warning: expression result unused [-Wunused-value]
        comma +1;
        ~~~~~ ^~

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: utilize a library result struct for 'forest view'
Jim Warner [Thu, 3 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: utilize a library result struct for 'forest view'

When top was originally adapted to use that <pids> API,
the forest view support was redesigned since the proc_t
pad_3 byte could no longer be employed to hold a task's
nesting level. The redesign required additional arrays.

Now that the dust is settling on those initial efforts,
that PROCPS_PIDS_noop item was used as a substitute for
the old pad_3 along with a return to the former design.
But, while it proved adequate, the invariant nature for
that item required of top an extra initialization step.

So the library was coaxed into adding one more pid_item
(PROCPS_PIDS_extra) which will, unlike that 'noop' guy,
be reset with each reap. Everybody should be happy now.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: extend 'noop' concept to a resettable 'extra'
Jim Warner [Thu, 3 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: extend 'noop' concept to a resettable 'extra'

The presence of that PROCPS_PIDS_noop may yet see some
use in the future with its 'no alter' library promise.

However, when top used that item to reflect the forest
view nesting level, the unchanging nature of that item
became more of an inconvenience than benefit. For each
refresh top was forced to loop through all the stacks,
resetting that PROCPS_PIDS_noop result struct to zero.

So this commit will now offer users a choice between a
new re-initialized item (PROCPS_PIDS_extra) & the noop
invariant.  Since the library already resets all those
result structures, top will now utilize it at no cost.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: do not co-mingle strings/numbers under namespaces
Jim Warner [Thu, 3 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: do not co-mingle strings/numbers under namespaces

Craig's recent commit under that newlib branch dealing
with namespace support has prompted me to review top's
handling of those fields. Currently, when such a field
is zero, top displays a dash ('-'). This will mean the
justification toggles ('j/J') will behave incorrectly.

This patch simply allows the potential zero to display
or be suppressed with the already existing '0' toggle.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agoGrab the CI file from master
Craig Small [Thu, 3 Sep 2015 12:55:36 +0000 (22:55 +1000)]
Grab the CI file from master

9 years agotop: still more tidying up after <pids> implementation
Jim Warner [Tue, 1 Sep 2015 05:00:00 +0000 (00:00 -0500)]
top: still more tidying up after <pids> implementation

A patch containing the following miscellaneous tweaks:

. remove a function that handled former library errors
[ that function should have gone bye-bye with 3.3.11 ]
[ when those 'wchan' provisions were much simplified ]

. make clearer a distinction between 'new' and 'reset'
[ use PROCPS_PIDS_noop when procps_pids_new() called ]
[ since at that point we are only establishing depth ]

Reference(s):
http://www.freelists.org/post/procps/newlib-for-pgrep,1

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: more miscellaneous pids implementation tweaks
Jim Warner [Tue, 1 Sep 2015 05:00:00 +0000 (00:00 -0500)]
library: more miscellaneous pids implementation tweaks

A patch containing the following miscellaneous tweaks:

. make a supposedly robust parameter test truly robust
[ ensure the largest enum value used with validation ]

. remove duplicate item test in cleanup_stack function
[ is already subordinate to test of PROCPS_PIDS_noop ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: rework namespace calls
Craig Small [Thu, 3 Sep 2015 12:32:19 +0000 (22:32 +1000)]
library: rework namespace calls

Functions related to namespaces were half-in half-out of the
procps library and didn't fit the standard naming scheme.

While struct { long ns[x]} is a bit clunky, its the only way
to "lock in" x. The alternative is to use ns_* variables.

This work was needed before pgrep could be converted.

9 years agoskill: Remove unrequired headers
Craig Small [Tue, 1 Sep 2015 12:19:34 +0000 (22:19 +1000)]
skill: Remove unrequired headers

Removed unrequired headers in the include statements for skill.

9 years agosysctl: Remove links to library
Craig Small [Tue, 1 Sep 2015 10:57:56 +0000 (20:57 +1000)]
sysctl: Remove links to library

sysctl doesn't use any symbols from the libprocps library so
this  update removes those dependencies.

9 years agolibrary: Remove tty_to_dev()
Craig Small [Tue, 1 Sep 2015 10:41:25 +0000 (20:41 +1000)]
library: Remove tty_to_dev()

This library call was imported into w as it was only used in
this program.  Converting a tty to a device is not really the
work for libprocps.

9 years agow: use the new procps_pids library interface
Craig Small [Mon, 31 Aug 2015 12:49:11 +0000 (22:49 +1000)]
w: use the new procps_pids library interface

w using the new procps_pids calls from the library. There are
some clean-ups of the code within w as well.

9 years agolibrary: beef up 'enum pids_item' parameter validation
Jim Warner [Sun, 30 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: beef up 'enum pids_item' parameter validation

I was surprised to find that ol' gcc silently converts
a single (different) enum into an address where one or
more enums were expected to be dereferenced. Of course
this was just yet another way to generate an old SEGV.

So this commit will strengthen those parameter checks.

[ we will *not* blame Craig for a failure to consult ]
[ the documentation, since it doesn't even exist yet ]

Reference(s):
http://www.freelists.org/post/procps/newlib-ps-fix,8

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopmap: modify to utilize that new procps_pids interface
Jim Warner [Sat, 29 Aug 2015 05:00:00 +0000 (00:00 -0500)]
pmap: modify to utilize that new procps_pids interface

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopmap: silence a clang -Wuninitialized variable warning
Jim Warner [Sat, 29 Aug 2015 05:00:00 +0000 (00:00 -0500)]
pmap: silence a clang -Wuninitialized variable warning

Reference(s):
pmap.c:618:20: warning: variable 'start' is uninitialized when used here [-Wuninitialized]
                                               maxw1, start,
                                                      ^~~~~
Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopmap: correct heading misalignment of VmFlags with -XX
Jim Warner [Sat, 29 Aug 2015 05:00:00 +0000 (00:00 -0500)]
pmap: correct heading misalignment of VmFlags with -XX

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: polish some things related to the pids adaptation
Jim Warner [Fri, 28 Aug 2015 05:00:00 +0000 (00:00 -0500)]
top: polish some things related to the pids adaptation

A patch containing the following miscellaneous tweaks:

. exploit (actually adapt) a pids.h provided VAL macro
. remove some obsolete, now unused, sort related items
. clarify the comment for specialized extractor macros

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: accumulated changes to <pids> code & comments
Jim Warner [Fri, 28 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: accumulated changes to <pids> code & comments

A patch containing the following miscellaneous tweaks:

. avoided distortions unique to PROCPS_PIDS_TICS_DELTA
. addressed several smatch warnings and/or suggestions
. ensured oldproc_close invoked should tally_proc fail
. keeping that namespace clean, added a missing #undef
. added 2 comments acknowledging pids_item as unsigned
. added/clarified comments regarding proc flags & strv

From smatch analysis:
. these were indeed boo-boos
pids.c:580 make_hist() warn: the 'Hr' macro might need parens
pids.c:1058 procps_pids_reap() warn: variable dereferenced before check 'info' (see line 1056)
. these were not errors (and we did double check)
pids.c:1067 procps_pids_reap() warn: double check that we're allocating correct size: 8 vs 128
pids.c:1068 procps_pids_reap() warn: double check that we're allocating correct size: 8 vs 128

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agopidof: modify to utilize the new procps_pids interface
Jim Warner [Wed, 26 Aug 2015 05:00:00 +0000 (00:00 -0500)]
pidof: modify to utilize the new procps_pids interface

As an additional test of the viability of the new pids
API, the pidof program has now been converted. As part
of that effort, several library changes were prompted:

. individual reads were added as an alternative to the
all encompassing (maybe over broad?) 'reap' provision.

. an alternate version of cgroup, cmdline plus environ
has been added to represent actual vectorized strings.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: introduce pids 'value extractor' helper macro
Jim Warner [Wed, 26 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: introduce pids 'value extractor' helper macro

As an experiment a helper macro used to extract values
from a result stack has been added to the header file.

Don't force callers to reinvent that particular wheel.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: add real string vectors to the pids interface
Jim Warner [Wed, 26 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: add real string vectors to the pids interface

After experimenting with an adaptation of pidof to the
new pids interface, it became apparent that vectorized
versions of those command lines would be necessary. So
this commit adds that option and the strv result type.

And since the stage had been set, a vectorized version
of PROCPS_PIDS_ENVIRON & PROCPS_PIDS_CGROUP was added.

Lastly, any use of 'const' in the result structure was
removed so callers need not be bothered with casts and
compiler warnings. Hopefully, they'll respect a stack.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: add sequential access to that pids collection
Jim Warner [Wed, 26 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: add sequential access to that pids collection

To ease the transition to the new interface, for other
than that top program, individual read provisions have
been added to the <proc/pids.h> API. This represents a
refinement of a position stated in a post noted below.

Reference(s):
http://www.freelists.org/post/procps/newlib-ps-fix

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: fix major oops in procps_pids_reap() function
Jim Warner [Wed, 26 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: fix major oops in procps_pids_reap() function

In my zeal to finalize the initial pids implementation
I omitted some quite important parameter checking from
the above function. Thank goodness top was kind to us.

Also, in anticipation of the additions of single stack
read and supporting functions some items were renamed.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: respond to library changes regarding self lookups
Jim Warner [Sun, 23 Aug 2015 05:00:00 +0000 (00:00 -0500)]
top: respond to library changes regarding self lookups

Just in case, make the old proc_t used in the before()
function static so valgrind doesn't get his panties in
a bunch over the fact the 'cmd' is now dynamic memory.

[ Shouldn't that function, or an equivalent, also be ]
[ part of our new library's implementation? However, ]
[ is it proper for a brand new library to abnormally ]
[ terminate a calling process with a stderr message? ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: revert changes to 'look_up_our_self' function
Jim Warner [Sun, 23 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: revert changes to 'look_up_our_self' function

The patch below is where most proc_t fixed size arrays
became simple pointers to char. In that commit changes
to the above function were made so that dynamic memory
was freed which included the program name (cmd) field.

That change was prompted by a valgrind reported memory
leak during development that no longer seems to exist.
However, by keeping the look_up_our_self() changes the
ps command without args then fails to report anything.

So this patch just restores the expected old behavior.

Reference(s):
commit 3881a0844afe4d1b3cd512b2c2fd79e11bb0ed06

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agobuild, library & top: make OOMEM options unconditional
Jim Warner [Fri, 21 Aug 2015 05:00:00 +0000 (00:00 -0500)]
build, library & top: make OOMEM options unconditional

It was probably always wrong to have a variable length
proc_t structure. This patch takes all remaining oomem
former suse only options and makes them unconditional.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: misc tweaks to code/comments after pid adaptation
Jim Warner [Thu, 20 Aug 2015 05:00:00 +0000 (00:00 -0500)]
top: misc tweaks to code/comments after pid adaptation

. didn't need a separate table for enum pids_reap_type
since top's 'Thread_mode' itself can be used directly.

. with pids support & the loss of forest_based(), that
forest_adds() function had to be renamed so the prolog
comment regarding naming convention was still honored.

. adapted to a library change to the pids_reap struct.

Signed-off-by: Jim Warner <james.warner@comcast.net>
TOP, respond to library change to the pids_reap struct ...

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: miscellaneous tweaks to pid code and comments
Jim Warner [Thu, 20 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: miscellaneous tweaks to pid code and comments

. traded a complex misaligned memory allocation scheme
in the make_hist function for a simple aligned scheme.
plus memory allocation increases are globally defined.

. changed 1 parameter for procps_pids_stacks_sort() to
better reflect the 'array of pointers', not an address
of a pointer as is used with guys such as 'new/unref'.

. the pids_reap struct was changed slightly to make it
more reflective of it's actual implementation details.

. the Item_table member .mustfree is now .needfree and
that .makehist was now made .needhist for consistency.

. reduced the number of separate 'return NULL;' source
statements in that primary procps_pids_reap() routine.

. ensured consistent reference to sizeof(void *) & not
occasional reference to sizeof(void*) without a space.

. rather than enable/disable validate_stacks via a #if
in the function body, it is now handled via a #define.

. some comments in the procps_pids_reset function were
adjusted to reflect this current implementation. shown
originally, they reflected an aborted attempt to avoid
a testing aberration not fully understood at the time.

. added a summary of the memory overhead cost of HST_t
processing to that UNREF_RPTHASH output at unref time.

. a 'PIDs at max depth:' portion of that UNREF_RPTHASH
enabled #define is now published only when the maximum
depth of hash table entry chains exceed depths of one.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: eliminated old kernel-2.4 & 2.5 support (man too)
Jim Warner [Wed, 19 Aug 2015 05:00:00 +0000 (00:00 -0500)]
top: eliminated old kernel-2.4 & 2.5 support (man too)

The newlib informal cutoff for kernel support seems to
be around release 2.6. This commit eliminates any such
support for really old 2.4 and 2.5 kernels within top.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: exploit those new library task/threads provisions
Jim Warner [Wed, 19 Aug 2015 05:00:00 +0000 (00:00 -0500)]
top: exploit those new library task/threads provisions

This patch adapts top to exploit the new <proc/pids.h>
interface. And it appears to have reduced top's weight
by a considerable margin. Gone were the sort callbacks
and manipulation of those library flags. Gosh, all top
needs to do now is track some enumerators of interest.

[ whoa, wait just a damn minute. it now appears some ]
[ that weight loss was solely the result of a theft. ]

[ jeeze, we turn our back for just a minute & newlib ]
[ up & steals our pids hashing logic for his history ]
[ needs. oh well, i guess life's just not that fair. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: implement task/thread support via the new api
Jim Warner [Wed, 19 Aug 2015 05:00:00 +0000 (00:00 -0500)]
library: implement task/thread support via the new api

This commit is the culmination of efforts to modernize
the library api. It should be treated as a first blush
attempt, especially since I have absolutely no library
design experience. But I did have a very strong desire
to lessen the new library's impact on the top program.

Under this new api, a 'stack' is the equivalent of the
old proc_t. It can be seen as a variable length record
whose contents & order is under complete user control.

That initial stack/record configuration is established
at procps_pids_new() time and will probably serve most
program needs. But, a dynamic & demanding program like
top will later change a stack via procps_pids_reset().

For programs like top & ps, procps_pids_reap() will be
the function that will retrieve all tasks and threads.

Any program that needs to filter / select only certain
processes or users have available other functions that
can be used: procps_pids_stacks_alloc, fill & dealloc.

This implementation attempts to maximize that existing
proven libprocps code base. As we gain more experience
such actual code can be migrated into the pids.c file.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agoold library: just some tweaks for transition to newlib
Jim Warner [Wed, 19 Aug 2015 05:00:00 +0000 (00:00 -0500)]
old library: just some tweaks for transition to newlib

A few minor changes are being made to position the old
readproc logic for a transition to the newlib pid api.

These changes will not impact current users beyond the
the need to recompile such code. Hopefully this should
be very last version change to the deprecated library.

. most char arrays were replaced via char * to dynamic
memory. this was done so that newlib could just assume
ownership of such strings without using a strdup call.

. former user and group name arrays also became char *
but here the reason was because pwcache already cached
those names. so, copying to an array never made sense.

. the concept of QUICK_THREADS used to avoid duplicate
overhead for string data was disabled. it could not be
integrated with the newlib design, at least initially.

. any #define which influenced the size of that proc_t
was disable in the header. it was probably a poor idea
to approach optional features in such a manner anyway.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: fix unlikely edge case wherein all fields are off
Jim Warner [Mon, 3 Aug 2015 05:00:00 +0000 (00:00 -0500)]
top: fix unlikely edge case wherein all fields are off

While testing a newlib interface for pids acquisitions
I encountered some unexpected results if an idiot user
(me) turns off all displayable fields. So, this commit
ensures that the PID field will be shown as a minimum.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: avoid an unnecessary conversion for 'USED' column
Jim Warner [Sat, 1 Aug 2015 15:52:20 +0000 (10:52 -0500)]
top: avoid an unnecessary conversion for 'USED' column

When the USED column was introduced the proc_t.vm_swap
& proc_t.resident values were added together. However,
using 'resident' required an additional PROC_FILL flag
not to mention extra conversion of pages to kibibytes.

So now we'll use an already present vm_rss value which
removes any special handling for top's derived column.

And while we're at it we'll trade some more 'resident'
field uses with that more immediately usable 'vm_rss'.

[ this commit has been adapted for the newlib branch ]

Reference(s):
commit 709785e20bd19dc28546d19c45bb7444a56f88b9

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: miscellaneous accumulated tweaks to code/comments
Jim Warner [Mon, 27 Jul 2015 05:00:00 +0000 (00:00 -0500)]
top: miscellaneous accumulated tweaks to code/comments

Jeeze, to correct spelling on one single word (incure)
you had to go and align the entire comments paragraph?

[ well, at least there's one other minor code change ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: eliminate 'user' from the inspection view headers
Jim Warner [Mon, 27 Jul 2015 05:00:00 +0000 (00:00 -0500)]
top: eliminate 'user' from the inspection view headers

Since it's possible that euser name is not being shown
or the horizontal position had been scrolled past that
USER column, then part of those headers will be blank.

So it doesn't make sense to try and show the USER that
is associated with a process at all. Thus, this commit
simply removes the 'user' provision from both headers.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: minor tweaks of program logic and/or comments
Jim Warner [Thu, 23 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: minor tweaks of program logic and/or comments

This commit just corrects the oversight wherein 'item'
was being employed when 'these' was actually intended.

Also, it trades some 'item' use for a more descriptive
input parameter which henceforth is known as a 'dest'.

And, there was one leftover 'next' pointer eliminated.

Finally, some logic was made a tad less dependent upon
enumerator names and a few comments were also updated.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: improve vertical scroll management for 'i' toggle
Jim Warner [Sun, 12 Jul 2015 09:44:44 +0000 (04:44 -0500)]
top: improve vertical scroll management for 'i' toggle

When a user is taking advantage of the scroll features
it is likely a scrolled vertical position is well past
the first displayable task. That is especially true of
top's forest view ('V') mode where those early systemd
attached processes are generally not very interesting.

As such, should the idle mode toggle ('i') be employed
a distorted display is almost guaranteed because tasks
that have used some cpu, and thus should be displayed,
have already been skipped by virtue of their position.

So this patch temporarily nullifies vertical scrolling
during the period when idle tasks are not being shown.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: eliminate extra stack header space provisions
Jim Warner [Wed, 22 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: eliminate extra stack header space provisions

With the new perspective on potential uses of a 'noop'
enumerator (or whatever we decide to call it) there is
no longer a need to provide for any extra 'user' space
in the stack header structures used by slab & meminfo.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: vmstat redesign now using 'stack' vs. 'chain'
Jim Warner [Tue, 21 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: vmstat redesign now using 'stack' vs. 'chain'

In addition to that text shown below the line which is
common to several commit messages, this patch contains
several minor changes with lessor impact upon the API:

. Standard copyright boilerplate was added in .c file.

. The #include header files are ordered alphabetically
now, with all those <sys/??> types separately grouped.

. The header file follows the conventions of indenting
(by 4 spaces) those parameters too lengthy for 1 line.

------------------------------------------------------
. The former 'chains' have now become 'stacks' without
the 'next' pointer in each result struct. The pointers
initially seemed to offer some flexibility with memory
allocations and benefits for the library access logic.
However, user access was always via displacement and a
a statically allocated chain was cumbersome to define.

. An enumerator ending in '_noop' will no longer serve
as a fencepost delimiter. Rather, it has become a much
more important and flexible user oriented tool. Adding
one or more such 'items' in any items list passed into
the library becomes the means of extending the 'stack'
to also include user (not just library) data. Any such
data is guaranteed to never be altered by the library.

. Anticipating PID support, where many different types
must be represented in a result structure, we'll adopt
a common naming standard. And, while not every results
structure currently needs to reflect disparate types a
union will be employed so the same dot qualifier ('.')
can be used consistently when accessing all such data.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: readstat redesigned using 'stack' vs. 'chain'
Jim Warner [Tue, 21 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: readstat redesigned using 'stack' vs. 'chain'

In addition to that text shown below the line which is
common to several commit messages, this patch contains
several minor changes with lessor impact upon the API:

. A call to procps_stat_read_jiffs() has been added to
those jiffs functions carrying the 'fill' nomenclature
to parallel like functions in some of our other files.

. The #include header files are ordered alphabetically
now, with all those <sys/??> types separately grouped.

. Standard copyright boilerplate was added in .c file.

. The header file follows the conventions of indenting
(by 4 spaces) those parameters too lengthy for 1 line.

------------------------------------------------------
. The former 'chains' have now become 'stacks' without
the 'next' pointer in each result struct. The pointers
initially seemed to offer some flexibility with memory
allocations and benefits for the library access logic.
However, user access was always via displacement and a
a statically allocated chain was cumbersome to define.

. An enumerator ending in '_noop' will no longer serve
as a fencepost delimiter. Rather, it has become a much
more important and flexible user oriented tool. Adding
one or more such 'items' in any items list passed into
the library becomes the means of extending the 'stack'
to also include user (not just library) data. Any such
data is guaranteed to never be altered by the library.

. Anticipating PID support, where many different types
must be represented in a result structure, we'll adopt
a common naming standard. And, while not every results
structure currently needs to reflect disparate types a
union will be employed so the same dot qualifier ('.')
can be used consistently when accessing all such data.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: slab is redesigned to use 'stack' vs. 'chain'
Jim Warner [Tue, 21 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: slab is redesigned to use 'stack' vs. 'chain'

In addition to that text shown below the line which is
common to several commit messages, this patch contains
several minor changes with lessor impact upon the API:

. A 'read' was added to function procps_slabnode_count
(but only when necessary, i.e. info->nodes_used == 0).

. The #include header files are ordered alphabetically
now, with all those <sys/??> types separately grouped.

------------------------------------------------------
. The former 'chains' have now become 'stacks' without
the 'next' pointer in each result struct. The pointers
initially seemed to offer some flexibility with memory
allocations and benefits for the library access logic.
However, user access was always via displacement and a
a statically allocated chain was cumbersome to define.

. An enumerator ending in '_noop' will no longer serve
as a fencepost delimiter. Rather, it has become a much
more important and flexible user oriented tool. Adding
one or more such 'items' in any items list passed into
the library becomes the means of extending the 'stack'
to also include user (not just library) data. Any such
data is guaranteed to never be altered by the library.

. Anticipating PID support, where many different types
must be represented in a result structure, we'll adopt
a common naming standard. And, while not every results
structure currently needs to reflect disparate types a
union will be employed so the same dot qualifier ('.')
can be used consistently when accessing all such data.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: meminfo redesigned to use 'stack' vs. 'chain'
Jim Warner [Tue, 21 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: meminfo redesigned to use 'stack' vs. 'chain'

In addition to that text shown below the line which is
common to several commit messages, this patch contains
the following additional change without an API impact:

. The #include header files are ordered alphabetically
now, with all those <sys/??> types separately grouped.

------------------------------------------------------
. The former 'chains' have now become 'stacks' without
the 'next' pointer in each result struct. The pointers
initially seemed to offer some flexibility with memory
allocations and benefits for the library access logic.
However, user access was always via displacement and a
a statically allocated chain was cumbersome to define.

. An enumerator ending in '_noop' will no longer serve
as a fencepost delimiter. Rather, it has become a much
more important and flexible user oriented tool. Adding
one or more such 'items' in any items list passed into
the library becomes the means of extending the 'stack'
to also include user (not just library) data. Any such
data is guaranteed to never be altered by the library.

. Anticipating PID support, where many different types
must be represented in a result structure, we'll adopt
a common naming standard. And, while not every results
structure currently needs to reflect disparate types a
union will be employed so the same dot qualifier ('.')
can be used consistently when accessing all such data.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: tests for sysinfo
Craig Small [Mon, 20 Jul 2015 12:23:21 +0000 (22:23 +1000)]
library: tests for sysinfo

First set of tests for the library API, this lot checks the two
functions out of sysinfo.c

Signed-off-by: Craig Small <csmall@enc.com.au>
9 years agolibrary: ensure the consistent handling of 'noop' enum
Jim Warner [Mon, 13 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: ensure the consistent handling of 'noop' enum

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: also include a 'read' for slabnode_chain_fill
Jim Warner [Mon, 13 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: also include a 'read' for slabnode_chain_fill

While meminfo does implement only the singular version
of 'xxxx_chain_fill', it was wrong to limit the 'read'
to the plural version (only) within our new slabs API.

This kind of inconsistency will only spell trouble for
future users of the new libprocps API. So, this commit
will mean that any form of xxxx_chain(s)_fill function
also includes a 'read', whereas xxx_getchain does not.

Reference(s):
commit aab537bc1333b9ca57eaeec073b51af12f9280f8
http://www.freelists.org/post/procps/newlib-interfaces

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: tweak new interface code and improve comments
Jim Warner [Mon, 13 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: tweak new interface code and improve comments

With a little help from smatch, this commit eliminates
some inappropriate code. Also some programmer comments
were (barely) improved (i hope) in some small measure.

Reference(s):
smatch: 406 procps_meminfo_chain_fill() warn: variable dereferenced before check 'chain' (see line 403)

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agovmstat: adapted to exploit the alloc & sort interfaces
Jim Warner [Sat, 11 Jul 2015 05:00:00 +0000 (00:00 -0500)]
vmstat: adapted to exploit the alloc & sort interfaces

In addition to exploiting the new interface, a warning
for a meminfo variable 'used uninitialized' was fixed.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agoslabtop: adapted to exploit new alloc & sort interface
Jim Warner [Sat, 11 Jul 2015 05:00:00 +0000 (00:00 -0500)]
slabtop: adapted to exploit new alloc & sort interface

In addition to the new interface several other changes
were made. In fact, there are so many I must apologize
in advance to Craig, et al. for the hatchet I wielded.

Among the changes was my attempt to shrink the body of
that main() function. It's amazing how some folks must
always cram as code much as possible into  ol' main().

Personally, unless it's a throwaway quick & dirty pgm,
all main function bodies should not exceed one screen.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: revised sort + new allocate APIs for slabinfo
Jim Warner [Sat, 11 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: revised sort + new allocate APIs for slabinfo

With this patch, we will be close to an implementation
which will be needed when accommodating tasks/threads.
The following explanation was from an earlier message:

The slabtop requirements are similar to those of PIDs.
One must accommodate the variable number of slab nodes
(PIDs) while also accepting different data (char * and
unsigned long). Furthermore, some generalized means to
sort all that acquired stuff must somehow be provided.
------------------------------------------------------

So this patch expands the API to provide dynamic chain
allocation plus allow sorting of those dynamic chains.
While specific to slab needs (nodes, not global stats)
it is not too early to begin to think of newlib chains
as the opaque replacement for a deprecated old proc_t.

Better yet, any newlib chain is inherently variable in
length, something the old proc_t couldn't claim to be.
Of course, as we get to PIDs we'll want to grow/shrink
chains (easily accomplished with a special item enum).
And we'll want to grow/shrink those **head arrays too.
But these minor details don't seem insurmountable now.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: exploit that meminfo dynamic chain allocation API
Jim Warner [Sat, 11 Jul 2015 05:00:00 +0000 (00:00 -0500)]
top: exploit that meminfo dynamic chain allocation API

The commit msg summary says it all (well, not really).

The previous statically allocated results chain served
the top program perfectly in all its lib memory needs.
But, someone needs to try out the brand new interface.

Besides, there were a few other changes which I wanted
to make. And among them were the following miscellany:

. some names were changed, like 'context' became 'ctx'

. an unnecessary redundant library call was eliminated

. the placement of a few globals was made more logical
( thanks Craig for following the capitalization rule )

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: refactor meminfo providing dynamic allocation
Jim Warner [Sat, 11 Jul 2015 05:00:00 +0000 (00:00 -0500)]
library: refactor meminfo providing dynamic allocation

An earlier approach to meminfo chaining, referenced in
the patch shown below, represents the first baby steps
toward the goal of some generalized approach with PIDs
processing. However, statically allocating a chain for
each task or thread is totally impractical. And, while
a single chain could serve all PIDs, that would mean a
separate call to our library for each running process.

This commit is intended as the next evolutionary step,
dynamically allocating some 'result' chains to contain
as many or as few 'items' as a caller wishes. In other
words, holding only those 'items' of current interest.

This is the kind of service useful for both top and ps
programs if we finally get around to /proc/<PID> data.

Reference(s):
commit c3fd7473c5e2f8be59b2ac90696e79079f45b5a8

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: rebase & make current initial slabinfo effort
Craig Small [Sat, 4 Jul 2015 04:59:59 +0000 (23:59 -0500)]
library: rebase & make current initial slabinfo effort

This was Craig's original patch, referenced below, but
it was never pushed to newlib. It has now been rebased
on top of some diskstat stuff to serve as a beginning.

The original effort was perfectly serviceable (after a
memory leak was fixed) but the approach would not have
served future PID needs when that proc_t went bye bye.

The slabtop requirements are similar to those of PIDs.
One must accommodate the variable number of slab nodes
(PIDs) while also accepting different data (char * and
unsigned long). Furthermore, some generalized means to
sort all that acquired stuff must somehow be provided.

So I wanted to try a different approach that seemed to
hold potential for satisfying future top and ps needs.
Subsequent commits will make that attempt, building on
Craig's original patch whose commit msg appears below.
------------------------------------------------------

All of the /proc/slabinfo related calls have been changed
here. They follow the same procps_slabinfo_* format.

Made both the slabtop and vmstat programs use the new
API as one was using the old one and one was just sort
of trying to do its own thing.

Sorting of slabnodes is also possible via the library.

Reference(s):
http://www.freelists.org/post/procps/Sorting-slabsprocesses,3
http://www.freelists.org/post/procps/library-rework-slabinfo-calls

Signed-off-by: Craig Small <csmall@enc.com.au>
Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: Update diskstat API
Craig Small [Tue, 7 Jul 2015 12:42:06 +0000 (22:42 +1000)]
library: Update diskstat API

The calls for reading diskstat have been moved out of
sysinfo and into new files diskstat.[ch] These new
library calls follow the standard pattern for the
new libprocps.

vmstat is updated to use the new API and also got
the weighted IO time added.

vmstat -p previously would only show partitions, not
disks. There does not appear to be any good reason to
artifically deny a user to use this command on a disk,
rather than a partition so this restriction was lifted.

I also realised using int for devid means you can send
the library negative numbers, the index uses unsigned int.
Other similiar calls will need to be fixed too.

Signed-off-by: Craig Small <csmall@enc.com.au>
9 years agolibrary: remove procps_pagesize_get()
Craig Small [Thu, 2 Jul 2015 10:54:11 +0000 (20:54 +1000)]
library: remove procps_pagesize_get()

This is actually a systemcall getpagesize(2) or it is defined
in configure using a variety of methods, including a default
hard coded value as a last resort.

There is no need to have this in libprocps

9 years agolibrary: remove getpartitions_num from library
Craig Small [Wed, 1 Jul 2015 12:14:30 +0000 (22:14 +1000)]
library: remove getpartitions_num from library

getpartitions_num was only used in vmstat and basically counted
partitions in disks, this is now moved to vmstat.

9 years agolibrary: cleanup unused old functions
Craig Small [Wed, 1 Jul 2015 12:08:02 +0000 (22:08 +1000)]
library: cleanup unused old functions

The old getstat and meminfo functions and their globals are
removed.

Also page_size is now a function, procps_pagesize_get()

9 years agolibrary: loadavg change to procps_loadavg
Craig Small [Wed, 1 Jul 2015 11:47:30 +0000 (21:47 +1000)]
library: loadavg change to procps_loadavg

9 years agotop: tweak newlib interface, as more experience gained
Jim Warner [Tue, 30 Jun 2015 05:00:00 +0000 (00:00 -0500)]
top: tweak newlib interface, as more experience gained

Now that the dust is settling following an initial API
library effort, it is apparent my naming standards may
not have always been observed. This was a minor crime,
since those standards are unwritten (& not apparent?).

Basically, top has always capitalized the first letter
of global variables in an effort to distinguish global
definitions from local variables later in the program.

So this patch alters the new API variables to conform,
while also explicitly using 'context' for key structs.

Lastly, top now employs the new '#include <proc/name>'
conventions for the new/converted module header files.

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: normalize the readstat context structure name
Jim Warner [Tue, 30 Jun 2015 05:00:00 +0000 (00:00 -0500)]
library: normalize the readstat context structure name

The new library meminfo & vmstat modules use structure
names for their context which exactly mirror the names
of the very /proc/ files whose particulars they yield.

The one exception to this rule was the readstat module
whose struct was named statinfo yet the file was stat.

This commit simply renames that structure (only) so as
to hopefully establish such a naming convention as our
standard going forward. And, it's makes good symmetry.

[ this module's name itself is just perfect as it is ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: the uref functions were insufficiently robust
Jim Warner [Tue, 30 Jun 2015 05:00:00 +0000 (00:00 -0500)]
library: the uref functions were insufficiently robust

The earlier attempt at protecting these functions from
already freed memory worked just fine until the memory
was, in fact, reused by the OS. At that point, the ref
count would most likely fail an existing a test for 0.

So this commit will take control of the 'info' pointer
and force it to NULL when a reference count reaches 0.

Plus, since it makes little sense returning an address
that a caller already has, henceforth we will return a
reference count out of the 'ref' and 'unref functions.

Reference(s):
commit 74beff80ff3624761ecd20fafac0485f48c9c873

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agotop: make recently added variable name more conforming
Jim Warner [Mon, 29 Jun 2015 16:31:42 +0000 (11:31 -0500)]
top: make recently added variable name more conforming

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agomisc: remove yet more darn trailing whitespace buildup
Jim Warner [Mon, 29 Jun 2015 16:16:52 +0000 (11:16 -0500)]
misc: remove yet more darn trailing whitespace buildup

Signed-off-by: Jim Warner <james.warner@comcast.net>
9 years agolibrary: Replace smp_num_cpu with function
Craig Small [Mon, 29 Jun 2015 12:31:36 +0000 (22:31 +1000)]
library: Replace smp_num_cpu with function

Instead of exposing a variable smp_num_cpus that is updated
with cpuinfo, use procps_cpu_count() which returns the same
value.